齐伟 张来刚 刘朝阳

摘 要:本文通过对人脸追踪和疲劳特征分析的研究设计了一个疲劳驾驶预警系统,通过特征人脸识别器来进行驾驶人身份的验证;通过坐标解算来获取驾驶人的头部姿态。电脑端将驾驶人的眨眼频率、PERCLOS值、哈欠频率、困意点头频率和连续驾驶时长通过一定的评判标准形成疲劳驾驶预警信号,并将最终结果通过socket与树莓派端进行数据通信,由树莓派端执行预警操作。

关键词:嵌入式系统 人脸追踪 特征分析 疲劳驾驶预警

1 基础人脸识别及关键算法

1.1 基于特征脸的人脸识别算法

特征人脸识别算法是一种在主成分分析(PCA)中进行人脸辨识的技术。

a.采集驾驶人图像作为训练样本

令驾驶人保持常用的驾驶坐姿,采集期间目视前方,将采集到的图像作为训练样本数据。

b.处理训练数据

假设采集到M张人脸图像信息,把每张图像拉成一列(假设图片像素个数是N),将这些向量放在一个矩阵S中作为训练样本:

将待检测的人脸图像输入后做主成分分析后,求和的欧氏距离得到:

其中Ω表示待检测人脸图像的权重,Ωk表示训练集中某个人脸的权重,当εk小于设定阈值时,则判断待检测人脸与训练样本中第k个人脸是同一人的。

1.2 基于Dlib的人脸特征点提取算法

本设计基于OpenCV-Python中Dlib训练好的人脸68特征点数据库进行人脸眼部、嘴部关键的提取和分析计算。该算法是基于ERT(ensemble of regression trees)级联回归算法,即梯度提高学习的回归树方法。其中人脸检测的方法是对正负样本提取Hog描述因子后,利用支持向量机(SVM)算法进行分类训练,过程与2.1节中Haar级联分类器的训练类似。

检测到人脸后,利用训练好的人脸68特征关键点数据库(shape_predictor_68_face_landmarks.dat)和Python中的dlib.shape_predictor函数对驾驶人的脸部进行特征关键点标记。

从这68个特征关键点中提取出眼部、嘴部特征点的位置坐标,来为接下来EAR(眼部纵横比)和MAR(嘴部纵横比)提供计算数据。

1.3 头部姿态获取算法

首先通过Dlib库得到2D人脸68个特征关键点),再通过3D Morphable Model等模型匹配算法拟合3D人脸特征点。

由世界坐标系0w-XwYwZw到像素坐标系uv的转换公式由得到:

其中相机的内参只由相机本身决定,由张正友标定法等标定出来;相机的外参会随着世界坐标系中物体的位置而变化,当计算出相机畸变后,把3D参考点、2D关键点、相机内参和相机畸变输入到OpenCV的solvePnP函数中求解出旋转矩阵R和平移矩阵T,最后通过欧拉角的计算出头部运动姿态,得到驾驶人的头部pitch(俯仰角)、yaw(偏航角)和roll(翻滚角)。

2 基于人脸特征分析的疲劳驾驶检测方法

2.1 基于眼部特征分析的疲劳检测方法

2.1.1 基于眼部特征分析的疲劳指标

(1)眨眼频率指标

本设计采用EAR(Eye Aspect Ratio,眼睛纵横比)值来作为眨眼频率检测的方法。EAR的表示图片如下,其中P1-P6代表人眼6个特征点在图像中的坐标位置,EAR的本质就是求距离之比。

EAR实时判断眨眼的验证图片:

由图2可以看出用EAR=0.2來检测睁眼、闭眼的实现效果非常好。由文献[11]知,人在清醒的状态下眨眼频率约为10~20次/min,当处于疲劳状态时眨眼的频率将提高约64%,故设置当每分钟眨眼次数大于20时则认为驾驶人处于疲劳驾驶状态。

2.1.2 眼部特征分析检测的实现

a.眨眼频率检测实现

在每次程序循环过程中检测驾驶人的EAR值,如果EAR小于0.2则眨眼计数器blink_counter自加1,若某次循环中检测到EAR大于0.2则清零blink_counter。当连续3次循环中EAR都小于0.2则判断为眨眼一次且清零眨眼计数标志blink_counter。若在每60秒内眨眼次数达到20次及以上则发出相应的疲劳驾驶预警信号。

b.PERCLOS实现

本设计的操作方法为先通过遍历文件夹中采集好的每张驾驶人的图像,计算出每个驾驶人眼睛的闭眼时最小EAR值I1和睁眼时平均EAR值I2,由此得出得出眼睛闭合20%时的EAR值为T1=I1+(I2-I1)*0.2,眼睛闭合80%时的EAR值为T2=I1+(I2-I1)*0.8。如对本人采集的T1=0.151,T2=0.192。

实时采集的EAR计算图像为:

根据PERCLOS的计算公式先初始化计数标志P80_count1和闭眼标志位P80_flag1为零,闭眼标志位P80_flag1=0的作用是控制程序仅在从睁眼到闭眼时刻开启计时。在每次程序循环中检测驾驶人的EAR值,当EAR小于T1、驾驶人目视前方时且P80_flag1为0时,计数标志P80_counter1自加1,否则清空P80_count1。当连续3次检测到EAR2.2 基于嘴部特征分析的疲劳检测方法

2.2.1 基于嘴部特征分析的疲劳指标

嘴部疲劳特征即为在一定时间内打哈欠的次数,其判断依据是根据嘴部特征点的距离运算。与眼部开闭特征EAR类似,嘴部特征点采用MAR(Mouth Aspect Ratio,嘴部纵横比)算法。

MAR判断哈欠的验证图片:

从上图可以看出哈欠检测的实现效果非常好。由于目前没有统一的嘴巴开度阈值检测实验,故根据文献]取MAR的阈值为0.75,当MAR>0.75时即认为打哈欠一次,当每分钟内打哈欠次数达到3次即判断为疲劳驾驶状态。

2.2.2 嘴部特征分析检测的实现

首先初始化哈欠标志位yawn_flag和哈欠计数器yawn_counter为0,当检测到嘴巴张开(MAR>0.75)时,yawn_counter自加1,当连续3次检测到MAR>0.75即认为驾驶人正在张嘴,开始计时并将yawn_counter置1。当检测到驾驶人嘴巴闭合时,若张嘴持续时间大于等于2秒,则认为打了一次哈欠,哈欠次数yawns自加1。每60秒统计一次哈欠次数,当达到规定的3次/min时触发警报。

2.3 基于头部姿态特征分析的疲劳检测方法

2.3.1 基于头部姿态特征分析的疲劳指标

在长时间驾车出现较大的疲劳困意后,驾驶人会出现困意点头的行为。下图为计算出的pitch(俯仰角)、yaw(偏航角)和roll(翻滚角)在头部转动时的变化情况:

根据文献[15]为防止把驾驶人低头看仪表盘、寻物等误认为困意点头,所以设置当pitch低于阈值持续3秒时判定为困意点头一次,每分钟内困意点头次数大于3次则认为驾驶人处于疲劳驾驶状态。

3 总结与展望

本设计用特征人脸识别器进行驾驶人的身份识别,该方法要求必须是驾驶人的正面图像,因此在转头的过程中可能出现误判,且待识别人脸图像的尺寸应该接近训练集的图像尺寸,因此在缩放的过程中可能会丢失一些信息造成误判。用EAR来模拟PERCLOS的P80标准,该方法稍微背离了PERCLOS的眼睑遮住瞳孔面积的定义,可能造成对前人实验复现的准确率下降。针对该问题未来可以采用神经网络等算法进行优化改进,提高鲁棒性和准确率。

参考文献:

[1]国家统计局.2019年国民经济和社会发展统计公报[DB/OL].http://www.stats.gov.cn/tjsj/zxfb/202002/t20200228_1728913.html,2020.2.28.

[2]王畅.驾驶员疲劳行为研究综述[C].中国科学技术协会、中华人民共和国交通运输部、中国工程院:中国公路学会,2019:1039-1044.

[3]张琦. 机动车驾驶人疲劳程度时变特性及规律研究[D].武汉理工大学,2018.

[4]陈军. 车载嵌入式平台疲劳驾驶检测系统研究与设计[D].西南科技大学,2016.

[5]DINGES D F,GRACE R.PERCLOS:A Valid Psycho physiological Measure of Alertness as Assessed by Psychomotor vigilance[R].Washington:Federal Highway Administration,Office of Motor Carriers,1998.

[6]江水郎.基于视觉的驾驶员疲劳检测研究[D].上海交通大学,2008.

[7]郑培,宋正河,周一鸣.基于PERCLOS的机动车驾驶员驾驶疲劳的识别算法[J].中国农业大学学报,2002(02):104-109.

[8]史瑞鹏,钱屹,蒋丹妮.基于卷积神经网络的疲劳驾駛检测方法[J/OL].计算机应用研究:1-7[2020-04-21].

perclos嘴巴_基于人脸追踪和特征分析的疲劳驾驶预警系统设计相关推荐

  1. 一种基于人脸追踪和特征分析的疲劳驾驶预警平台

    目录 整体描述 1. 嵌入式端: 2.程序端: 3. 辅助功能: 4. 项目整体工作流程 5. 不足之处 效果演示 程序源码 算法篇 基于AdaBoost级联分类器的人脸/眼睛位置检测算法 基于特征脸 ...

  2. perclos嘴巴_一种基于视频分析的疲劳状态检测方法及装置与流程

    本发明涉及疲劳检测领域,特别是涉及一种基于视频分析的疲劳状态综合检测方法及装置. 背景技术: 疲劳状态检测技术在交通运输.生产安全.教育培训等许多领域应用广泛.目前,疲劳状态检测的方法一般可分为接触式 ...

  3. perclos嘴巴_汽车疲劳驾驶识别预警系统探秘

    原标题:汽车疲劳驾驶识别预警系统探秘 驾驶疲劳是指驾驶员由于睡眠不足或长时间持续驾驶造成的反应能力下降,这种下降表现在驾驶员困倦.打瞌睡.驾驶操作失误或完全丧失驾驶能力. 驾驶疲劳反映在生理与心理两个 ...

  4. 夜间环境人脸识别_基于人脸识别的夜间疲劳驾驶判断方法与流程

    本发明属于智能识别设有领域,尤其是一种基于人脸识别的夜间疲劳驾驶判断方法. 背景技术: 出租车和网约车在夜间运营极大的方便了人们的出行需求,但是出租车司机为了增加收入常常延长工作时间特别在夜间行驶的时 ...

  5. python疲劳检测代码_【君奉天|开发日记】疲劳驾驶检测

    我之前写的关于DuerOS开发日记: 今天看了2017百度世界大会上李彦宏董事长介绍了百度的疲劳驾驶检测,正好我之前阿德里安·罗斯布鲁克的文章中介绍了利用Facial landmarks + drow ...

  6. OpenVINO™基于人脸landmark检测实现眼睛疲劳/睡意检测

    人脸landmark介绍 人脸landmark在人脸对齐.人脸重建.身份鉴别.人脸编辑与人脸AR等方面都有重要作用,但是什么是人脸landmark,首先看一张图: 上图在检测人脸白色矩形框的基础上,通 ...

  7. OpenVINO基于人脸landmark检测实现眼睛疲劳/睡意检测

    人脸landmark介绍 人脸landmark在人脸对齐.人脸重建.身份鉴别.人脸编辑与人脸AR等方面都有重要作用,但是什么是,首先看一张图: 图1(来自OpenVINO安装包的模型库组件) 上图在检 ...

  8. 微信小程序约课_基于微信小程序的瑜伽馆约课系统设计

    李涛 何绍平 龙建宇 江明 韦美雁 摘要:系统前端采用微信小程序开发工具实现,后台采用thinkPHP5进行搭建,并运用Javascript技术进行研发,系统主要实现了约课管理.课表管理.用户管理.商 ...

  9. ifix从sqlserver里读数据_基于GE Fanuc产品PBS汽车总装生产线监控系统设计

    1 PBS系统的总体概述 1.1现代的汽车生产线中, 经常在涂装和总装之间需要预留一个车辆缓冲区(也就是一个临时的车辆存储区),通过这个缓冲存储区,上层可以通过生产计划任务来实现车辆按计划,按步骤, ...

最新文章

  1. Laravel框架与ThinkPHP一些不同点
  2. chromium 桌面_如何使用Chromium和PyInstaller将Web应用程序转换为桌面应用程序
  3. LeetCode(109):有序链表转换二叉搜索树
  4. Centos7 防火墙操作及端口查询
  5. MySQL--存储引擎篇
  6. Android传感器应用——重力传感器实现滚动的弹球
  7. github的使用 sourceTree
  8. wincc控件包下载_WinCC中使用控件.pdf
  9. 变送器故障码与解决办法剖析汇总
  10. 微信公众号二维码在哪里看?如何查看自己的微信公众号二维码?
  11. 【C语言进阶】预定义详解
  12. 好玩有趣的Workerman小蝌蚪匿名聊天室HTML源码
  13. 近代光学系统设计概论学习笔记-第四章双胶合和双分离消色差物镜
  14. 拿到一份代码如何跑起来
  15. 如何保障微服务架构下的数据一致性
  16. css图片锯齿,CSS 锯齿实现
  17. 高德地图地理编码和逆地理编码,以及逆地理编码的时候如何去掉省、市、镇
  18. 半导体基本知识 PN结的形成及特性
  19. 微信H5、网页、内置Web浏览器 清理缓存,微信浏览器缓存
  20. 计算机实验报告网络应用,《计算机网络应用》实验报告(2016春).doc

热门文章

  1. 笔记本电脑无线网络出现红叉,服务中没有wlan autoconfig
  2. html5中三级下拉菜单实现案例
  3. 查看fna文件Linux,asn,faa,ffn,fna等文件的含义
  4. Array.from(),map()
  5. 如何在Excel/WPS表格中使用拼音公式?
  6. php培训多久能学会,PHP好学吗?多久能学会?
  7. [硬件,CPU篇]英特尔中央处理器详解
  8. MySQL数据库字段类型 text 超长报错问题解决方案
  9. 触控手势怎么设计才好用(二)
  10. 腾讯云最便宜的云服务器多少钱一年