# 人脸近距离护眼提醒 **Repository Path**: fifty-x/new-app ## Basic Information - **Project Name**: 人脸近距离护眼提醒 - **Description**: 本项目是一个基于Linux环境的人脸近距离护眼提醒系统。通过计算机视觉技术实现实时人脸检测和距离估算,应用于学生上网课、办公人群长时间使用电脑等场景。系统采用单线程实时处理架构,在PC平台上运行,能够实现约25-30 FPS的实时检测性能。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-05 - **Last Updated**: 2026-07-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 人脸近距离护眼提醒系统 基于 OpenCV 和 Haar 级联人脸检测的实时护眼提醒系统。通过监测用户与屏幕的距离,及时提醒保持安全用眼距离,预防近视。 ## 产品介绍 想象这样一个场景: > 学生在家上网课,长时间面对电脑屏幕。当他不自觉地靠近屏幕时,系统会自动识别并发出警告,提醒他保持安全距离。同时,系统还会定时提醒休息和眨眼,帮助养成良好的用眼习惯。 应用场景 - **学生网课**: 帮助学生保持正确的用眼距离 - **办公人群**: 长时间使用电脑的上班族 - **儿童保护**: 家长为孩子设置的护眼助手 - **远程学习**: 在线教育平台的护眼插件 ## 功能特性 - **实时人脸检测**: 基于 Haar 级联分类器,快速准确识别人脸 - **距离估算**: 通过人脸高度像素值估算与屏幕的距离 - **三级警告**: 绿色(安全)/黄色(警告)/红色(危险)状态指示 - **用眼时间提醒**: 连续使用30分钟后自动提醒休息 - **眨眼提醒**: 每60秒提醒用户眨眼,预防干眼症 - **护眼模式**: 一键切换蓝光过滤模式 - **学习时间统计**: 记录学习时长、专注时间、分心次数 - **性能监控**: 实时显示 FPS、人脸高度、状态信息 ## 技术栈 | 技术 | 版本 | 用途 | |------|------|------| | **OpenCV** | 4.5+ | 人脸检测、图像处理、显示 | | **C++** | 17 | 开发语言 | | **CMake** | 3.15+ | 构建系统 | ## 快速开始 ### 1. 依赖安装 ```bash #Ubuntu/Debian sudo apt update sudo apt install -y build-essential cmake libopencv-dev ``` ### 2. 编译 ```bash 创建构建目录 mkdir -p build && cd build 配置项目(Release模式优化性能) cmake .. -DCMAKE_BUILD_TYPE=Release 编译(使用全部CPU核心) make -j$(nproc) ``` ### 3. 运行 ```bash # 使用默认配置启动 ./eye_protection # 查看帮助信息 ./eye_protection --help 运行效果: 程序启动后自动打开摄像头 窗口显示实时画面和人脸检测框 顶部状态栏显示当前状态、护眼模式、使用时间等信息 底部显示实时帧率 ``` ### 4. 快捷键操作 ```bash 'q': 退出程序 'r': 切换护眼模式 'e': 切换表情模式 ``` ### 5. 输出文件 程序运行时会自动生成以下文件: ```bash # 学习报告(每天生成一个) study_report_YYYY-MM-DD.txt # 报告内容示例: # ========================== # 学习时间统计报告 # ========================== # 生成时间: 2026年07月04日 14:30:00 # # 【学习时长】 # 总学习时间: 2小时30分钟 # 专注时间: 2小时15分钟 # 分心次数: 3次 # # 【专注率】 # 专注率: 90% ``` ## 配置说明 `config.json` 配置项: ```json { // ==================== 输入设置 ==================== "use_camera": true, // 是否使用摄像头(true)/视频文件(false) "video_path": "", // 视频文件路径(use_camera为false时生效) // ==================== 距离阈值设置 ==================== "danger_threshold": 220, // 危险距离阈值(人脸高度像素)- 超过此值触发危险警告 "warning_threshold": 140, // 警告距离阈值(人脸高度像素)- 超过此值触发警告 "hysteresis": 25, // 滞后阈值(防止频繁切换状态) // ==================== 提醒设置 ==================== "time_threshold": 30, // 使用时间提醒阈值(分钟)- 连续使用多久后提醒休息 "blink_interval": 60, // 眨眼提醒间隔(秒)- 每隔多久提醒眨眼 "remind_interval": 8, // 语音/弹窗提醒间隔(秒)- 防止频繁提醒 // ==================== 摄像头设置 ==================== "camera_width": 640, // 摄像头宽度(像素) "camera_height": 480, // 摄像头高度(像素) "min_face_size": 80, // 最小检测人脸尺寸(像素) // ==================== 调试设置 ==================== "debug": false // 是否启用调试模式(显示额外信息) } ``` ## 摄像头参数 | 参数 | 默认值 | 说明 | |:---:|------|------| | 分辨率 | [640 × 480] | [平衡性能与画质] | | 帧率 | [30 FPS] | [流畅度设置] | ## 项目目录结构 ``` eye_protection/ ├── CMakeLists.txt # 构建文件 ├── main.cpp # 主程序 ├── study_report_*.txt # 学习报告(自动生成) ├── models/ # 模型目录 │ └── haarcascade_frontalface_default.xml └── images/ # 截图目录(用于文档) ├── main.png ├── safe.png ├── warning.png └── eye_mode.png ``` ## 常见问题 Q: 检测不到人脸? 检查以下几点: - 确认摄像头已正确连接 - 确保光线充足 - 调整摄像头角度,确保人脸在画面中央 - 检查 /dev/video0 是否存在 Q: 程序卡顿? 尝试以下优化: - 确保使用 Release 模式编译 - 关闭其他占用资源的程序 - 检查是否启用了过高的摄像头分辨率 Q: 护眼模式效果不明显? - 护眼模式通过降低蓝光实现,效果较为微妙。可修改代码中 applyEyeProtectionFilter 函数的蓝光降低比例。