基于ASM的驾驶员面部疲劳状态识别方法
2018-10-24杨晓龙董莺艳
闫 河,杨晓龙,张 杨,董莺艳,王 鹏
(重庆理工大学 计算机科学与工程学院,重庆 400054)
0 引 言
国内外研究现状显示,驾驶员疲劳[1]检测方法大致分为3类:①基于车辆行驶行为检测,包括方向盘转动幅度检测和车辆偏离车道检测[2]等;②基于驾驶员生理信息检测,包括利用心电图信息检测和脑电图信息检测[3-5];③基于驾驶员面部行为检测[6-9],包括:眨眼频率检测、嘴部状态检测、头部姿态检测等。3类方法中,基于驾驶员面部行为检测实时效果好,准确性高和鲁棒性强,是近些年研究的热点[10]。何俊等[10]和耿磊等[11]对眼睛状态和嘴巴状态的进行检测,这些方法均引入了打哈欠参数,但均没有对打哈欠行为建立有效的模型,会把驾驶员张嘴讲话误判为打哈欠,从而降低了疲劳状态识别的准确性。驾驶员在重度疲劳时,会出现低头行为。针对驾驶员低头行为检测,杨晓峰等[12]通过对驾驶员面部图像进行正负建模分类,然后对驾驶员低头行为进行检测,但实时效果有待考证;程文冬等[13]通过对头部姿态进行建模,该方法准确率高,但计算参数过多,实时效果相对较差。
针对以上问题,本文采用具有194个特征点人脸ASM,结合haar级联得到精确的人脸和眼睛区域;通过光流法实现对人脸及上下眼睑特征点的有效跟踪,准确识别出眼睛的状态;结合眼睛状态识别结果,采用正负图像训练得到的SVM判定驾驶员是否属于重度疲劳情况下的低头行为。实验结果表明,本文方法能有效识别驾驶员面部疲劳状态。
1 人脸ASM及其和人脸匹配
1.1 人脸ASM
在ASM定义中,大多物体的形状都可以由多个特征点组成。这些特征点的数量足够多并且可以准确地描绘出物体的轮廓和内部细节[14]。
实验中共N幅人脸图像,全部按图1进行特征点标定,第i张人脸形状向量为
Xi=(xi1,yi1,…,xij,yij,…,xin,yin)T,i=1,2,…,N
(1)
式中:对应的第i幅人脸图像中第j个特征点的坐标为(xij,yij),n为特征点的数量。同时进行对齐和降维,计算并得到其均值和协方差矩阵
(2)
(3)
图1 194个特征点人脸ASM
则人脸ASM的形状X可表示为
(4)
为防止形状产生畸变,b的取值范围
(5)
其中,λξ为S的特征值,pξ为λξ对应的特征向量,特征矩阵P=(p1,p2,…,pt)。
对人脸进行特征点标定得到人脸ASM,本文采用194个特征点人脸ASM,该ASM是基于Helen数据集中2000多张高分辨率人脸图像训练得到。194个特征点人脸ASM如图1所示。
1.2 ASM和人脸匹配
实验中发现,直接使用ASM进行人脸检测和匹配,准确度较低,实时效果较差。同时文献[1]指出ASM算法对人脸初始搜索位置要求较高,适合的搜索起始位置可以减少算法迭代次数。因此,实验中使用OpenCV中自带的haarcascade相关文件快速进行人脸和眼睛区域检测。检测与定位结果如图2所示。
图2 人脸和眼睛区域检测与定位
确定好初始搜索位置后,精确定位每个特征点的位置然后进行ASM和人脸匹配。局部灰度模型是用来计算每个特征点的局部特征,局部灰度模型直接影响特征点的定位精度。在数据集中,选取第i幅人脸图像,以该幅图像中第j个特征点为中心,在第j个特征点两侧分别选取k个点构成一个长度为2k+1的灰度向量hij
hij=(hij1,hij2,…,hij(2k+1))T
(6)
hij的导数为
(7)
对进行归一化操作
(8)
局部灰度模型以局部灰度平均值和协方差矩阵表示为
(9)
(10)
(11)
选择马氏距离最小值Dξ,min对应的特征点为最佳定位点。全部候选点都为最佳定位点的搜索结果如图3所示。
图3 ASM和人脸匹配
1.3 194个特征点人脸ASM
由于实验需要对整个人脸区域更细节化的呈现,本文采用194个特征点人脸ASM。在BioID数据集中,比较于77个特征点人脸ASM,对这两个ASM采用me17(mean error measured by internal 17 facial points)[15]的方法,得到各自平均差曲线,发现该模型的平均差小于77个人脸特征点ASM,对比发现,使用194个特征点标定人脸具有更好的鲁棒性和适用性。两者平均差曲线如图4所示。同时该ASM特征点数更多,对人脸细节有更好地描述,可以匹配得到更加精确的人脸和眼睛区域,具有很好的适用性和准确性。
图4 77个和194个特征点人脸ASM的me17对比曲线
1.4 人脸和眼睛区域特征点跟踪
在进行上述操作后,需要对人脸和眼睛区域特征点进行跟踪,来判定疲劳状态。因为驾驶员在驾驶汽车的过程中,驾驶员头部运动幅度较小,场景单一,本文使用光流法[16]对这些区域特征点进行跟踪,具体过程如下:使用上述操作进行人脸和ASM最优匹配后,得到人脸轮廓特征点,同时得到眼睛上下眼睑轮廓共40个特征点(每个眼睑轮廓区域20个特征点),使用光流法对这些特征点进行跟踪。
2 驾驶员疲劳状态检测
实验中,对驾驶员进行面部行为监测,为了不影响其正常驾驶,把监控摄像头安装在仪表台的位置,安放位置如图5所示。
图5 摄像头的安放位置
驾驶员在长时间驾驶汽车后,特别是长途客车和长途货车驾驶员,他们更容易疲劳驾驶,会出现不同程度的疲劳状态。文献[17]中把驾驶员的状态分为3种:清醒、疲劳和重度疲劳。3种状态的面部表现如下:清醒状态下,驾驶员注意力集中于正前方,精神状态佳,整个驾驶行为正常;疲劳状态下,眼睛张开度变低,眨眼频率降低,同时可能伴随着打哈欠等行为;重度疲劳状态下,眼睛近乎闭合,频繁点头,甚至可能出现短暂的低头行为。
目前仅依靠眼睛状态来判断是否疲劳存在一定的局限性,大多数都只是检测到疲劳状态,并不能对重度疲劳状态进行判定。本文在基于眼睛状态检测的基础上,加入对头部姿态的检测,通过获取驾驶员眼睛PERCLOS参数以及SVM对头部姿势的判定作为驾驶员疲劳程度的判断标准。
2.1 PERCLOS参数
PERCLOS(percentage of eyelid closure over the pupil over time),即单位时间内眼睛闭合时间所占的百分比,是由卡内基梅隆研究所提出并应用于疲劳检测[10]。研究表明,PERCLOS对驾驶员疲劳状态检测具有很高的准确性[18]。PERCLOS的测量原理如图6所示。
图6 PERCLOS测量原理
PERCLOS有3种标准,其中P80标准(即眼睑遮住瞳孔的面积超过80%就计为眼睛闭合)与疲劳程度相关性最好,适合作为驾驶员疲劳状态检测的标准[17]。眼睛睁开度如图7所示,对应的P80标准,即眼睛睁开度小于20%时计为眼睛闭合。
图7 眼睛睁开度
由图6并参考PERCLOS的定义,可得PERCLOS的值f
(12)
基于PERCLOS-P80标准评价疲劳的方法是:根据眼睛在每一时刻的状态,计算出眼睛处于闭合大于80%状态所占的时间比,最终计算出PERCLOS的值F。设单位时间内所采集的视频有效帧数为N,其中眼睛处于闭合状态大于80%状态的帧数为K,计算出该单位时间内PERCLOS值F,即
(13)
通过F的均值来判断驾驶员是否疲劳。本文使用文献[19]中F值的定义,定义当F小于0.25时驾驶员处于清醒状态,当F大于0.25时驾驶员属于疲劳状态。
2.2 低头行为检测
由于实验中摄像头的位置在头部水平线以下摆放,因此在正常驾驶中,人脸相对于摄像头的视角是仰视状态;如果出现疲劳状态,同时人脸相对于摄像机呈现出平视或俯视的视角,判定此时的状态为重度疲劳状态。
实验中选用SVM判定头部姿态。低头行为检测的人脸图像来自MUCT人脸库,经过选取和比较选取了其中900张人脸图像,其中正性(正常驾驶)图像161张、负性(非正常驾驶)图像739张,正负图像样本如图8所示。
对两组图像进行标注,利用本文ASM精确匹配到人脸位置,截取图像中人脸区域,结合头部行为相关性,不同于直接使用两组图像训练,这样先检测、匹配后截取人脸区域最后再训练会得到识别率更高的SVM。使用训练好的SVM准确对头部姿态进行判定,判定是否低头,结合是否出现疲劳状态,进而判定是否处于重度疲劳状态。
正性图像如下:
负性图像如下:
图8 正负图像样本
3 实验结果及分析
(1)实验环境
实验环境为VS2010+OpenCV2.4.13,Windows7操作系统Intel(R)Xeon(R)CPU E5-2603 v4 @ 2.20 GHz,内存为32 GB,测试视频的帧率为30 fps,分辨率为800*600。
(2)测试数据集
本文选取20位测试者作为测试数据集,其中包括10位男性和10位女性,每位测试者面部分别在不佩戴任何干扰物和佩戴近视镜的情况下进行实时测试。
实验中电脑摄像头的角度、位置、距离和真实驾驶环境保持一致。为了检验本文194个特征点人脸ASM的有效性,对20位测试者进行人脸检测、ASM和人脸匹配,该过程平均耗时约为30 ms,统计结果得出匹配的正确率。统计结果见表1。
表1 准确匹配的统计结果
可以看出该ASM在和人脸匹配的过程中具有较高的准确性和较好实时效果,但佩戴近视镜的匹配正确率低于不佩戴近视镜的情况,原因在于由于镜片反光对匹配过程造成干扰,导致误判。
实验通过该匹配过程,得到更加精确的人脸和眼睛区域,使用光流法对眼睛区域40个特征点进行跟踪,检测得到眼睛Open Rate,清醒状态下眼睛Open Rate如图9所示。
图9 清醒时眼睛Open Rate
实验中模拟驾驶员的疲劳状态,疲劳状态下驾驶员眼睛睁开度变小,此时对应的眼睛Open Rate如图10所示。
这里选取P80作为检测标准和文献[19]中F的定义,当F>0.25时,屏幕上显示eyes closed,同时发出“滴”的警告声,显示结果如图11所示,判定此时驾驶员的状态为疲劳状态。
使用上述过程判定驾驶员状态为疲劳状态,伴随着头部处于低头状态,准确跟踪到头部后,使用本文中训练好的SVM判定头部姿态,此时屏幕上先显示eyes closed后显示head rotated,同时发出“嘟嘟”的警告声,显示结果如图12所示,判定此时驾驶员的状态为重度疲劳状态。
同时为验证本文算法的检测正确率及速率,进行实时检测。文献[19]指出过低的分辨率如320*240和640*480会使实验结果存在一定的差异,因此本文采用分辨率为800*600视频流以用于实时检测。实时检测过程中,本文算法处理一帧图片的平均检测速率见表2,单位为ms。
表2 本文算法处理一帧图片的平均检测速率
通过对比,发现本文在高分辨率的情况下(文献[11]中的视频分辨率为320*240),平均检测速率仍然高于文献[11]中的方法,可以看出该算法能够满足实时性的要求。
文献[12]中对驾驶员低头行为进行检测,平均检测正确率为94.29%,但引入过多参数,从而导致实时效果差,本实验中对重度疲劳状态的判定其实也包含了对低头行为的检测,低头行为的检出率在93%左右,但实时效果好。
为验证本文方法的准确性,通过实时对测试者进行模拟驾驶状态的测试。首先人工统计20位测试者在不同测试状态下疲劳(包括疲劳状态和重度疲劳状态)发生的次数,然后使用本文中的方法进行验证,得出检测正确率为92.5%。比较于其它方法疲劳状态检测正确率见表3。
表3 疲劳状态识别方法比较
对比于文献[10]中的方法,本文所使用的ASM对人脸有更加细节化描述,在疲劳状态识别正确率稍高一些。对比于文献[11]中的方法,本文的方法正确率稍低,但检测的整体速率有所提高,可以看出在实际应用中,本文方法具有很好的适用性和实时效果。
4 结束语
区别于其它的人脸ASM,本文使用具有194个特征点的人脸ASM,该ASM特征点数更多,对人脸细节有更好的描述,可以准确的检测出眼睛睁开度。针对目前对重度疲劳状态检测的空白,我们提出在检测疲劳状态的基础上加入对头部姿态的判定,得出一种检测重度疲劳状态的方法。实验结果表明该方法对疲劳状态检测正确率在92%以上,具有很好的实用性和可靠性。此外,由于没有统一和标准的哈欠模型,本文并未引入对嘴巴状态判定,这是下一步需要完成的工作。