自助智能视力检测系统(EyeFocus),是一款融合智能算法、嵌入式硬件、无线交互的全自动视力筛查设备,以 “无人值守、精准高效、自助便捷” 为核心理念,彻底替代传统人工视力检测,打造智能化、标准化、低成本的视力筛查新方案,助力青少年近视防控、医疗体检智能化升级。
- 自助智能视力检测系统(EyeFocus),基于 Godot Engine 4.6 开发的专业视力自测应用,严格遵循 GB 11533 国家标准对数视力表(E 字视标),在屏幕上实现物理精确的视力测量,并支持热敏打印机输出报告:
🔥 国标级智能测视软件,基于 Godot Engine 4.6 开发,严格遵循 GB 11533-2011 国家标准,内置像素级视标校准算法与自适应阶梯检测算法,实现全自动、无人工判读的精准视力检测;
🔥 嵌入式热敏打印模块,自研专用驱动电路,集成 EM5820H 热敏打印机,检测完成后自动输出标准化视力报告;
🔥 双模式无线交互模块,支持蓝牙体感枪(AriGun)与远程控制键盘双模式,受检者全程自助响应,无需医护人员干预。
- 系统具备零人工干预、检测精准、效率极高、部署灵活、数据可追溯等优势,不仅适配医院诊前分流、体检中心自助检测,还可用于校园大规模筛查、社区公益检测、家庭日常自测,应用场景广泛,市场前景广阔,助力推动医疗健康与人工智能技术的深度融合。
| 特性 | 说明 |
|---|---|
| 标准对数视力表 | 14 级标准(0.10 ~ 2.00),严格遵循国标 |
| 物理精确算法 | 根据显示器尺寸、分辨率、距离精确换算视标像素 |
| 双 / 单眼模式 | 左眼、右眼独立测试,数据分开记录 |
| 自适应网格 | 视标网格动态排列,智能计算行列数与间距 |
| 专注全屏模式 | 一键隐藏 UI,全屏仅视标,沉浸测试 |
| 自适应阶梯 | 连续答对 3 次升级,答错 2 次降级 |
| 参数校准 | 自定义显示器尺寸、分辨率、测试距离 |
| 热敏打印 | 支持 EM5820H 串口打印机输出报告 |
| 红圈呼吸 | 目标视标由红色呼吸动画圆环标记 |
黑色/白色极简风格,三分栏横屏布局,1280 × 720 分辨率。
- Godot Engine 4.6+(推荐 .NET 版本)
- 任意支持 Godot 4 的操作系统(Windows / macOS / Linux)
git clone https://github.com/Euler-lne/eye-focus.git
cd eye-focus
# 用 Godot 4.6 打开项目根目录,点击运行即可或者直接下载源码,用 Godot 编辑器打开 project.godot,按 F5 运行。
在 Godot 编辑器中选择 项目 > 导出,按需配置导出模板即可生成独立可执行文件。
① 选择模式 → ② 参数校准 → ③ 遮挡眼睛 → ④ 判断朝向 → ⑤ 按键作答 → ⑥ 打印报告
- 启动应用后,在左侧面板选择检测模式(左眼 / 右眼 / 双眼依次)
- 点击「参数校准」输入显示器尺寸与测试距离
- 根据提示遮挡相应眼睛,与屏幕保持 5 米标准距离
- 观察中央区域被红圈标记的 E 字视标,判断开口方向
- 使用方向按钮或键盘快捷键作答
- 测试完成后点击「生成最终结果」,连接打印机一键打印报告
| 按键 | 功能 |
|---|---|
| W / ↑ | 开口朝上 |
| A / ← | 开口朝左 |
| S / ↓ | 开口朝下 |
| D / → | 开口朝右 |
| ESC | 退出专注模式 |
- 左眼模式 — 仅测试左眼,请遮挡右眼
- 右眼模式 — 仅测试右眼,请遮挡左眼
- 双眼依次 — 先测左眼再测右眼,数据分别记录
为确保视力结果准确,测试前务必校准!
校准参数:
- 显示器对角线尺寸(英寸)
- 屏幕分辨率(宽 × 高)
- 测试距离(米,建议 5 米)
提示:默认 24 英寸 1920×1080, 5 米。笔记本电脑或小尺寸显示器请务必校准。
点击「专注模式」隐藏所有 UI 面板和鼠标光标,全屏仅视标,适合远距离沉浸测试。按 ESC 退出。
应用内置对 EM5820H 热敏打印机的支持,通过串口连接后即可打印格式化视力报告:
╔══════════════════════════════════╗
║ EyeFocus
║ 专业视力自测报告
║ ────────────────────────────────
║ 测试时间: 2026-05-21 14:35:54
║ 测试标准: GB 11533 距离: 5m
║ ────────────────────────────────
║
║ 左眼视力 右眼视力
║ 1.00 1.00
║
║ ────────────────────────────────
║ 参考区间 正常视力 >= 1.0
║ 视力正常,建议定期复查
║ ────────────────────────────────
║ 本报告仅供参考
║ 如有异常请到医院就诊
╚══════════════════════════════════╝
无打印机时自动切换为终端模拟模式,输出相同格式的 ASCII 边框报告。
eye-focus/
├── project.godot # 项目配置
├── icon.svg # 应用图标
├── font/
│ └── SourceHanSansSC-Regular-2.otf # 思源黑体
├── scenes/
│ └── main.tscn # 主场景 UI 布局
├── scripts/
│ ├── Main.gd # 主控制器
│ ├── EyeChart.gd # E 字视标渲染
│ ├── OptotypeContainer.gd # 视标网格容器
│ ├── TestController.gd # 测试流程控制
│ ├── VisionCalculator.gd # 视力值计算
│ ├── VisionLevelManager.gd # 视力等级管理
│ ├── PrinterManager.gd # 打印机管理
│ └── CalibrationPanel.gd # 校准面板
├── addons/
│ └── gdserial/ # 串口通信插件
└── imgs/
└── screenshot.png # 界面截图
| 模块 | 文件 | 职责 |
|---|---|---|
| 主控制器 | Main.gd |
UI 协调、事件处理、信号转发 |
| 视标渲染 | EyeChart.gd |
_draw() 绘制标准 E 字,旋转四方向 |
| 网格布局 | OptotypeContainer.gd |
动态行列计算,红圈呼吸动画 |
| 测试流程 | TestController.gd |
答题验证、状态更新、视标刷新 |
| 视力计算 | VisionCalculator.gd |
GB 11533 公式,像素换算 |
| 等级管理 | VisionLevelManager.gd |
14 级标准表,3 对 2 错算法 |
| 打印管理 | PrinterManager.gd |
EM5820H 串口打印,终端模拟 |
笔画宽 (mm) = tan( 1分角 / 视力值 ) × 测试距离 (mm)
视标边长 (mm) = 5 × 笔画宽 (5×5 栅格,5 个等宽单元)
视标边长 (px) = 视标边长 (mm) × 像素密度 (px/mm)
验证:V=1.0,距离 5m → 视标边长 ≈ 7.272 mm,与国标完全吻合。
答对 3 次 → 升级(视力值增大,视标变小)
答错 2 次 → 降级(视力值减小,视标变大)
左右眼数据完全独立存储,14 级递进:0.10 → 0.12 → 0.15 → 0.20 → 0.25 → 0.30 → 0.40 → 0.50 → 0.60 → 0.80 → 1.00 → 1.20 → 1.50 → 2.00。
- 升级条件:在当前视力等级上连续正确 3 次,且当前等级不是最高(2.0),则视力等级提升一级,视标变小。
- 降级条件:在当前视力等级上连续错误 2 次,且当前等级不是最低(0.1),则视力等级降低一级,视标变大。
- 说明:升级/降级只影响当前测试中的视标大小,不直接决定最终视力。
- 每个视力等级独立累计正确次数:每答对一次,该等级的正确计数器加 1。
- 达标阈值:当某个等级的累计正确次数达到 10 次时,该等级被认定为该眼睛的最终视力。
- 确定顺序:左右眼分别统计;哪个等级先累计满 10 次,该眼睛的最终视力就定为那个等级;若多个等级同时达标,则取最高等级。
- 测试结束:当一只眼的最终视力确定后,程序自动记录结果并切换到另一只眼或弹出最终结果。
- 开始:选择“双眼依次”模式后,默认从左眼开始测试,初始视力等级为 1.0。
- 左眼测试:根据红圈指示的 E 字方向答题;程序会动态升降当前等级,同时后台累计每个等级的答对次数。
- 左眼完成:当左眼某个等级累计正确达到 10 次(例如 1.2 先达标),系统记录左眼最终视力,并切换到右眼;右眼的所有等级计数重置为 0,视力等级恢复为 1.0。
- 右眼测试:重复上述过程。
- 全部完成:右眼也达到某个等级累计正确 10 次后,自动显示最终结果窗口,给出左右眼各自最终视力。
- 重置测试:将左右眼的所有等级累计正确计数清零,当前视力等级恢复至 1.0,并清零连续正确/错误计数。
- 单眼模式切换:切换到左眼或右眼单独测试时,仅清空该眼的累计计数,另一只眼状态保留。
- 抗随机猜测:累计正确 10 次的概率极低(纯随机猜对需要约 10 次正确,概率 < 0.0015%),能有效防止运气成分。
- 允许失误:不要求连续正确,用户偶尔答错不会重置累计计数,更符合真实测试场景。
- 自适应难度:通过连续正确/错误快速调整视标大小,使测试始终围绕用户实际视力水平进行。
-
工作流程:双眼依次模式会先测左眼再测右眼;每只眼都采用“连续答对 3 次升级 / 连续答错 2 次降级”的阶梯策略,同时记录每个等级的累计正确次数。只要某个等级先达到 10 次正确,该眼的最终视力就会被确定并切换到另一只眼。
-
注意:双眼依次并非简单取两次独立测量的平均值,而是依靠阶梯策略与累计达标判据来获得更稳定、更符合实际视力水平的最终结果。
-
在开始任何测试前,请务必先进入「参数校准」并确认或设置显示器的对角线尺寸(英寸)与当前分辨率(宽 × 高)。物理像素密度(px/mm)由这两项决定,直接影响视标的物理尺寸换算,校准错误会导致视力结果偏差。
-
建议在设备首次部署或切换显示器时,按实际屏幕规格填写参数;若不确定尺寸请手动测量屏幕对角线后填写。
项目内已包含录屏演示与真人演示,用于展示软件界面与完整检测流程(位置:videos/screen_record.mp4、videos/live_demo.mp4)。
- 屏幕录制(已包含):
videos/screen_record.mp4— 包含参数校准、单眼/双眼检测流程与打印示例。 - 真人演示(已包含):
videos/live_demo.mp4— 真实受检者操作示范,可直接在页面中播放。
页面(index.html)已增加“演示”栏目,展示以上视频;如需替换,请将新文件放入 videos/ 目录并同步更新页面中的视频源。
| 项目 | 说明 |
|---|---|
| 引擎版本 | Godot 4.6 |
| 开发语言 | GDScript(纯原生) |
| 渲染器 | GL Compatibility |
| 分辨率 | 1280 × 720(横屏 16:9) |
| 拉伸模式 | canvas_items |
| 视力标准 | GB 11533 / ISO 8596 |
| 打印机 | EM5820H 热敏打印机(串口 9600) |
| 串口插件 | GdSerial v0.3.0(跨平台) |
| 运行平台 | Windows / macOS / Linux |
本项目仅供学习和个人使用。如需商用请咨询作者。

