史上最强副驾驶——开车打瞌睡?Python叫醒你

      最后更新:2020-04-20 12:18:51 手机定位技术交流文章

      全文有3641个单词,预计需要17分钟来学习。

      资料来源:unsplash

      万里路,安全第一!疲劳驾驶是交通事故的主要原因之一。根据美国的一项研究,司机睡眠不足4小时,事故率相当于酒后驾驶。

      为了减少疲劳驾驶现象,驾驶员疲劳检测应运而生。这是一项安全技术,可防止驾驶员在驾驶过程中因疲劳引发安全事故。

      该Python中间项目的目的是建立一个驾驶员疲劳检测系统,用于检测人眼的关闭时间。当检测到驾驶员疲劳驾驶时,系统将发出警告。

      驾驶员疲劳检测系统

      这个Python项目将使用OpenCV从网络摄像头收集图像,并将它们输入到“深度学习”模型中,该模型根据“睁开”或“闭上”对人眼进行分类。Python项目将采用以下方法:

      步骤从相机中获取图像作为输入。

      步骤检测图像中的人脸并创建一个感兴趣的区域。

      步骤从感兴趣区域检测人眼,并将它们输入分类器。

      步骤分类器将通过打开或关闭对人眼进行分类。

      计算分数来判断司机是否处于疲劳状态。

      在学习先决条件、数据集和模型结构之前,如果您是新手,建议您参考Python MasterSheet来理解Python编程语言所需的所有概念。

      先决条件

      Python项目需要网络摄像头来捕捉图像。您需要在您的系统上安装Python(建议使用3.6版),然后使用pip安装所需的软件包。

      OpenCV–使用画中画安装opencv-python(面部和眼部测试)。

      TensorFlow–使用pip安装tensorflow(keras使用TensorFlow(keras后端)。

      Keras–使用pip安装Keras(构建分类模型)。

      Pygame–安装带pip的PYGAME(播放警告音)。

      数据集

      您需要为此模型创建一个数据集。为了创建数据集,我们编写了一个脚本来捕获摄像机中的人眼图像,并将其存储在本地磁盘中。人眼图像被分为“打开”或“关闭”状态,并且通过删除构建模型不需要的图像来手动清除数据。

      这些数据包括不同光照条件下的大约7000幅人眼图像。在数据集上训练模型后,我们附加了最终权重和模型结构文件“models /cnnCat2.h5”。现在,你可以用这个模型根据眼睛是睁开还是闭上来对图像进行分类。

      资料来源:unsplash

      模型结构

      我们使用的模型是由Keras通过卷积神经网络建立的。卷积神经网络是一种特殊类型的深度神经网络,在图像分类中表现很好。

      有线电视新闻网基本上由一个输入层、一个输出层和一个可以包含多个层的隐藏层组成。卷积运算由滤波器在这些层上执行,该滤波器在层和滤波器上执行2D矩阵乘法。

      有线电视新闻网模型结构包括以下几层:

      回旋层;内核大小为3的32个节点

      回旋层;内核大小为3的32个节点

      回旋层;内核大小为3的64个节点

      完全连接层;128个节点

      最后一层也是具有两个节点的完全连接层。除了使用Softmax的输出层之外,所有层都使用Relu激活功能。

      Python项目中驾驶员疲劳检测的步骤

      从zip下载python项目源代码,并提取系统中的文件:Python项目Zip文件。

      邮政编码的目录是:

      1.“哈尔级联文件/级联文件”文件夹包含从图像中检测对象所需的xml文件。在这种情况下,需要检测人脸和眼睛。

      2.模型文件夹包含我们的模型文件“cnnCat2.h5”,它是在卷积神经网络上训练的。

      3.我们有一个音频“闹钟”,当司机困倦时播放。

      4.“模型。py”文件包含一个程序,通过该程序训练数据集来建立分类模型。你可以从这个文件中了解卷积神经网络的实现。

      “睡意检测. py”是本项目的主要文件。我们必须在开始测试时运行这个文件。

      资料来源:unsplash

      下一个。让我们逐渐理解算法是如何工作的。

      步骤从相机获取图像作为输入

      使用网络摄像头捕获的图像作为输入。为了访问网络摄像头,我们做了一个无限循环来捕捉每一帧。我们使用cv2方法。OpenCV提供的视频捕捉(0),用于访问摄像机并设置捕捉对象(cap)。Cap.read()读取每一帧并将图像存储在帧变量中。

      步骤检测图像中的人脸并创建感兴趣的区域

      为了检测图像中的人脸,首先需要将图像模式转换成灰度,因为用于物体检测的OpenCV算法需要输入灰度图像。因此,可以在没有颜色信息的情况下检测物体。

      我们将使用哈尔级联分类器来检测人脸。通过face =cv2设置分类器。卡斯卡德分类器(“哈尔级联xml文件的路径”),然后使用face = face执行检测。检测多尺度(灰色)。然后生成具有x、y坐标和高度(对象边界框的宽度)的检测阵列。现在我们可以迭代这些面,并为每个面绘制边界框。

      对于面中的(x,y,w,h):cv2 .矩形(框架,(x,y),(x+w,y+h),(100,100,100),1)

      步骤从感兴趣区域检测人眼,并将它们输入分类器

      人脸检测过程也适用于人眼。

      首先,我们分别为乐叶和雷伊的眼睛建立级联分类器,然后使用左眼=乐业县。检测多尺度(灰色)来检测人眼。目前,我们只需要从完整的图像中提取人眼数据。这可以通过提取眼睛的边界框来实现,然后可以使用该代码从帧中提取眼睛图像。

      l _ eye =框架

      资料来源:unsplash

      步骤分类器将通过打开或关闭来分类眼睛。

      利用CNN分类器预测眼睛状态。因为模型需要从正确的维度开始,所以在将图像输入到模型之前需要执行一些操作。

      首先,使用r_eye = cv2.cvtColor(r_eye,cv2)将彩色图像转换成灰度图像。颜色_ BGR 2灰色)。

      然后,由于模型是在24 * 24像素的图像上测试的,因此有必要将图像调整到24 * 24像素:

      cv2.resize(r_eye,(24,24)).我们将数据标准化以获得更好的收敛性:r_eye = r_eye/ 255(所有值都在0-1之间)。扩展维度以进入分类器。使用模型=负载模型(“模型/CNNCAT 2”。H5)加载模型。

      现在我们用这个模型来预测每只眼睛的状态:lpred = model。预测类。如果lpred

      资料来源:unsplash

      主文件的源代码如下:

      import cv2 import OS from keras . models import load _ model import numpy asnp from pygamimport mixer import time mixer . init()sound = mixer。声音(‘alarm . wav’)面=cv2。级联分类器(乐叶=cv2)。卡斯卡德分类器(' Haar cascade fileshaarcascade _ left eye _ 2 splits . XML ')reye = cv2。卡斯卡德分类器(' Haar cascade files haarcascade _ right ye _ 2 splits . XML ')LBL =

      Python项目示例

      启动项目并检查项目的运行情况。要启动该项目,您需要打开一个命令提示符,并转到主文件“drowsinessdetection.py”所在的目录。使用以下命令运行脚本。

      python“睡意检测. py”

      打开网络摄像头并开始检测可能需要几秒钟。

      截图示例:

      输出截图:

      1.闭上眼睛去发现

      2.睁眼测试

      3.疲劳警告

      这个Python项目已经构建了一个驾驶员疲劳警告系统,您可以通过多种方式实现它。通过哈尔级联分类器,利用OpenCV检测人脸和眼睛,然后根据CNN模型预测状态。

      哪个是最好的司机?蟒蛇安全官会帮你的。为了你自己和他人的安全,请不要开车太累!

      评论、表扬和关注

      让我们分享人工智能学习和发展的干货。

      如果重印,请在后台留言并遵守重印规则。

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/4846.html

          热门文章

          文章分类