Matlab提取人脸特征参数
疲劳驾驶导致汽车交通事故逐年增加,为了提升驾车的安全性,需对驾驶员疲劳状态实时监测并及时提醒. 为了提高疲劳驾驶判断效率及准确率,本文运用Viola-Jones 框架特征矩阵进行人脸预判断;预判断过程中为了减少Haar 值计算量并提高人脸识别速度,采用Adaboost 算法和级联分析,剔除非人脸的Haar 特征值,实现快速人脸识别;根据色彩空间转化实现眼部分割处理,根据PERCLOS 值评估驾驶员是否处于疲劳状态并提前予以警示;通过MATLAB 仿真软件实现疲劳驾驶检测算法的仿真分析. 在多个样本的测试过程中,该方法有效识别出人脸,并能够准确监测驾驶员的疲劳状态.
- 背景
随着交通工具的飞速发展,交通隐患也成为威胁人类安全的杀手之一,每年全世界至少有50 万人死于交通事故. 欧美各国的研究报告指出,交通事故的起因有接近90% 的因素是人为造成,其中在驾驶过程中由于疲劳引发的交通事故就有10 万多例. 由此得知,驾驶员的疲劳驾驶已经成为道路交通事故的主要原因之一. 因此,对疲劳驾驶实时监测的研究对安全行车以及驾驶员的生命财产安全具有一定的意义.
汽车疲劳驾驶的表现特征有很多方面,较为突出的特征就是驾驶员的面部特征,如嘴部和眼部的开度、头部偏移等直观现象可作为疲劳的判断条件. 利用图像处理手段对图像进行增强处理,消除因周围光线不佳造成的疲劳驾驶特征识别的干扰. 采用AdaBoost 的人脸检测算法对人脸关键部位进行跟踪, 根据人眼变化并结合 PER‐ CLOS 准则进行疲劳判定,仿真结果能准确实现对人脸关键部位的检测. 文献[5]对疲劳驾驶的判断考虑了人脸部位的变化和驾驶状态数据两个因素. 根据Dlib 库的人脸轮廓点提取计算眼部和嘴部开度比值,获取正常及疲劳状态特征,再采用改进后的随机森林模型对疲劳状态进行判断,结果表明疲劳驾驶检测结果准确率达到92.06%. 文献[6]根据驾驶员的眼睛开度以及颅骨位置变化设计了基于驾驶人眼睛开度信息和头部姿态信息的驾驶疲劳检测系统. 采用Camshift 算法对人脸跟踪检测,并用二阶HOG 特征和随机森林回归算法对头部角度实时检测. 其仿真结果表明在各种驾驶姿态下都可以实时快速检测疲劳情况. 有研究指出,人疲劳和正常时其心率数据会存在微小区别,故有部分研究人员以心率区别来判断是否属于疲劳驾驶. 如文献[7]为了解决疲劳驾驶检测系统实用性和准确率低等问题,基于空间聚类心率检测算法实现了疲劳驾驶实时检测系统. 通过手环采集驾驶员心率值,利用该值与疲劳度之间相关程度,经空间聚类算法分析判断驾驶员是否为疲劳状态.
为了简单快速判断出人脸,并进行疲劳驾驶的判断,本文先用Viola-Jones 框架人脸检测算法对人脸进行检测;针对检测速度以及特征Haar 值累加计算量大等问题,采用图像积分、级联分析方法快速对拍摄图像进行人脸筛查,提高人脸判断速度和效率;采用PERCLOS 值判断驾驶员是否属于疲劳状态. 实验结果表明,该检测方法有一定的实用性和有效性.
流程图
- 算法流程原理
1、眼睛部位提取及疲劳判定
在人脸的面部特征中,眼睛、鼻子、嘴巴可以最为直观地体现人在当前情况下大脑的疲劳程度. 在人脸的研究中发现人的肤色呈现出聚类性, 如果将人脸中非特征区域的部分去除,保留眼睛、鼻子、嘴巴等明显特征区域,对人脸疲劳特征识别和提取有很大帮助. 此外,人脸千变万化,在实际应用中整张面部识别存在一些问题,如人脸模板不能通用于任意拍摄图像,即人在驾驶时的姿势、位置的微量变化都会对人脸识别产生影响. 这需要多模板、多尺度、多角度的匹配,很难做到把所有人脸模板都囊括. 因此,需将眼睛和嘴巴单独分割建模,对其开度、张度进行单独匹配且其限值也是随着人脸比例进行动态调节设定.
对于关键部位的提取采用 Matlab 软件自带的级联对象检测器对眼睛位置进行定位.
- 眼睛状态的提取
眼睛疲劳判断是根据人眼开度不同时眼部轮廓会随之变化,故所提取的边缘会稍微不同. 而眼睛边缘检测准确度不高但速度快,考虑到疲劳检测速度及准确度,对于眼睛部位状态的提取采用组合算法,即模板匹配及水平灰度投影算法相结合;用检测器确定眼部位置后,运用模板匹配法对样本进行粗略检测,将样本进行分类,如睁眼、闭眼和可疑闭眼;再通过水平灰度投影法对闭眼和可疑闭眼样本进行判断,进一步确定其状态, 故该组合方法判断眼睛开闭状态的准确度较高.
- 疲劳的判定
在进行眼部分割时,首先提取眼睛特征. 根据卡内基梅隆实验[15],在一定时间内眼睛的内瞳孔占整个眼部比例达到一定数值即为眼睛闭合状态. 在实验中将眼睑遮住瞳孔的面积超过 70%、80%、50% 3 个不同百分比计为眼睛闭合,并分别用P70、P80 及EM 符号来表示. 故在一定时间内,提取眼部参数进行眼部闭合百分比匹配,当达到眼睛闭合程度并满足一定频率时可判断为疲劳驾驶状态, 该频率用PERCLOS 值表示. 相关研究表明,P80 的实验数据对驾驶员疲劳驾驶过程中的描述较为准确, 其 PERCLOS 值与疲劳状态的关联性很强[4]. PERCLOS 值计算如下:
PERCLOS 眼睛闭合帧数 %
= × 100
检测时间段总帧数
- 运行效果示例
测试视频ID | 实际眨眼次数 | 算法检测眨眼次数 | 眼部检测准确度/% | 实际PERCLOS 值 | 算法PERCLOS 值 | 实际疲劳判断 | 算法疲劳判断 |
1 | 152 | 140 | 92.3 | 0.25 | 0.23 | 否 | 否 |
2 | 257 | 236 | 91.8 | 0.42 | 0.39 | 是 | 是 |
3 | 245 | 230 | 94.2 | 0.41 | 0.38 | 是 | 否 |
4 | 231 | 210 | 90.9 | 0.38 | 0.35 | 否 | 否 |
5 | 296 | 281 | 95.1 | 0.49 | 0.46 | 是 | 是 |
6 | 308 | 288 | 93.7 | 0.51 | 0.48 | 是 | 是 |