毕设项目|基于OpenCV的疲劳检测

基于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……想发表顶会论文,找不到创新点?

读完论文,仍旧无法用代码复现……

然而,导师时常无法抽出时间指导,想写论文却无人指点……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值