护眼计划(光源护眼)

25

目前,大多数PC设备缺乏自带环境光传感器,无法像移动手机设备一样根据环境光自动调节显示器亮度。在PC端,用户只能手动调节亮度或使用显示器设备自带的亮度调节按钮进行设置。

手动调节亮度存在一个潜在隐患,即用户只有在感觉到眼睛不适时才会主动调整亮度。这意味着过亮或过暗的显示器亮度可能已经对用户的眼睛造成了不适影响,而调整过程也会打断用户当前的任务。

通过调研,我发现了一款名为《追光护眼》的解决方案。该软件利用环境光传感器硬件设备收集环境光数据,并结合用户之前手动调整显示器亮度的习惯,建立用户使用模型。随后,根据该模型,软件会自动调节显示器亮度以适应当前环境光线。虽然这与我的设想基本一致,但我计划将环境光传感器硬件设备替换为移动设备自带的环境光传感器。通过在移动设备上安装该APP,自动将环境光传感器数据传输到PC端进行学习计算,然后自动调节显示器亮度。

计划开发一款名为《光源护眼》的PC端护眼软件,旨在根据环境光自动调整显示器亮度。接下来,我将详细介绍这款软件的主要设想以及我最近了解到的相关知识。

软件功能

  • 移动端

    • 采集环境光数值

    • 环境光数值推送到PC端

  • PC端

    • 接收环境光数值

    • 根据环境光数值调整显示器亮度

    • 手动调整显示器亮度

    • 自定义设置

移动端

目前仅在安卓端进行了实现,因功耗问题移动端实现尽量简单,只需要将当前光敏传感器的数值推送到PC端即可

PC端

在PC端的初期,我使用了 Java + Swing + JNA 进行开发。然而,由于Jvm运行时内存占用过大,以及GraalVM对JNA等使用反射的库支持程度不高,最终我不得不放弃这种方案。虽然考虑过使用C#,但考虑到后期可能会应用各种模型算法,最终我选择了 aardio。aardio天然支持嵌入 Python,这对于后期的扩展非常有利。aardio 的 web.form 组件可以通过 js + html 绘制UI,这极大地简化了验证过程(尽管后期考虑使用 static 重写 UI,因为 web.form 组件不支持多线程会导致卡顿)。

使用 Python 的 screen_brightness_control 库,通过 UDP 监听 23245 端口接收移动端环境光数值,并进行显示器亮度的获取和调整。

问题

  • 不同厂家的光敏传感器在相同亮度下可能显示不同数值。

  • 显示器的亮度值范围通常是0到100,然而即使两块显示器的亮度值相同,实际亮度也可能存在差异。

  • 人眼对亮度的感知是非线性的,并且因人而异。

  • 人为遮挡等问题可能会导致光敏传感器短时间内显示异常数值。

目前尚未解决以上问题,目前的软件仅使用对数模型、梯度下降优化和偏差校正的移动平均进行用户偏好学习。未来,我们计划引入滤波器、机器学习、动态时间规整和延迟调整等内容,以优化使用体验。目前,这些内容仍在探索中。