大家好,在这个博客中,我们将构建一个嗜睡检测应用程序,它将检测视频中的人是否变得昏昏欲睡。

这是一个非常有趣且简单的项目,代码甚至不到 80 行,让我们开始吧

看看最终输出

注意——你不会在这里听到警报声,因为它是 GIF,你可以在博客上查看视频:

https://machinelearningprojects.net/drowsiness-detection/

嗜睡检测代码

from imutils import face_utils
import dlib
import cv2
from pygame import mixerthres = 6
mixer.init()
sound = mixer.Sound('alarm.wav')
dlist = []
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
cap = cv2.VideoCapture(0)def dist(a,b):x1,y1 = ax2,y2 = breturn ((x1-x2)**2 + (y1-y2)**2)**0.5while True:# Getting out image by webcam _, image = cap.read()# Converting the image to gray scalegray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# Get faces into webcam's imagerects = detector(gray, 0)# For each detected face, find the landmark.for (i, rect) in enumerate(rects):# Make the prediction and transfom it to numpy arrayshape = predictor(gray, rect)shape = face_utils.shape_to_np(shape)# Draw on our image, all the finded cordinate points (x,y) for (x, y) in shape:cv2.circle(image, (x, y), 2, (0, 255, 0), -1)le_38 = shape[37]le_39 = shape[38]le_41 = shape[40]le_42 = shape[41]re_44 = shape[43]re_45 = shape[44]re_47 = shape[46]re_48 = shape[47]dlist.append((dist(le_38,le_42)+dist(le_39,le_41)+dist(re_44,re_48)+dist(re_45,re_47))/4<thres)if len(dlist)>10:dlist.pop(0)# Drowsiness detectedif sum(dlist)>=4:try:sound.play()except:passelse:try:sound.stop()except:pass# Show the imagecv2.imshow("Output", image)if cv2.waitKey(5) & 0xFF == 27:break
cv2.destroyAllWindows()
cap.release()
  • 第 1-4 行:导入所需的库。

  • 第 6 行:设置阈值(将在前面的代码中看到)。

  • 第 8-9 行:使用 pygame 模块创建警报声音,以便在应用程序中进一步使用它。

  • 第 11 行:我们将在前面使用的空列表。

  • 第 13 行:使用 dlib 人脸检测器。

  • 第 14 行:使用 dlib 地标检测器检测眼点。

  • 第 16 行:初始化 cap 对象以便稍后使用 Webcam。

  • 第 18-21 行:一个简单的距离函数,用于计算两个坐标之间的距离。

  • 第 25 行:从网络摄像头读取图像。

  • 第 27 行:将它们转换为灰度。

  • 第 30 行:检测人脸。

  • 第 33 行:开始遍历这些面部。

  • 第 35-36 行:获取 68 个面部特征并将它们转换为 NumPy 数组。

  • 第 39–40 行:画出所有的地标。

  • 第 42-50 行:提取所需的眼睛标志。

  • 对于左眼,我们将提取38、39、42 和 41。

  • 对于右眼,我们将提取44、45、48 和 47。

  • 在阅读进一步的步骤之前,请阅读下面的算法。

  • 第 54 行:该行负责保持 dlist=10 的大小。

  • 删除是从前面完成的,添加是在最后完成的。

  • 这就像一个队列系统。

  • 第 57–66 行:当 dlist 中至少有 4 个 True 时播放警报。当它们小于 4 时停止。

  • 第 69 行:显示图像。

  • 第 71–72 行:当用户按下ESC键时停止应用程序。

  • 第 74–75 行:关闭所有 cv2 窗口并释放网络摄像头。

用于检测嗜睡的算法:

  • 求 38-42、39-41、44-48 和 45-47 地标之间的距离,并求这 4 个地标的平均值。

  • 如果这个平均值大于我们最初定义的 thres,则在我们的 dlist 中追加/添加一个 True。

  • 如果我们的 dlist 包含 4 个或更多 Trues,则意味着在连续 4 帧中,检测到睡意,因此播放警报。

  • 我们保留了大于等于4,因为如果我们不这样做,即使我们眨眼,我们的程序也会发出警报,这是误报。

输出:

注意——你不会在这里听到警报声,因为它是 GIF,你可以在博客上查看视频:https://machinelearningprojects.net/drowsiness-detection/

要下载源代码,请访问博客 — https://machinelearningprojects.net/drowsiness-detection/

执行嗜睡检测的其他想法:

  • 第一种方法是我们在上面执行的方法。

  • 第二种方法是在人脸图像上训练神经网络。

  • 第三种方法是在眼睛图像上训练神经网络。

这就是你可以使用 cv2和 dlib 在 python 中执行嗜睡检测的方法。

☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。

扫描二维码添加小编↓

在 Python 中使用 cv2 进行嗜睡检测相关推荐

  1. 实战 | 用Python和MediaPipe搭建一个嗜睡检测系统 (详细步骤 + 源码)

    导读 本文将使用Python和MediaPipe搭建一个嗜睡检测系统 (包含详细步骤 + 源码). 背景介绍 疲劳驾驶的危害不堪设想,据了解,21%的交通事故都因此而生,尤其是高速路上,大多数车辆都是 ...

  2. python中使用cv2.findContours返回值too many values to unpack (expected 2)错误如何解决

    python中使用cv2.findContours返回值too many values to unpack (expected 2)错误如何解决 具体原因: opencv-python 版本还有一定关 ...

  3. opencv检测图片失焦 python_如何在Python中使用OpenCV执行模糊检测

    如何在Python中使用OpenCV执行模糊检测 目标检测 最后更新 2020-10-12 14:23 阅读 154 最后更新 2020-10-12 14:23 阅读 154 目标检测 ##FlyAI ...

  4. 使用OpenCV在Python中进行人脸和眼睛检测

    Modules Used: 使用的模块: python-opencv(cv2) python-opencv(cv2) python-opencv(cv2) Opencv(Open source com ...

  5. python中的cv2模块能否保存图像的地理坐标信息_Python中plt.plot图像保存有白边,CV2.polyline,fillpoly的参数问题,图像保存颜色发生异常...

    Python中,如果你遇到了PIL图像保存有白边,CV2.polyline,fillpoly,参数问题,图像保存颜色发生异常这几个问题,这篇文章就能够解决你的疑惑. 第一个问题,plt图像保存有白边 ...

  6. python中使用cv2遍历图片像素点以及改变像素点的像素值

    python中除了使用PIL库处理图像之外还可以使用CV2 import cv2 import numpy as np fileName = '2.png' print(fileName) img = ...

  7. python中import cv2遇到的错误及安装方法_独家利用OpenCV,Python和Ubidots来构建行人计数器程序(附代码amp;解析)...

    作者:Jose Garcia 翻译:吴振东 校对:张一豪 本文约4000字,建议阅读14分钟. 本文将利用OpenCV,Python和Ubidots来编写一个行人计数器程序,并对代码进行了较为详细的讲 ...

  8. 在Python中使用OpenCV进行直线检测

    1. 引言 在图像处理中,直线检测是一种常见的算法,它通常获取n个边缘点的集合,并找到通过这些边缘点的直线.其中用于直线检测,最为流行的检测器是基于霍夫变换的直线检测技术. 2. 霍夫变换 霍夫变换是 ...

  9. 用python中的cv2库打开摄像头

    前提:确保pycharm中已经导入了cv2库 # -*- coding:utf8 -*-import cv2 as cv cap = cv.VideoCapture(0) # 打开摄像头while ( ...

最新文章

  1. Cocos2d中使用颜色混合:加算,减算
  2. C 盘FAT32变为 RAW 格式
  3. Golang通过syscall调用win32的Api
  4. Qt中QtTableWidget的使用
  5. linux数组随机数,随机数与数组
  6. Java 随心笔记7
  7. 招博士生 | 澳门科技大学人工智能课题组
  8. 收获,不止SQL优化——抓住SQL的本质--第九章
  9. Variant类型转换成CString代码
  10. php require 输出乱码,php输出乱码
  11. Linux下修改时间时区
  12. 你我的父母,都在被互联网“割韭菜”
  13. 如何在 MacBook Pro 上调整显示设置?
  14. Jupyter notebook文件默认存储路径以及更改方法
  15. PMP考试通过率怎么样?
  16. 杭电1001 java_杭电ACM1001
  17. 微信小程序实现tab标签页的切换及动态的选中下划线移动
  18. linux摄像头驱动调试,linux 2.6.21支持vimcro摄像头驱动的调试过程
  19. Logstash配置插件grok详解
  20. 终于有人把元数据讲明白了

热门文章

  1. 《Fundamentals of Computer Grahpics 4ed》虎书第四版翻译——第三章光栅图像
  2. 清华版五年级计算机下册教案,清华大学出版社小学五年级信息技术教案新版
  3. 富兰克林自传-读书记
  4. 基于ENVI软件进行图像归一化操作
  5. 用计算机汇编语言的程序是经过,汇编语言程序
  6. 流水线加法器的实现(verilog)
  7. 使用\begin{aligned} 出现 Environment aligned undefined.解决办法
  8. MT6572平台加入呼吸灯功能——编写linux驱动
  9. L1-040 最佳情侣身高差 (10 分)
  10. CC2540 SimpleBLEPeripheral解析