基于脸部关键点的睡意检测

01.研究目的

根据国家公路交通安全管理局的数据,每年均涉及疲劳驾驶事故中导致超过1,550人死亡和71,000人受伤,但是实际数字可能要高得多[1]。因此,为了避免这类事故的发生,我们制作了这个系统。它通过检查人的眼睛是否闭合或正在打哈欠来预测眼睛和嘴巴的标志,从而确定一个人是否正处于疲劳驾驶。

主要内容

02.主要内容

该系统的工作可以分为两个部分:

1. 检测或定位面部。

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

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

 

 

现在,既然有了代码,让我们了解一下代码是如何工作的:

dlib库内部的预训练面部界标检测器用于估计映射到面部面部结构的68-(x,y)坐标的位置[2]。这些68-(x,y)坐标表示脸部的重要区域,例如嘴巴,左眉,右眉,左眼,右眼,鼻子和下巴。其中,我们只需要左眼,右眼和嘴巴的(x,y)坐标:

 

 

左上:当眼睛睁开时,眼睛界标的可视化。右上:闭上眼睛时的眼睛地标。底部:绘制随时间变化的眼睛纵横比。眼睛纵横比的下降表示眨眼[3](Soukupová和Čech的图1)。[4]

基于论文Real-Time Eye Blink Detection using Facial Landmarks[5],我们可以得出一个反映这种关系的方程,称为眼睛纵横比(EAR):

眼睛纵横比(EAR)公式。

使用这个概念,我们计算了嘴长宽比:

用68-(x,y)坐标表示人脸

正如我们看到的,嘴由一组20-(x,y)坐标表示。因此,我们已使用坐标62、64、66和68来计算两者之间的距离,方法与EAR计算相同。

结果

在人员困倦或打哈欠时发出警报

另外,为了保留证据,我们保存了让人昏昏欲睡的框架。

框架存储在单独的文件夹中作为证明

该图显示了EAR和MAR随时间的变化

源代码的GitHub链接可在此处获得:https://github.com/fear-the-lord/Drowsiness-Detection

03.参考文献

[1]Drivers are falling asleep behind the wheels. Prevalence of drowsy driving crashes: https://www.nsc.org/road-safety/safety-topics/fatigued-driving

[2]Facial landmarks with dlib, OpenCV and Python: https://www.pyimagesearch.com/2017/04/03/facial-landmarks-dlib-opencv-python/

[3]Eye blink detection with OpenCV, Python, and dlib: https://www.pyimagesearch.com/2017/04/24/eye-blink-detection-opencv-python-dlib/

[4]Drowsiness Detection with OpenCV: https://www.pyimagesearch.com/2017/05/08/drowsiness-detection-opencv/

[5]Real-Time Eye Blink Detection using Facial Landmarks: http://vision.fe.uni-lj.si/cvww2016/proceedings/papers/05.pdf

现在,每只眼睛都由一组6-(x,y)坐标表示,该坐标从眼睛的左上角开始(就像您在看那个人一样),然后围绕该区域的其余部分顺时针旋转[3]。:

  1. from scipy.spatial import distance as dist

  2. def eye_aspect_ratio(eye):

  3. # Vertical eye landmarks

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

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

  6. # Horizontal eye landmarks

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

  8.  
  9.  
  10. # The EAR Equation

  11. EAR = (A + B) / (2.0 * C)

  12. return EAR

    01.研究目的

    根据国家公路交通安全管理局的数据,每年均涉及疲劳驾驶事故中导致超过1,550人死亡和71,000人受伤,但是实际数字可能要高得多[1]。因此,为了避免这类事故的发生,我们制作了这个系统。它通过检查人的眼睛是否闭合或正在打哈欠来预测眼睛和嘴巴的标志,从而确定一个人是否正处于疲劳驾驶。

    主要内容

    02.主要内容

    该系统的工作可以分为两个部分:

    1. 检测或定位面部。

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

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

     
  13. from scipy.spatial import distance as dist

  14. def eye_aspect_ratio(eye):

  15. # Vertical eye landmarks

  16. A = dist.euclidean(eye[1], eye[5])

  17. B = dist.euclidean(eye[2], eye[4])

  18. # Horizontal eye landmarks

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

  20.  
  21.  
  22. # The EAR Equation

  23. EAR = (A + B) / (2.0 * C)

  24. return EAR

  25.  
  26.  
  27. def mouth_aspect_ratio(mouth):

  28. A = dist.euclidean(mouth[13], mouth[19])

  29. B = dist.euclidean(mouth[14], mouth[18])

  30. C = dist.euclidean(mouth[15], mouth[17])

  31.  
  32.  
  33. MAR = (A + B + C) / 3.0

  34. return MAR

  35. # Grab the indexes of the facial landamarks for the left and right eye respectively

  36. (lstart, lend) = face_utils.FACIAL_LANDMARKS_IDXS["left_eye"]

  37. (rstart, rend) = face_utils.FACIAL_LANDMARKS_IDXS["right_eye"]

  38. (mstart, mend) = face_utils.FACIAL_LANDMARKS_IDXS["mouth"]

  39.  
  40.  
  41. def mouth_aspect_ratio(mouth):

  42. A = dist.euclidean(mouth[13], mouth[19])

  43. B = dist.euclidean(mouth[14], mouth[18])

  44. C = dist.euclidean(mouth[15], mouth[17])

  45.  
  46.  
  47. MAR = (A + B + C) / 3.0

  48. return MAR

现在,既然有了代码,让我们了解一下代码是如何工作的:

dlib库内部的预训练面部界标检测器用于估计映射到面部面部结构的68-(x,y)坐标的位置[2]。这些68-(x,y)坐标表示脸部的重要区域,例如嘴巴,左眉,右眉,左眼,右眼,鼻子和下巴。其中,我们只需要左眼,右眼和嘴巴的(x,y)坐标:

 
  1. # Grab the indexes of the facial landamarks for the left and right eye respectively

  2. (lstart, lend) = face_utils.FACIAL_LANDMARKS_IDXS["left_eye"]

  3. (rstart, rend) = face_utils.FACIAL_LANDMARKS_IDXS["right_eye"]

  4. (mstart, mend) = face_utils.FACIAL_LANDMARKS_IDXS["mouth"]

现在,每只眼睛都由一组6-(x,y)坐标表示,该坐标从眼睛的左上角开始(就像您在看那个人一样),然后围绕该区域的其余部分顺时针旋转[3]。:

左上:当眼睛睁开时,眼睛界标的可视化。右上:闭上眼睛时的眼睛地标。底部:绘制随时间变化的眼睛纵横比。眼睛纵横比的下降表示眨眼[3](Soukupová和Čech的图1)。[4]

基于论文Real-Time Eye Blink Detection using Facial Landmarks[5],我们可以得出一个反映这种关系的方程,称为眼睛纵横比(EAR):

眼睛纵横比(EAR)公式。

使用这个概念,我们计算了嘴长宽比:

用68-(x,y)坐标表示人脸

正如我们看到的,嘴由一组20-(x,y)坐标表示。因此,我们已使用坐标62、64、66和68来计算两者之间的距离,方法与EAR计算相同。

结果

在人员困倦或打哈欠时发出警报

另外,为了保留证据,我们保存了让人昏昏欲睡的框架。

框架存储在单独的文件夹中作为证明

该图显示了EAR和MAR随时间的变化

源代码的GitHub链接可在此处获得:https://github.com/fear-the-lord/Drowsiness-Detection

03.参考文献

[1]Drivers are falling asleep behind the wheels. Prevalence of drowsy driving crashes: https://www.nsc.org/road-safety/safety-topics/fatigued-driving

[2]Facial landmarks with dlib, OpenCV and Python: https://www.pyimagesearch.com/2017/04/03/facial-landmarks-dlib-opencv-python/

[3]Eye blink detection with OpenCV, Python, and dlib: https://www.pyimagesearch.com/2017/04/24/eye-blink-detection-opencv-python-dlib/

[4]Drowsiness Detection with OpenCV: https://www.pyimagesearch.com/2017/05/08/drowsiness-detection-opencv/

[5]Real-Time Eye Blink Detection using Facial Landmarks: http://vision.fe.uni-lj.si/cvww2016/proceedings/papers/05.pdf

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: OpenCV是一种计算机视觉库,用于图像处理和计算机视觉应用的开发。OpenCV的学生网课睡意检测是一种基于OpenCV技术实现的应用。该应用旨在检测学生在进行网络课堂学习时是否存在睡意状况,进而提高其学习效率和注意力。 该应用基于OpenCV的图像处理技术,通过对学生的面部表情和眼睛状态进行分析,来判断学生是否存在睡意。具体地,通过检测学生的眼睛状态(如眨眼频率、睁闭程度等)和面部表情(如嘴部状态、脸部表情等),计算得到一个睡意指数,用来判断学生是否处于睡意状态。当睡意指数达到一定阈值时,系统会自动提醒学生进行休息或调整状态,进而提高学生的学习效率。 该应用具有实时检测的特点,可以随时监测学生的状态,对学生的睡意情况进行及时反馈和调整。同时,该应用具有一定的数据分析和处理能力,可以对学生的睡意状态和学习效果进行数据分析和统计,为教师和学生提供更好的教学和学习支持。 总之,OpenCV的学生网课睡意检测应用是一种基于计算机视觉和数据分析技术的创新应用,可提高学生的学习效率和注意力,为教师和学生提供更好的教学和学习支持。 ### 回答2: OpenCV的学生网课睡意检测是一种应用计算机视觉技术的方法,用于检测学生在观看网课时的睡意水平。该技术基于人脸识别、体态识别等技术,通过分析学生的眼部特征和姿态变化等因素,判断学生是否处于疲劳和睡意状态。 使用OpenCV进行睡意检测有诸多优点,例如它可以应对各种不同人群和环境下的睡意检测,还可以实现自动化处理,节约人力成本。同时,该技术的高准确度和实时响应性,能够及时发现学生的睡意状况,提醒学生及时休息或调整学习姿态,有望改善学生的学习效率和质量。 当然,该技术也存在一些挑战和局限性。例如,它需要足够高质量的视频数据,否则会大大降低准确度;同时还需要考虑用户隐私等伦理问题。此外,技术的精度和响应速度也需要进一步优化,从而更好地满足用户的需求。 综上所述,OpenCV的学生网课睡意检测是一种创新的技术应用,有望在学生网课的学习场景中发挥重要的作用。随着技术的不断进步和应用的深入推广,其发展前景也将越来越广阔。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值