基于OpenCV的疲劳检测系统主要围绕面部关键点跟踪、眼部/嘴部行为分析及头部姿态估计三个核心模块展开,具体实现步骤如下:
1、系统初始化与模块加载
摄像头启动:通过OpenCV的VideoCapture函数调用本地摄像头或视频流,设置分辨率为720P以上以保证关键点检测精度
模型加载
- 人脸检测器:使用dlib的getfrontalface_detector()获取基于HOG特征的人脸检测器。
- 关键点预测器:加载预训练的68点面部关键点模型(如shapepredictor68facelandmarks.dat),用于定位眼、嘴等区域。
import cv2
import dlib
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
2、面部关键点提取与跟踪
人脸检测:对每一帧图像进行灰度化处理,通过人脸检测器获取人脸边界框。
关键点定位:利用预测器在边界框内提取68个关键点坐标,其中:
- 右眼:点36-41
- 左眼:点42-47
- 嘴巴:点48-68
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = detector(gray)
for face in faces:
landmarks = predictor(gray, face)
# 提取眼部坐标
left_eye = [landmarks.part(i) for i in range(42, 48)]
right_eye = [landmarks.part(i) for i in range(36, 42)]
3、疲劳行为判定算法
3.1 眨眼检测(EAR算法)
EAR计算:基于眼睛6个关键点的垂直和水平距离计算眼睛纵横比(Eye Aspect Ratio, EAR),公式为: EAR = \frac{||P2-P6|| ||P3-P5||}{2 \times ||P1-P4||}
其中 𝑃1 至 𝑃6为眼部关键点坐标。
阈值判定:正常睁眼时EAR≈0.25-0.35,闭眼时趋近0。设置阈值0.2,连续3帧低于阈值判定为一次眨眼,1分钟内超过20次触发警报
3.2 打哈欠检测(MAR算法)
MAR计算:通过嘴部上下唇距离与左右嘴角距离的比值判断:
MAR = \frac{||P{51}-P{59}|| ||P{53}-P{57}||}{2 \times ||P{49}-P{55}||}
当MAR>0.75且持续时间超过3秒时判定为打哈欠,1分钟内超过3次触发报警
3.3 头部姿态估计
三维姿态解算:利用OpenCV的solvePnP函数将3D人脸模型(预设的头部三维坐标)与检测到的2D关键点匹配,计算俯仰角(Pitch)、偏航角(Yaw)和滚转角(Roll)
疲劳判定:当俯仰角持续大于15°或滚转角波动剧烈时,认为驾驶员处于低头瞌睡状态。
4、实时报警与可视化
报警机制:通过蜂鸣器或屏幕闪烁提示,例如:
if total_blinks > 20 or yawn_count > 3:
cv2.putText(frame, "FATIGUE ALERT!", (10, 60), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0,0,255), 2)
# 触发声音报警
数据可视化:在画面中绘制眼部/嘴部轮廓、实时EAR/MAR值及头部角度,增强交互性。
毕设项目!半小时打造疲劳检测项目!OpenCV计算机视觉实战(Python版)、学不会我去沙漠数沙子!
5、性能优化与评估
实时性:在i5 CPU上可实现15-20 FPS处理速度,若需更高帧率需采用GPU加速(如CUDA)
准确率:在标准测试集(如YawDD)中,EAR算法对闭眼检测准确率可达97.5%,结合头部姿态后综合准确率提升至98.3%
适应性优化:
- 光照补偿:采用直方图均衡化(CLAHE)处理低光照图像。
- 眼镜干扰:通过虹膜检测(如Hough圆变换)辅助判断实际睁闭眼状态
关键参数配置示例表
典型问题与解决
- 误报率高:动态调整阈值(如根据用户基线EAR自适应校准)。
- 侧脸检测失效:引入多目标跟踪(如KCF算法)增强鲁棒性。
- 资源占用大:采用模型量化(如TensorRT加速)减少计算量
有以下论文写作问题的可以扫下方名片详聊
前沿顶会、期刊论文、综述文献浩如烟海,不知道学习路径,无从下手?
没时间读、不敢读、不愿读、读得少、读不懂、读不下去、读不透彻一篇完整的论文?
CVPR、ICCV、ECCV、ICLR、NeurlPS、AAAI……想发表顶会论文,找不到创新点?
读完论文,仍旧无法用代码复现……
然而,导师时常无法抽出时间指导,想写论文却无人指点……