赞
踩
使用dlib,OpenCV和Python进行人脸识别—人眼瞌睡识别
前期文章我们分享了如何使用python与dlib来进行人脸识别,以及来进行人脸部分的识别,
如下图,dlib人脸数据把人脸分成了68个数据点,从图片可以看出,人脸识别主要是识别:人眉,人眼,人鼻,人嘴以及人脸下颚边框,每个人脸的部位都有不同的数据标签从1-68
当我们识别出人脸的这68个点,可以通过访问不同的数据点来检测到人脸的部分数据
- · 口可以访问 [48,68] 。
- · 右眉可以访问 [17,22]。
- · 左眉可以访问 [22,27] 。
- · 右眼可以访问 [36,42]。
- · 左眼 可以访问 [42,48]。
- · 鼻可以访问 [27,35]。
- · 下巴边框可以访问 [0,17]
通过访问不同的数据点,来进行人脸上的部位检测,要想对人眼瞌睡检测,首先我们检测到人眼,下图可以看出人眼有6个数据点
通过这6个数据点,可以来定位人眼的6个数据点的坐标,从下图可以看出当人眼睁眼时,人眼上的6个数据点的坐标与人眼闭眼时的数据点坐标不完全一样,通过计算6个数据点的坐标差异,便可以通过距离的计算来判断人眼是否闭眼了,通过设置一个阈值,当人眼闭眼的时间超过阈值时,我们定义为这个人已经瞌睡了,此方案用于高速行驶的司机特别有效,以便检查司机师傅是否瞌睡了,若瞌睡了,可以发生报警等措施来叫醒司机,避免大量的车祸的发生
根据Soukupová和Čech在2016年的论文《 使用面部地标进行实时眼睛眨眼检测》,我们可以得出一个反映这种关系的方程,称为眼睛纵横比(EAR):
当检测到人眼时,通过实时计算人眼的纵横比,当人眼纵横比突然变小时,便可以通过此值来判断人眼闭眼了,通过设置的阈值来判断是否人眼瞌睡了
OK,有了以上的基本知识,就开始代码
导入第三方库(1-9行)
定义一个函数,来计算人眼纵横比
计算两组 垂直 眼界标之间的距离(第13和14行)
计算水平眼界标之间的距离 (15行)
最终利用计算公式计算眼睛纵横比(16行)
定义人眼纵横比阈值(19行,根据自己人眼大小来设置)
定义闭眼检查帧的次数(20行)
加载人脸检测与68点数据模型(26-27行)
获取左右人眼的坐标参数值(30-31)
从摄像头中获取视频帧(34-35行)
从视频中获取图片帧进行人脸数据点检测(37-45行,本段代码是上期文章分享的内容,不再详细注释)
提取人眼坐标,来计算人眼纵横比(55-60行)
可视化人眼(62-65行)
通过计算出的人眼纵横比来跟设置的阈值来进行对比
当计算的人眼纵横比小于阈值时记录一次,当连续超过50次检测到人眼纵横比小于阈值时说明人眼已经瞌睡(60-64行)
在视频上显示人眼的阈值(69-70行)
最后显示在视频中
头条号:人工智能研究所
微@信搜索:启示AI科技,
体验不一样的AI工具
微信搜索小程序:AI人工智能工具
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。