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. # The EAR Equation

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

  10. return EAR

    01.研究目的

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

    主要内容

    02.主要内容

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

    1. 检测或定位面部。

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

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

     
  11. from scipy.spatial import distance as dist

  12. def eye_aspect_ratio(eye):

  13. # Vertical eye landmarks

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

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

  16. # Horizontal eye landmarks

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

  18. # The EAR Equation

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

  20. return EAR

  21. def mouth_aspect_ratio(mouth):

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

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

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

  25. MAR = (A + B + C) / 3.0

  26. return MAR

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

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

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

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

  31. def mouth_aspect_ratio(mouth):

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

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

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

  35. MAR = (A + B + C) / 3.0

  36. 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

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

  1. dlib疲劳检测_基于OpenCV的实时睡意检测系统

    该系统可以检测一个人在开车时是否困倦,如果有的话,可以通过使用语音消息实时提醒他.该系统使用网络摄像头和电话摄像头进行实时数据传输. 研究目的 根据国家公路交通安全管理局的数据,每年均涉及疲劳驾驶事故 ...

  2. 基于人脸关键点的疲劳检测

    闲暇之余做了一个简单的疲劳检测系统. 方案:首先获取重要的关键点位,需要眼部的和嘴部的. 对于眼部的如下: 分别采用眼部6个点位计算纵横比,超过连续三帧小于0.2判断为疲劳.分别采用眼部6个点位计算纵 ...

  3. 基于OpenCV的实时睡意检测系统

    该系统可以检测一个人在开车时是否困倦,如果有的话,可以通过使用语音消息实时提醒他.该系统使用网络摄像头和电话摄像头进行实时数据传输. 01.研究目的 根据国家公路交通安全管理局的数据,每年均涉及疲劳驾 ...

  4. 基于人脸关键点检测的驾驶员睡意检测系统

    摘要 驾驶员注意力不集中或者分心是道路交通事故的主要原因. 为了减少道路交通事故,设计开发驾驶员疲劳检测系统至关重要. 本研究利用人脸关键点检测方法提出了驾驶员睡意检测系统,目的是使驾驶更安全. 一. ...

  5. CVPR 2017:Interspeices Knowledge Transfer for Facial KeyPoint Detection(跨物种脸部关键点检测知识迁移)

    CVPR 2017: Interspeices Knowledge Transfer for Facial KeyPoint Detection(跨物种脸部关键点检测知识迁移) 一.介绍 本文主要涉及 ...

  6. matlab基于ssd的角点匹配_基于关键点的目标检测

    0 1 前言:基于锚点的目标检测方法 在基于关键点(key points)的目标检测方法出现之前,主流目标检测方法一般先设置一些预先定义好的 锚点 (anchor boxes). 作为预测物体框的参考 ...

  7. 基于深度学习的人脸检测和关键点检测推理实践(OpenCV实现,含代码)

    目录 一.任务概述 二.环境准备 三.实现步骤 3.1 Python推理 3.2 C++推理 3.2.1 环境准备 3.2.2 推理 3.3 Java推理 一.任务概述 最近项目中大量场景需要用到人脸 ...

  8. 辅助驾驶技术——基于mediapipe的驾驶人睡意检测

    什么是MediaPipe MediaPipe 是一款由 Google Research 开发并开源的多媒体机器学习模型应用框架.在谷歌,一系列重要产品,如 .Google Lens.ARCore.Go ...

  9. Python基于OpenCV的实时疲劳检测[源码&演示视频&部署教程]

    1.图片演示 2.视频演示 [项目分享]Python基于OpenCV的实时疲劳检测[源码&演示视频&部署教程]_哔哩哔哩_bilibili 3.检测方法 1)方法 与用于计算眨眼的传统 ...

最新文章

  1. 「行业趋势」人工智能凭什么“教育”人
  2. Linux下查找文件方法
  3. AI 学习之路——轻松初探 Python 篇(一)
  4. 【转】 Android新特性介绍,ConstraintLayout完全解析
  5. unix文件权限判断
  6. 第7章:MapReduce编程
  7. OCR的备份与恢复方法
  8. 洛谷2055 [ZJOI2009]假期的宿舍
  9. mysql数据库高级查询笔记_MySQL数据库基础——高级查询
  10. 腾讯公司被法院强制执行25元,刚好是QQ超级会员的价格
  11. 苹果被咬一大口!高通获得45亿美元和解金 下一个目标是华为?
  12. VMware-vRealize-Log-Insight-8.2.0.0安装部署指南
  13. VCSA 6.X(VMware vCenter Server Appliance)空间不足问题处理
  14. 国密算法-商密认证-硬件加密-同方TF32A09-32位高速加密芯片
  15. 什么是qq文件服务器,qq 收到的文件 - 卡饭网
  16. php 单词替换,单词替换 - Shiyin's note
  17. 对于给定的一个百分比制成绩,输出相应的五分制成绩
  18. 【MySQL】存储过程与存储函数
  19. python中gbk是什么意思_用gbk比utf-8的好处是什么?
  20. 【Linux】IFS是个什么鬼

热门文章

  1. 标签权重在个性化搜索排序中的最佳实践
  2. 产品介绍公司宣传PPT模板
  3. 临沭县蛟龙镇初级中学八年级二班吴忠军的世界大学城云空间主页
  4. 游戏行业术语一览(1)--游戏分类
  5. garch模型python步骤_Python中GARCH的预测
  6. 开动漫咖啡店需要准备什么?
  7. 下载电子版数学(1-6年级上册)的python代码
  8. 有趣的超短python代码_请不要为了炫耀而写出超短代码
  9. Ceph文件存储-挂载文件系统
  10. 随便画一个百分比堆积柱状图