基于OpenCV的实时驾驶状态/驾驶行为检测系统(附教程和代码)

动机:

根据美国国家公路交通安全管理局的数据,每年约有10万起警方报告的交通事故涉及疲劳驾驶。这些事故导致超过1,550人死亡和71,000人受伤。然而,真实数字可能更高,因为很难确定司机在事故发生时是否疲劳驾驶。因此,我们尝试建立一个系统,检测人是否疲劳并提醒他。

安装和环境

Step 1: Update conda

conda update conda

Step 2: Update anaconda

conda update anaconda 

Step 3: Create a virtual environment

conda create -n env_dlib 

Step 4: Activate the virtual environment

conda activate env_dlib

Step 5: Install dlib

conda install -c conda-forge dlib 

运行代码

python app1.py

原理

疲劳检测的基本原理非常简单。首先使用 dlib 的正脸检测器检测人脸。一旦检测到人脸,我们尝试使用 dlib 的面部标记检测器检测面部标记。面部标记检测器返回68个(x,y)坐标,表示面部的不同区域,即嘴巴、左眉毛、右眉毛、右眼、左眼、鼻子和下巴。当然,我们并不需要所有的面部标记,这里我们只需要提取眼睛和嘴巴区域。

现在,在提取标记后,我们计算眼睛纵横比(EAR),如下所示:
该系统的工作可以分为两个部分:

  1. 检测或定位面部。

  2. 预测检测到的面部中重要区域的地标。

  3. `def eye_aspect_ratio(eye):

    Vertical eye landmarks

    A = dist.euclidean(eye[1], eye[5])
    B = dist.euclidean(eye[2], eye[4])

    Horizontal eye landmarks

    C = dist.euclidean(eye[0], eye[3])

    The EAR Equation

    EAR = (A + B) / (2.0 * C)
    return EAR`

一旦预测出结果,我们仅使用眼睛地标和嘴部地标来确定人的眼睛长宽比(EAR)和嘴部长宽比(MAR),以检查人是否困倦。EAR和MAR的计算如下所示。
在这里插入图片描述

眼睛区域由6个坐标标记。如果将EAR的值与某个特定的阈值进行比较,这些坐标可以用于判断眼睛是睁开还是闭合。
使用这个概念,我们计算了嘴长宽比
在这里插入图片描述

结果

在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
您好!对于驾驶员疲劳检查,OpenCVPython可以提供很多有用的功能。以下是一些常见的方法和步骤,用于检测驾驶员疲劳: 1. 视觉检测 - 使用OpenCV进行人脸检测和关键点定位,以找到驾驶员的眼睛和面部区域。可以使用经过训练的分类器(如Haar级联分类器)来检测人脸,并使用形状预测器(例如dlib库中的68个面部关键点模型)来定位眼睛。 2. 眼睛状态检测 - 分析驾驶员眼睛的状态,例如眨眼频率、闭眼时间等。通过计算眼睛区域的眨眼频率,可以判断驾驶员是否疲劳。可以使用计时器来记录眨眼时间,并设置阈值来确定疲劳状态。 3. 面部姿态估计 - 使用关键点定位结果,估计驾驶员的面部姿态,如头部倾斜、旋转等。这可以通过计算关键点之间的角度和距离来实现。如果发现驾驶员的头部姿态异常(例如过度倾斜或转向),可能表示疲劳状态。 4. 注意力检测 - 通过分析驾驶员的视线方向和注视点,可以判断其注意力是否集中。可以使用眼部关键点和瞳孔位置来估计注视点。如果驾驶员的注视点偏离道路或频繁转移,可能表示疲劳或分心。 请注意,以上方法仅为一般指导,具体实现可能需要根据您的需求进行更多的调整和优化。另外,还可以考虑使用其他传感器(如红外相机、脑电图等)来辅助疲劳检测。 希望对您有所帮助!如有更多问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿利同学

一角两角不嫌少

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值