疲劳驾驶打瞌睡?python保障您驾驶安全x

来源:事业单位 发布时间:2020-08-21 点击:

 疲劳驾驶打瞌睡?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 教程。获取方式,私信小编 “ 资料 ” ,即可免费获取哦!

推荐访问:驾驶 打瞌睡 疲劳
上一篇:省级卫生先进单位申报表
下一篇:商品房栏杆工程施工进度管理和保障措施

Copyright @ 2013 - 2018 优秀啊教育网 All Rights Reserved

优秀啊教育网 版权所有