
一、项目介绍
本项目基于 Python 开发,通过调用 OpenCV、Dlib、Scipy 等库,实现对人脸图像中眼部闭合、打哈欠、点头等行为的监测,从而评估人的疲劳状态。适用于司机、安保、工地人员等高风险工作场景。
系统功能包括:
-
实时采集视频流并进行人脸检测
-
提取关键面部标志点(68 点)
-
计算 EAR(眼睛纵横比)、MAR(嘴巴纵横比)、头部姿态等指标
-
校准个体化阈值,自适应判断疲劳状态
-
中文视觉提示与警告反馈
二、技术创新点摘要
-
动态个性化校准机制:
-
引入 EAR 个体基准校准阶段,避免固定阈值对不同人群的误判。
-
-
多模态疲劳检测逻辑融合:
-
同时融合眨眼频率、打哈欠持续时间、点头幅度三个维度,提升检测精度与鲁棒性。
-
-
图像与中文文字融合显示:
-
使用 PIL 结合 OpenCV 实现对中文状态信息的叠加显示,提升人机交互友好性。
-
-
实时反馈与可视化分析:
-
显示 EAR、MAR 动态数值与疲劳状态,用户可直观了解监测过程。
-
三、模型架构设计
四、核心代码讲解
- EAR / MAR 指标计算:
def eye_aspect_ratio(eye): A = dist.euclidean(eye[1], eye[5]) * 1.5 B = dist.euclidean(eye[2], eye[4]) * 1.2 C = dist.euclidean(eye[0], eye[3]) return (A + B) / (2.0 * C)
- 头部点头估计(垂直距离):
def head_pose_estimation(shape): nose_bridge = shape[27] chin = shape[8] return chin[1] - nose_bridge[1]
- 个性化阈值校准:
def head_pose_estimation(shape): nose_bridge = shape[27] chin = shape[8] return chin[1] - nose_bridge[1]
- 疲劳检测逻辑整合:
if COUNTER >= EAR_CONSEC_FRAMES * 2: fatigue_status = "瞌睡!闭眼" elif yawn_counter >= YAWN_CONSEC_FRAMES: fatigue_status = "疲劳!打哈欠" elif nod_counter >= NOD_CONSEC_FRAMES: fatigue_status = "瞌睡!点头" elif COUNTER >= EAR_CONSEC_FRAMES: fatigue_status = "疲劳!眨眼" else: fatigue_status = "正常"
五、优缺点评价
类别 | 评价 |
---|---|
优点 | - 实时性强,适合部署在摄像头前端- 无需模型训练,轻量高效- 融合多个指标判断更精准- 界面友好,支持中文提示 |
缺点 | - 依赖摄像头质量,光照强弱影响大- 无远程数据同步与日志系统- 仅支持单人检测- 模型不具备深度学习自适应能力 |
广告:
© 版权声明
THE END
暂无评论内容