道路千万条,安全第一条!疲劳驾驶可谓交通事故几大罪魁祸首之一,根据美国一项研究显示,司机睡眠不足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. cmdb autoserver端表数据分析

    目录: 1.后台目录规划 autoserver: api: 接收数据并进行二次分析入库 API验证 backend : 负责后台管理 repository:负责管理模型类 (数据表) autoserv ...

  2. 安装RationalRose的问题解决

    列出大问题:在这一步无法进行下一步,直接就只能退出. 翻译过来的意思是:IBM安装程序被完全下载之前就终止了,大概是这个意思. 然后我就直接进了IBM的官网看了一下产品支持,上面解释说是组件clear ...

  3. Spring----注释----开启Annotation <context:annotation-config> 和 <context:component-scan>诠释及区别

    来源:http://www.cnblogs.com/leiOOlei/p/3713989.html <context:annotation-config> 和 <context:co ...

  4. ios shell打包脚本 xcodebuild

    #! /bin/bash project_path=$() project_config=Release output_path=~/Desktop build_scheme=YKTicketsApp ...

  5. 一文摸透从输入URL到页面渲染的过程

    一文摸透从输入URL到页面渲染的过程 从输入URL到页面渲染需要Chrome浏览器的多个进程配合,所以我们先来谈谈现阶段Chrome浏览器的多进程架构. 一.Chrome架构 目前Chrome采用的是 ...

  6. Android学习----自定义Adapter实现ListView

    前言: 对于ListView而言,自定义的Adapter对于显示复杂的界面有很大的灵活性 .使用自定义的Adapter需要继承BaseAdapter,然后重写getCount(),getView(), ...

  7. nginx 安装教程

    Nginx 安装教程 本教程在CentOS6.7中安装nginx 1.8.0,Nginx中加入了taobao的concat模块,nginx-upload-module模块,pcre 以及nginx-u ...

  8. FCOS : 找到诀窍了,anchor-free的one-stage目标检测算法也可以很准 | ICCV 2019

    论文提出anchor-free和proposal-free的one-stage的目标检测算法FCOS,不再需要anchor相关的的超参数,在目前流行的逐像素(per-pixel)预测方法上进行目标检测 ...

  9. STM32F103ZET6时钟

    1.STM32F103ZET6时钟说明 STM32F103ZET6的时钟树图如下所示: STM32F103ZET6有很多个时钟源,分别有: HSE:高速外部时钟信号. HSI:高速内部部时钟信号. L ...

  10. Visual Studio Code 1.44 解决中文代码显示乱码问题(小白图文教程)

    现今主流的计算机中文字符编码方案是:GBK和UTF-8. 不同编码方案使用不同的字符集,GBK字符集在中文字符长度和字符数量上存在绝对优势,但对国外字符并不支持.所以,完全面向国内的程序/网页使用的是 ...