疲劳驾驶打瞌睡?python保障您的驾驶安全
道路千万条,安全第一条!疲劳驾驶可谓交通事故几大罪魁祸首之一,根据美国一项研究显示,司机睡眠不足4小时,交通事故肇事几率等同于醉驾。
为了减少疲劳驾驶现象,驾驶员疲劳检测应运而生。这是一项安全技术,可以预防驾驶员在驾驶过程中因疲劳而导致的安全事故。
该Python中级项目的目的是建立一个驾驶员疲劳检测系统,用于检测人眼闭合时长。当检测到驾驶员疲劳驾驶时,该系统将发出警告。
驾驶员疲劳检测系统
本Python项目将使用OpenCV收集来自网络摄像头的图像,将其输入到“深度学习”模型中,由该模型对人眼按“睁开”或“闭合”进行分类。该Python项目将采取的方法如下:
第1步-从相机中获取图像作为输入。
第2步-检测图像中的脸部并创建一个感兴趣区(ROI)。
第3步-从ROI中检测人眼并将其输入分类器。
第4步-分类器将按睁开或闭合对人眼进行分类。
第5步-计算分数判断驾驶员是否处于疲劳状态。
在学习先决条件、数据集和模型结构前,如果您是新手,建议您参考Python MasterSheet先了解Python编程语言所需的一切概念。
先决条件
该Python项目需要一个网络摄像头,用于捕获图像。您需要在系统上安装Python(建议使用3.6版),然后使用pip安装所需的软件包。
· OpenCV – 使用pip安装opencv-python(面部和眼部检测)。
· TensorFlow – 使用pip安装tensorflow(keras使用TensorFlow作为后端)。
· Keras – 使用pip安装keras(建立分类模型)。
· Pygame – 使用pip安装pygame(播放警告提示音)。
数据集
需要创建用于此模型的数据集。为创建数据集,我们编写了一个脚本来捕获摄像机中的人眼图像并将其存储在本地磁盘中,将人眼图像分为“睁开”或“闭合”状态两类,通过删除构建模型不需要的图像来手动清理数据。
数据包括大约7000张在不同光照条件下的人眼图像。在数据集上训练模型后,我们附加了最终权重和模型结构文件“models /cnnCat2.h5”。现在,你可以使用此模型按人眼睁开还是闭合对图像进行分类。
模型结构
我们使用的模型是Keras通过卷积神经网络(CNN)构建的。卷积神经网络是一种特殊类型的深度神经网络,在图像分类方面表现非常出色。
CNN基本上由一个输入层、一个输出层和一个可以包含多个层的隐藏层组成。通过过滤器在这些层上执行卷积运算,该滤波器在层和过滤器上执行2D矩阵乘法。
CNN模型结构包括以下几层:
· 卷积层;32个节点,内核大小为3
· 卷积层;32个节点,内核大小为3
· 卷积层;64个节点,内核大小为3
· 完全连接层;128个节点
最后一层也是具有2个节点的完全连接层。在所有层中,除了使用Softmax的输出层外,均使用Relu激活函数。
Python项目进行驾驶员疲劳检测的步骤
从zip下载python项目源代码并提取系统中的文件:Python项目Zip文件。
zip的目录为:
1.“haar级联文件/ cascade files”文件夹包含从图像中检测对象所需的xml文件。在本案例中,需要检测人脸和人眼。
2.模型文件夹包含我们的模型文件“cnnCat2.h5”,该文件是在卷积神经网络上进行训练的。
3.我们有一段音频“alarm.wav”,用于在驾驶员昏昏欲睡时播放。
4.“Model.py”文件包含一个程序,通过该程序对数据集进行训练来构建分类模型。您可以从此文件中了解卷积神经网络的执行情况。
5.“Drowsinessdetection.py”是本项目的主要文件。开始检测时,我们必须要运行此文件。
接下来。让我们逐步了解该算法是怎么工作的。
第1步-从相机中获取图像作为输入
使用网络摄像头获取图像作为输入。为了访问网络摄像头,我们进行了无限循环以捕获每一帧。我们使用OpenCV提供的方法cv2.VideoCapture(0)来访问摄像机并设置捕获对象(cap)。cap.read()将读取每一帧,并将图像存储在帧变量中。
第2步-检测图像中的脸部并创建一个感兴趣区(ROI)
为了检测图像中的人脸,首先需要将图像模式转换为灰度,因为用于对象检测的OpenCV算法需要输入灰度图像。因此无需颜色信息即可检测物体。
我们将使用haar级联分类器来检测人脸。通过face =cv2.CascadeClassifier( 抵达haar级联xml文件的路径 )设置分类器,然后使用faces =face.detectMultiScale(gray)执行检测。进而产生带有x、y坐标以及高度(对象边界框的宽度)的检测数组。现在我们可以迭代这些脸并为每张人脸绘制边界框。
for (x,y,w,h)in faces:cv2.rectangle(frame,(x,y), (x+w, y+h), (100,100,100), 1 )
第3步-从ROI中检测人眼并将其输入分类器
检测人脸的过程也同样适用于检测人眼。
首先,我们分别在leye和reye中为眼睛设置级联分类器,然后使用left_eye =leye.detectMultiScale(gray)来检测人眼。现在,我们只需要从完整图像中提取出人眼数据即可。这可以通过提取眼睛的边界框来实现,然后可以使用此代码从帧中提取眼睛图像。
l_eye =frame[ y : y+h, x : x+w ]
l_eye仅包含左眼的图像数据。这将被输入到CNN分类器中,该分类器将预测眼睛是处于睁开还是闭合状态。同样,我们将右眼的数据提取到r_eye中。
第4步-分类器将按睁开或闭合对眼睛进行分类。
使用CNN分类器预测眼睛状态。因为模型需要从正确的维度开始,因此将图像输入模型之前需要执行一些操作。
首先,使用r_eye = cv2.cvtColor(r_eye,cv2.COLOR_BGR2GRAY)将彩色图像转换为灰度图像。
然后,由于模型是在24 * 24像素的图像上测试,需要将图像也调整为24 * 24像素:cv2.resize(r_eye,(24,24))。我们将数据标准化以实现更好的收敛性:r_eye = r_eye/ 255(所有值都在0-1之间)。扩展维度以输入到分类器中。使用model = load_model(‘models / cnnCat2.h5’)来加载模型。
现在我们用模型预测每只眼睛的状态:lpred =model.predict_classes(l_eye)。如果lpred [0]= 1,则说明眼睛是睁开的;如果lpred [0]= 0,则说明眼睛是闭合的。
第5步-计算分数判断驾驶员是否处于疲劳状态
分数基本上是一个值,用于确定驾驶员闭眼的时长。因此,如果双眼都闭合,得分将不断增加,而双眼睁开时,得分将降低。使用cv2.putText()函数在屏幕上绘制结果,该函数将显示驾驶员的实时状态。
cv2.putText(frame,“Open”, (10, height-20), font, 1, (255,255,255), 1, cv2.LINE_AA )
阈值由以下方法确定:例如,如果得分大于15意味着该驾驶员闭眼时间较长,则阈值为15。此时,我们将使用sound.play()发出警报。
主要文件的源代码如下:
Python项目示例
开始项目,查看项目运作情况。要启动该项目,需要打开命令提示符,转到主文件“ drowsinessdetection.py”所在的目录。使用如下命令运行脚本。
python“drowsiness detection.py”
可能需要几秒钟来打开网络摄像头并开始检测。
示例截图:
输出截图:
1.闭眼检测
2. 睁眼检测
3. 疲劳警告
此Python项目构建了一个驾驶员疲劳警报系统,你可以通过多种方式实施该系统。我们通过Haar级联分类器,使用OpenCV检测人脸和人眼,然后根据CNN模型预测状态。
规范驾驶哪家强?Python安全员帮你忙。为了自己和他人的生命安全,请不要疲劳驾驶!
如果你处于想学Python或者正在学习Python,Python的教程不少了吧,但是是最新的吗?说不定你学了可能是两年前人家就学过的内容,在这小编分享一波2020最新的Python教程。获取方式,私信小编 “ 资料 ”,即可免费获取哦!
疲劳驾驶打瞌睡?python保障您的驾驶安全的更多相关文章
- python 保障系统(一)
python 保障系统 from django.shortcuts import render,redirect,HttpResponse from app01 import models from ...
- 【OpenCV-ANN神经网络自动驾驶】树莓派OpenCV神经网络自动驾驶小车【源码+实物】
没错!这个是我的毕业设计!!! 整个电子信息学院唯一一个优秀毕业设计 拿到这里炫耀了 实物如下: 电脑端显示效果: 自动驾驶实现过程: 1. 收集图像数据.建立局域网,让主机和Raspberry Pi ...
- 自动驾驶缺人才?听听David Silver怎么说!
如今自动驾驶在全球范围内的发展势头愈发“凶猛”,该领域人才也一度被视为“香饽饽”. 即使在美国,自动驾驶工程师的起薪也已经突破了25万美元,我国‘“开价”之高更是令人咋舌. 人才.人才.还是人才!重要 ...
- Google Waymo 2017自动驾驶安全技术报告(一)
2017年10月Google Waymo向美国交通部提交了一份43页的安全报告,报告中详细说明了Waymo如何装备和训练自动驾驶车辆,从而避免驾驶中的一般和意外情况发生.这份报告对Waymo的自动驾驶 ...
- 华为MDC自动驾驶
华为MDC自动驾驶 智能驾驶汽车中,包含四个核心子系统:传感器.计算平台.执行器与应用算法,华为MDC( Mobile Data Center: 移动数据中心)定位为智能驾驶的计算平台.此平台集成了华 ...
- 智能驾驶L2发展策略
智能驾驶L2发展策略 智能驾驶L2,以们通俗的定义是,以高级辅助驾驶的产品为主的各种巡航产品,包括定速巡航,自适应巡航ACC,预见性巡航,智能巡航等等. 车辆驾驶是集注意力高度集中,手把控方向盘和换挡 ...
- NXP开源自动驾驶计算平台Bluebox 打造现实无人汽车
知名半导体制造商恩智浦NXP已经准备好了自家的自动驾驶计算开源平台Bluebox,将为汽车制造商提供现成的一体化自动 驾驶计算解决方案.专为自动驾驶设备的BlueBox中央计算引擎.不仅能够为无人驾驶 ...
- [原]JSBSim 自动驾驶(浅出)
jsbsim的脚本文件分为几大类: 1.系统脚本: systems 包含通用飞机各部分功能模块组件以及自动飞行控件:Autopilot.xml 和 自动飞行的算法控件:GNCUtilities.x ...
- 线控性能比拼,MKZ与CRV作为自动驾驶开发平台的全面测评
全球自动驾驶创业公司最主流的测试开发用车是林肯MKZ,这是因为其高性能高精度的线控能力表现,易于使用逆向工程实现改装,以及存在成熟的线控改造服务提供商AS和Dataspeed,共同为自动驾驶初创及辅助 ...
随机推荐
- hdu3665Floyd解法
题目链接:http://icpc.njust.edu.cn/Problem/Hdu/3665/ Floyd是经典的dp算法,将迭代过程分成n个阶段,经过n个阶段的迭代所有点对之间的最短路径都可以求出, ...
- div 3 frog jump
There is a frog staying to the left of the string s=s1s2…sn consisting of n characters (to be more p ...
- 拿 C# 搞函数式编程 - 3
前言 今天和某个人聊天聊到了 C# 的 LINQ,发现我认识的 LINQ 似乎和大多数人认识的 LINQ 不太一样,怎么个不一样法呢?其实 LINQ 也可以用来搞函数式编程. 当然,并不是说写几个 l ...
- 洛谷 P3909 异或之积 题解
原题链接 本人看了其它解法,发现本人的解法还是 首创 ! 而且我的解法好像和 \(\times 6\) 没什么关系 -- (如果没 \(\times 6\),我没还不用算逆元) 别人的思路呢,大都是从 ...
- 通过ISAPI http协议控制海康摄像头
一直用海康的SDK进行摄像头控制,但有时候非常不灵活,必须有X86的主机,在嵌入式上面就不行,通过写一个HTTPCLIENT可以通过ISAPI来控制海康的摄像头. 代码如下:git@github.co ...
- JVM tomcat 性能调优
1,新建web 测试项目并且发布到Tomcat,访问路径:http://127.0.0.1:8080/JvmWeb/index @WebServlet("/index") publ ...
- linux进程和线程直接通信方式梳理
对于linux的进程之间.线程直接的通信方式进行梳理,这些都属于基本知识,不过因为知识体系“年久失修”,需要重新总结汇总.
- RabbitMQ集群架构(HA)并结合.NET Core实操
一.前言 已经一年没有更新博客了,由于公司事务比较多,并且楼主我也积极在公司项目中不断实践.net core.DDD以及Abp vnext,也积累了一些吐血经验,目前我在做一家在线教育公司负责智慧校园 ...
- 苦涩的技术我该怎么学?Akka 实战
上次我们在“懵 B”的状态下,聊了聊 Actor 模型的理论知识.稍微再补充两句,如上图所示在 Actor 模型系统中,主要有互不依赖的 Actor 组成(图中圆圈),Actor 之间的通信是通过消息 ...
- 《Three.js 入门指南》3.1.1 - 基本几何形状 -多面体
3.1 基本几何形状 多面体 构造函数 正四面体(TetrahedronGeometry).正八面体(OctahedronGeometry).正二十面体(IcosahedronGeometry)的构造 ...