前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于OpenCV的实时睡意检测系统

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

作者头像
小白学视觉
发布于 2022-02-14 02:50:21
发布于 2022-02-14 02:50:21
85400
代码可运行
举报
运行总次数:0
代码可运行

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

01.研究目的

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

主要内容

02.主要内容

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

1. 检测或定位面部。

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 EAR

def 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)坐标:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小白学视觉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何用OpenCV进行人脸疲劳检测--基于米尔瑞芯微RK3576开发板
本文将介绍基于米尔电子MYD-LR3576开发板(米尔基于瑞芯微 RK3576开发板)的人脸疲劳检测方案测试。
用户10591265
2024/12/19
1870
如何用OpenCV进行人脸疲劳检测--基于米尔瑞芯微RK3576开发板
实战 | 用Python和MediaPipe搭建一个嗜睡检测系统 【文末送书】
本文将使用Python和MediaPipe搭建一个嗜睡检测系统 (包含详细步骤 + 源码)。
Color Space
2023/08/18
7550
实战 | 用Python和MediaPipe搭建一个嗜睡检测系统 【文末送书】
教你快速使用OpenCV/Python/dlib进行眨眼检测识别!
摘要: 图像识别的新思路:眼睛纵横比,看看大牛如果用这种思路玩转识别眨眼动作! 今天我们来使用面部标志和OpenCV 检测和计算视频流中的眨眼次数。为了构建我们的眨眼检测器,我们将计算一个称为眼睛纵横比(EAR)的指标,由Soukupová和Čech在其2016年的论文“使用面部标志实时眼睛眨眼检测”中介绍。 今天介绍的这个方法与传统的计算眨眼图像处理方法是不同的,使用眼睛的长宽比是更为简洁的解决方案,它涉及到基于眼睛的面部标志之间的距离比例是一个非常简单的计算。 用OpenCV,Python和dlib
企鹅号小编
2018/02/07
3.6K0
教你快速使用OpenCV/Python/dlib进行眨眼检测识别!
Python开发系统实战项目:人脸识别门禁监控系统
dlib 库需要单独安装,dlib 库目前已经编译好的安装版本只支持 python 3.6 的版本。
荣仔_最靓的仔
2022/01/05
2.5K0
Python开发系统实战项目:人脸识别门禁监控系统
使用Python+OpenCV+dlib为人脸生成口罩
口罩已经被证明是防止COVID-19传播的最好的防御措施之一,然而,这也导致了基于面部特征(包括鼻子、嘴和下巴线)的面部识别算法的失效。
小白学视觉
2021/01/06
2K0
使用Python+OpenCV+dlib为人脸生成口罩
TensorFlow+OpenCV实现睡意检测系统
本文主要介绍如何使用 Python、OpenCV、TensorFlow和Keras实现一个睡意检测系统。(公众号:OpenCV与AI深度学习)
Color Space
2022/09/26
9270
CV学习笔记(二十九):交互式人脸活体检测
人机交互的活体检测方法需要通过对人脸做出实时响应来判断是否为活体,通常采用的方法有脸部姿态和读取指定数字等。
云时之间
2020/08/25
1.6K0
Python实现疲劳驾驶困倦低头检测
部分代码: def get_head_pose(shape): # 头部姿态估计 # (像素坐标集合)填写2D参考点 # 17左眉左上角/21左眉右角/22右眉左上角/26右眉右上角/36左眼左上角/39左眼右上角/42右眼左上角/ # 45右眼右上角/31鼻子左上角/35鼻子右上角/48左上角/54嘴右上角/57嘴中央下角/8下巴角 image_pts = np.float32([shape[17], shape[21], shape[22], shape[26], sh
用户8544541
2022/04/19
6000
动真格!交管部门严查“分心驾驶”背后的技术原理
👆点击“博文视点Broadview”,获取更多书讯 北京市交管局8月3日发布消息,警方今年增加了可拍摄“分心驾驶”违法行为的电子眼。 目前,全市共有1900余处“电子警察”可以对“手持方式接打移动电话、收发信息、观看手机视频、操作手机软件、通过车载电子显示屏观看视频节目以及长时间操作车载电子显示屏导航系统”等分心驾驶交通违法行为进行抓拍记录,并纳入执法系统。 其实,除了“分心驾驶”外,“疲劳驾驶”也是非常危险的一种行为。 提起疲劳驾驶,很多人不以为然,在驾驶机动车过程中困意袭来,总想着“再坚持一会儿就到站
博文视点Broadview
2022/08/26
5280
动真格!交管部门严查“分心驾驶”背后的技术原理
OpenCV实战:人脸关键点检测(FaceMark)
Summary:利用OpenCV中的LBF算法进行人脸关键点检测(Facial Landmark Detection) Author: Amusi Date: 2018-03-20 Note: OpenCV3.4以及上支持Facemark PS:点击“阅读原文”,可以下载所有源码和模型,记得给star哦! 教程目录 测试环境 引言 Facemark API Facemark训练好的模型 利用OpenCV代码进行实时人脸关键点检测 步骤 代码 实验结果 Reference 测试
Amusi
2018/04/12
4.2K1
OpenCV实战:人脸关键点检测(FaceMark)
史上最简单的人脸识别项目登上GitHub趋势榜
face_recognition 宣称是史上最强大,最简单的人脸识别项目。据悉,该项目由软件工程开发师和咨询师 Adam Geitgey 开发,其强大之处在于不仅基于业内领先的 C++ 开源库 dlib 中的深度学习模型,采用的人脸数据集也是由美国麻省大学安姆斯特分校制作的 Labeled Faces in the Wild,它含有从网络收集的 13,000 多张面部图像,准确率高达 99.38%。此外,项目还配备了完整的开发文档和应用案例,特别是兼容树莓派系统。简单之处在于操作者可以直接使用 Python和命令行工具提取、识别、操作人脸。
AI科技大本营
2019/08/15
1.4K0
史上最简单的人脸识别项目登上GitHub趋势榜
基于 OpenCV 和 Dlib 头部姿态评估简单Demo
庐山烟雨浙江潮,未到千般恨不消。到得还来别无事,庐山烟雨浙江潮。 ----《庐山烟雨浙江潮》苏轼
山河已无恙
2023/08/21
7320
基于 OpenCV 和 Dlib 头部姿态评估简单Demo
如何用OpenCV、Python和深度学习实现面部识别?
这篇文章首先将简单介绍下基于深度学习的面部识别的工作原理,以及“深度度量学习”(deep metric learning)的概念。接下来我会帮你安装好面部识别需要的库。最后我们会发现,这个面部识别的实现能够实时运行。
用户1737318
2018/07/23
1.9K0
如何用OpenCV、Python和深度学习实现面部识别?
OpenCV+OpenVINO实现人脸Landmarks实时检测
自从OpenCV3.3版本引入深度神经网络(DNN)模块之后,OpenCV对DNN模块支持最好的表现之一就是开始支持基于深度学习人脸检测,OpenCV本身提供了两个模型分别是基于Caffe与Tensorflow的,Caffe版本的模型是半精度16位的,tensorflow版本的模型是8位量化的。同时OpenCV通过与OpenVINO IE模型集成实现了底层硬件对对象检测、图像分割、图像分类等常见模型加速推理支持。OpenVINO框架本身提供直接快速开发应用原型的模型库,对很多常见视觉任务都可以做到快速演示支持。说起人脸的Lankmarks提取,最早的OpenCV跟DLib支持的方式都是基于AAM算法实现的68个人脸特征点的拟合模型,另外OpenCV中支持landmark的人脸检测会先加载一个很大的模型文件,然后速度感人,觉得还有很大的改进空间。好处是OpenCV自己提供了一个训练工具,可以自己训练模型。常见的MTCNN同时实现了人脸检测跟landmarks检测,但是只支持5点检测。而OpenVINO自带的Landmark检测模型基于自定义的卷积神经网络实现,取35个人脸各部位关键点。
OpenCV学堂
2020/04/14
1.9K0
OpenCV+OpenVINO实现人脸Landmarks实时检测
如何用200行Python代码换张脸
在这篇文章中我将介绍如何写一个简短(200行)的 Python 脚本,来自动地将一幅图片的脸替换为另一幅图片的脸。
IT派
2018/08/10
6900
如何用200行Python代码换张脸
基于OpenCV的实时面部识别
现在,面部识别已成为生活中的一部分。因此,在介绍主题之前我们先看看实时面部识别示例。我们在手机、平板电脑等设备中使用人脸信息进行解锁的时候,这时就要求获取我们的实时面部图像,并将其储存在数据库中以进一步表明我们的身份。
小白学视觉
2022/04/06
8490
基于OpenCV的实时面部识别
使用卷积神经网络预防疲劳驾驶事故
美国国家公路交通安全管理局估计,每年有 91,000 起车祸涉及疲劳驾驶的司机,造成约50,000 人受伤和近 800 人死亡。此外,每 24 名成年司机中就有 1 人报告在过去 30 天内在驾驶时睡着了。研究甚至发现,超过20个小时不睡觉相当于血液酒精浓度为0.08%——美国的法律规定的上限。
小白学视觉
2021/10/14
4840
使用Pytorch和OpenCV实现视频人脸替换
“DeepFaceLab”项目已经发布了很长时间了,作为研究的目的,本文将介绍他的原理,并使用Pytorch和OpenCV创建一个简化版本。
deephub
2023/08/30
6230
使用Pytorch和OpenCV实现视频人脸替换
关于OpenCV for Python入门-dlib实现人脸检测
Dlib 是用编程语言 C ++编写的通用跨平台软件库。它的设计深受来自契约式设计和基于组件的软件工程的思想的影响。因此,首先也是最重要的是一组独立的软件组件。这是一个加速软件许可证下发布的开源软件。
python与大数据分析
2022/05/19
5390
关于OpenCV for Python入门-dlib实现人脸检测
如何用OpenCV在Python中实现人脸检测
https://github.com/maelfabien/Machine_Learning_Tutorials
机器之心
2019/05/30
1.6K0
推荐阅读
相关推荐
如何用OpenCV进行人脸疲劳检测--基于米尔瑞芯微RK3576开发板
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档