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

小白学视觉

共 3652字,需浏览 8分钟

 ·

2024-06-23 10:05


点击上方小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

该系统可以检测一个人在开车时是否困倦,如果有的话,可以通过使用语音消息实时提醒他。该系统使用网络摄像头和电话摄像头进行实时数据传输。

01.研究目的

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

主要内容

02.主要内容

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

1. 检测或定位面部。

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

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

from scipy.spatial import distance as dist 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 EARdef mouth_aspect_ratio(mouth):   A = dist.euclidean(mouth[13], mouth[19])  B = dist.euclidean(mouth[14], mouth[18])  C = dist.euclidean(mouth[15], mouth[17])  MAR = (A + B + C) / 3.0  return MAR

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

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

# Grab the indexes of the facial landamarks for the left and right eye respectively (lstart, lend) = face_utils.FACIAL_LANDMARKS_IDXS["left_eye"](rstart, rend) = face_utils.FACIAL_LANDMARKS_IDXS["right_eye"](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:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲
小白学视觉公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲
小白学视觉公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群


欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~


浏览 164
1点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
1点赞
评论
收藏
分享

手机扫一扫分享

分享
举报