道路千万条,安全第一条!疲劳驾驶可谓交通事故几大罪魁祸首之一,根据美国一项研究显示,司机睡眠不足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保障您的驾驶安全的更多相关文章

  1. python 保障系统(一)

    python  保障系统 from django.shortcuts import render,redirect,HttpResponse from app01 import models from ...

  2. 【OpenCV-ANN神经网络自动驾驶】树莓派OpenCV神经网络自动驾驶小车【源码+实物】

    没错!这个是我的毕业设计!!! 整个电子信息学院唯一一个优秀毕业设计 拿到这里炫耀了 实物如下: 电脑端显示效果: 自动驾驶实现过程: 1. 收集图像数据.建立局域网,让主机和Raspberry Pi ...

  3. 自动驾驶缺人才?听听David Silver怎么说!

    如今自动驾驶在全球范围内的发展势头愈发“凶猛”,该领域人才也一度被视为“香饽饽”. 即使在美国,自动驾驶工程师的起薪也已经突破了25万美元,我国‘“开价”之高更是令人咋舌. 人才.人才.还是人才!重要 ...

  4. Google Waymo 2017自动驾驶安全技术报告(一)

    2017年10月Google Waymo向美国交通部提交了一份43页的安全报告,报告中详细说明了Waymo如何装备和训练自动驾驶车辆,从而避免驾驶中的一般和意外情况发生.这份报告对Waymo的自动驾驶 ...

  5. 华为MDC自动驾驶

    华为MDC自动驾驶 智能驾驶汽车中,包含四个核心子系统:传感器.计算平台.执行器与应用算法,华为MDC( Mobile Data Center: 移动数据中心)定位为智能驾驶的计算平台.此平台集成了华 ...

  6. 智能驾驶L2发展策略

    智能驾驶L2发展策略 智能驾驶L2,以们通俗的定义是,以高级辅助驾驶的产品为主的各种巡航产品,包括定速巡航,自适应巡航ACC,预见性巡航,智能巡航等等. 车辆驾驶是集注意力高度集中,手把控方向盘和换挡 ...

  7. NXP开源自动驾驶计算平台Bluebox 打造现实无人汽车

    知名半导体制造商恩智浦NXP已经准备好了自家的自动驾驶计算开源平台Bluebox,将为汽车制造商提供现成的一体化自动 驾驶计算解决方案.专为自动驾驶设备的BlueBox中央计算引擎.不仅能够为无人驾驶 ...

  8. [原]JSBSim 自动驾驶(浅出)

    jsbsim的脚本文件分为几大类: 1.系统脚本: systems  包含通用飞机各部分功能模块组件以及自动飞行控件:Autopilot.xml  和 自动飞行的算法控件:GNCUtilities.x ...

  9. 线控性能比拼,MKZ与CRV作为自动驾驶开发平台的全面测评

    全球自动驾驶创业公司最主流的测试开发用车是林肯MKZ,这是因为其高性能高精度的线控能力表现,易于使用逆向工程实现改装,以及存在成熟的线控改造服务提供商AS和Dataspeed,共同为自动驾驶初创及辅助 ...

随机推荐

  1. Cisco 模拟配置

    本次模拟:采用Cisco Packet Tracer 软件,进行cisco网络设备的模拟.可以实现CLI界面命令配置,同实际交换机一样. 1.同一VLAN 可以互相访问,不同VLAN 不能访问 PC0 ...

  2. Servlet(二)----注解配置

    ##  Servlet3.0 *  好处: *  支持注解配置.可以不需要web.xml了. *  步骤: 1.创建JavaEE项目,选择Servlet的版本3.0以上,可以不创建web.xml 2. ...

  3. 手把手教你学Git

    Git 使用手册独家实战 0.查看本机公钥 步骤: 1.进入.ssh目录 cd ~/.ssh 2.找到id_rsa.pub文件 ls / ll 3.查看文件 cat id_rsa.pub JackFe ...

  4. Electron 踩坑记录- require is not defined

    从 github 上拉取 electron-sample-apps 后,运行 electron printing, 出现如下报错信息 解决方案 在 main.js 中增加 nodeIntegratio ...

  5. Python第二章-变量和数据类型

    变量和数据类型 一.什么是变量,常量 思考:程序执行指的是什么? 对数据进行存储处理和计算,最终获得结果,这是程序执行的本质. 变量的概念和在数学中的变量的概念一样的,只是在计算机程序中,变量不仅可以 ...

  6. Java GC(垃圾回收)机制知识总结

    目录 Java GC系列 Java关键术语 Java HotSpot 虚拟机 JVM体系结构 Java堆内存 启动Java垃圾回收 Java垃圾回收过程 垃圾回收中实例的终结 对象什么时候符合垃圾回收 ...

  7. Convert JS object to JSON string

    Modern browsers (IE8, FF3, Chrome etc.) have native JSON support built in (Same API as with JSON2). ...

  8. .Net Core2.2 使用 AutoMapper进行实体转换

    一.遇到的问题 在. Core Api 的编写中,我们经常会对一些功能点进行新增编辑操作,同时我们有时也会进行查询,但是我们查询的表的数据与我们返回的数据相差甚大,这是我们有需要自己手动进行类型的转换 ...

  9. API开放平台接口设计-------令牌方式

    1.需求:现在A公司与B公司进行合作,B公司需要调用A公司开放的外网接口获取数据,如何保证外网开放接口的安全性? 2,使用令牌方式 比如支付宝对外提供支付的接口,爱乐生公司需要调用支付宝的接口.在爱乐 ...

  10. 实战级Stand-Alone Self-Attention in CV,快加入到你的trick包吧 | NeurIPS 2019

    论文提出stand-alone self-attention layer,并且构建了full attention model,验证了content-based的相互关系能够作为视觉模型特征提取的主要基 ...