开始前,您将了解如何使用称为haar cascades的特征映射器检测人眼的眨眼。在项目中,我们将使用 Python 语言和 OpenCV 库分别进行算法执行和图像处理。我们将在项目中使用的 haar 级联经过预训练并与 OpenCV 库一起存储为 haarcascade_frontalface_default.xml 和 haarcascade_eye_tree_eyeglasses.xml 文件。该项目开发了对系统的基本了解,例如驾驶员睡意检测、眨眼锁定、眼睛检测、面部检测以及使用 OpenCV 库的 haar 级联使用。
关于 Haar Cascades:
Haar 基于特征的级联分类器是 Paul Viola 和 Michael Jones 在其 2001 年的论文“Rapid Object Detection using a Boosted Cascade of Simple Features”中提出的一种有效的对象检测方法。它是一种基于机器学习的方法,其中级联函数是从很多正面和负面的图像中训练出来的。这里正图像是包含目标对象的样本,负图像是不包含目标对象的样本。训练分类器需要大量的正样本和负样本。


现在,我们使用上图所示的 haar 特征从给定的输入图像中提取特征。它们就像卷积核。每个特征都是通过从黑色矩形下的像素总和中减去白色矩形下的像素总和而获得的单个值。
过度计算:
使用所有可能的分类器大小来计算特征,但是计算特征所需的计算量,一个24×24的窗口会产生超过 160000 个特征。同样对于每个特征计算,还需要像素的总和。为了降低计算成本,haar 级联的创建者引入了积分图像,这意味着无论您的图像多么大,它将给定像素的计算减少为仅涉及四个像素的操作。
虚假的特征
现在计算出来的特征中,大部分特征都是假的和不相关的。现在,应用于图像区域的窗口可能会看到一个不同的区域,该区域看起来与窗口具有相同的特征,但实际上并非如此。因此,需要删除由AdaBoost完成的错误特征,这有助于从 160000 多个特征中选择最佳特征。自适应提升的 Adaboost 缩写形式是一种机器学习算法,用于此唯一任务。
算法 :

1、帧被捕获并转换为灰度。
2、双边过滤用于去除杂质。
3、使用 haarcascade 检测人脸。
4、人脸的 ROI(图像区域)被馈送到算法的眼睛检测部分。
5、检测到眼睛并将结果列表传递给 if-else 构造。
6、如果列表的长度超过两个,则表示眼睛在那里。
7、否则程序被标记为眨眼并重新启动。

代码:
haarcascade_frontalface_default.xml和haarcascade_eye_tree_eyeglasses.xml是与python脚本同目录下的xml文件。
xml脚本获取: https://github.com/opencv/opencv/tree/4.x/data/haarcascades

# 所有的导入都在这里
import numpy as np
import cv2# 从xml文件初始化人脸和眼睛级联分类器
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye_tree_eyeglasses.xml')# 可变存储执行状态
first_read = True# 开始视频捕捉
cap = cv2.VideoCapture(0)
ret,img = cap.read()while(ret):ret,img = cap.read()# 将记录的图像转换为灰度gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 使用过滤器去除杂质gray = cv2.bilateralFilter(gray,5,1,1)# 对输入人眼分类器的图像区域进行人脸检测faces = face_cascade.detectMultiScale(gray, 1.3, 5,minSize=(200,200))if(len(faces)>0):for (x,y,w,h) in faces:img = cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)# Roi_face即人眼分类器输入的人脸roi_face = gray[y:y+h,x:x+w]roi_face_clr = img[y:y+h,x:x+w]eyes = eye_cascade.detectMultiScale(roi_face,1.3,5,minSize=(50,50))#  检查眼睛的长度对象为眼睛if(len(eyes)>=2):# 检查程序是否正在运行检测if(first_read):cv2.putText(img,"Eye detected press s to begin",(70,70), cv2.FONT_HERSHEY_PLAIN, 3,(0,255,0),2)else:cv2.putText(img,"Eyes open!", (70,70),cv2.FONT_HERSHEY_PLAIN, 2,(255,255,255),2)else:if(first_read):# 在开始前确保眼睛是否在cv2.putText(img,"No eyes detected", (70,70),cv2.FONT_HERSHEY_PLAIN, 3,(0,0,255),2)else:# 这将在控制台上打印并重新启动算法print("Blink detected--------------")cv2.waitKey(3000)first_read=Trueelse:cv2.putText(img,"No face detected",(100,100),cv2.FONT_HERSHEY_PLAIN, 3,(0,255,0),2)# 用密钥控制算法cv2.imshow('img',img)a = cv2.waitKey(1)if(a==ord('q')):breakelif(a==ord('s') and first_read):#This will start the detectionfirst_read = Falsecap.release()
cv2.destroyAllWindows()

样本输出:


左边为: 检测到眼孔
右边为: 没有检测到眼睛

Python – 眨眼检测项目相关推荐

  1. GitHub上的“金矿”(236个Python开源项目,涵盖了15个领域)

    人生苦短,越来越多的人,都开始用Python了. 但寻找好的项目资源,费时又费力,成了头号难题. 现在,好消息来了.最近,有人在GitHub上放了一座"金矿". 目前里面有236个 ...

  2. python开源库推荐_推荐5个值得关注的Python开源项目

    原标题:推荐5个值得关注的Python开源项目 今天小编看到了五个开源项目,觉得还错,推荐给大家. 1.Wagtail CMS Wagtail是一个基于Django的CMS系统 它拥有优质的用户体验 ...

  3. python开源项目贡献_通过为开源项目做贡献,我如何找到理想的工作

    python开源项目贡献 by Utsab Saha 由Utsab Saha 通过为开源项目做贡献,我如何找到理想的工作 (How I found my dream job by contributi ...

  4. 9月Python开源项目Top10

    原文链接: 9月Python开源项目Top10 - TinyMind https://www.tinymind.cn/articles/3776 声明:转载的, 就是让自己记住,以后熟练了Python ...

  5. 干货满满的 Python 实战项目,点赞收藏

    作者 | 俊欣 来源 | 关于数据分析与可视化 今天小编来给大家介绍3个干货满满的计算机视觉方向的Python实战项目,主要用到的库有 opencv-python numpy pillow 要是大家所 ...

  6. 近万个Python开源项目中精选Top34!

    作者 | Mybridge 编译 | 仲培艺 出品 | CSDN(ID:CSDNNews) [导语]踏着人工智能.区块链的东风,近年来一路"横冲直撞"的 Python 在实现了从小 ...

  7. 2018年Python开源项目Top100!只在这里!

    整理 | Jane 出品 | Python大本营 2018 年的最后一天,营长为大家新鲜出炉了一份 2018 年 Python 开源项目 Top100 清单!这些项目都是营长每月通过收集 Mybrid ...

  8. 精选180+Python开源项目,随你选!做项目何愁没代码

    编辑 | Jane 出品 | Python大本营 每一位程序员,每天大部分时间都是在和代码打交道.但是对于广大的普通用户来说,最重要的不是代码,而是代码最终生成的应用程序.但是,每个项目都从头开始自己 ...

  9. 最新Python学习项目Top10!

    作者 | Mybridge 译者 | Linstancy 整理 | Jane 出品 | AI科技大本营 [导读]过去一个月里,我们对近1000个Python 学习项目进行了排名,并挑选出热度前10的项 ...

最新文章

  1. SQL Server 数据库清除日志的方法
  2. 两个下拉框相关联ajax,触发第二个下拉框以显示基于从第一个下拉框中选择的值的值ajax...
  3. 第五届全国大学生计算机系统能力培养大赛 | 赠书
  4. 【计算机网络】传输层 : TCP 拥塞控制 ( 慢开始 | 拥塞避免 | 快重传 | 快恢复 )
  5. RT-Thread的I/O设备模块及其驱动实现步骤
  6. CSDN博主排名更新公告
  7. TypeScript的非空断言操作符(感叹号)
  8. Delphi 7皮肤控件VCLSkin 5 60的使用
  9. MySQL优化SQL性能问题
  10. 190727每日一句
  11. 手把手教你用ls-dyna做入水冲击荷载仿真分析(一)大体介绍
  12. 微机原理与接口技术考点一文全(待更)
  13. 用云服务器搭建一个属于自己的网站(手把手教学)
  14. 如何给程序添加管理员权限(以管理员权限运行功能)
  15. 网页资源不知道如何下载,我来教你
  16. McStudio的安装和使用
  17. Coinbase眼中的侧链和layer2解决方案
  18. Honey Badger BFT(异步共识算法)笔记
  19. 嵌入式linux安装dropbear
  20. 【转】详细解析电源滤波电容的选取与计算

热门文章

  1. ubuntu utf-8编码转汉字
  2. CKeditor配置及使用技巧、精简教程(超详细)
  3. php全词查询,PHP制作百度词典查词采集器
  4. Highmaps重庆地图数据JSON格式
  5. 一起talk GDB吧(第七回:GDB监视功能)
  6. mplayer 所支持的音视频编解码;
  7. Maven error: Failed to execute goal on project : Could not resolve dependencies for project 解决办法
  8. ESLint配置方法
  9. QQ网页聊天、加好友
  10. 集五福又开始了,汇总了一下今年集五福的所有方法!还有福字!