詹润哲,姜 飞
宿州学院信息工程学院,宿州,234000
疲劳驾驶是交通事故的重要成因之一。根据美国汽车协会(AAA)交通安全基金会的调查数据显示,疲劳驾驶在美国的交通事故死亡事件中占据21%的比例,每年约6 400人因此丧生。检测驾驶员的疲劳度,并在其超过一定阈值时报警,是智能交通领域、智能辅助驾驶的一项关键技术。
近年来,国内外研究者对驾驶员疲劳检测技术进行了深入研究[1]。检测方法主要分为两大类:一是根据外部硬件设备的受控表现,判断驾驶员行为是否为疲劳驾驶,如通过传感器获取车辆在行驶过程中的参数(道路线检测、速度变化、车辆间距离)判断异常情况[2];二是通过驾驶员自身的生理特征检测驾驶员是否构成疲劳驾驶,如通过心、脑、眼电图取得驾驶过程中的变化数据综合判断[3],通过驾驶员正常与疲劳状态下的视觉特征不同,采用模式识别的方法进行判别[4]。
以硬件传感器为主的方法其准确性与检测仪器的精度和相关参数有较大关系,且接触式检测对驾驶员操作构成了障碍。本文基于机器视觉技术进行疲劳检测,主要是对疲劳特征的挖掘、提取以提高检测的实时性和准确性。
本文以非侵入的方式为出发点,采用面部特征的融合作为疲劳检测的主要指标。所提出的算法流程由四个阶段组成,即人脸检测、关键区域分割、疲劳参数计算和判定预警。首先,对视频图像进行滤波等图像预处理,使用优化的类Haar特征检测算法进行人脸检测。然后,进行人脸关键点定位,划分出关键区域,通过关键点位特征值的计算,得出驾驶员的眨眼频率以及打哈欠状态,进一步作为疲劳参数计算的重要指标,以此实时综合分析检测结果。最终,当疲劳参数超越设定阈值时给予疲劳警告。关键点特征融合的疲劳检测方法的算法流程图,如图1所示。
图1 疲劳检测方法设计
Viola-Jones检测算法使用类Haar特征,能进行稳健高速的人脸检测[5],如图2(a)-图2(e)为五类Harr特征,对于一张大小N×N的灰度图像I,其特征区域为S,则特征Feature计算方式为白色区域内的像素和减去黑色区域内的像素和:
图2 类Haar特征及其计算
为了能够达到实时检测人脸的需求,需要使用积分图进行加速计算。在积分图中,每个点(x,y)存储了其左上方所有像素的和,计算方式为:∑x′ 对于训练样本来说,数个类Haar特征的组合最终将产生较大数量级的特征集,需要采用AdaBoost算法进行特征的选择与弱分类器的训练。AdaBoost算法的基本思想为首先选取相应的特征构建不同的弱分类器,然后在每次弱学习后调整样本空间中正确分类与错误分类的权重分布,并重点关注错误分类样本,最终将这些弱分类器集合构成一个强分类器。这一系列强分类器经过阈值调整级联,形成最终的人脸检测分类器,如图3所示。 图3 人脸检测分类器训练流程 在前述算法完成人脸检测后,为了能够实现对疲劳特征区域进行计算,需要对人脸面部特征点进行提取。Dlib视觉计算库中提供了一种基于梯度提高学习的回归树人脸对齐算法[6],通过级联一系列残差回归树,叠加对应叶子节点上的残差回归量,使当前的形状回归到Ground Truth上。利用iBUG 300-W人脸特征点数据集[7]上训练得出的68个特征点模型及GBDT算法应用在人脸关键点定位上,如图4所示。 图4 GBDT算法计算68个人脸关键点 在人脸关键点定位算法得到的分割结果中,为了能够选取对实际问题有较大参考意义的视觉特征参数,重点关注在嘴部与眼部区域的特征。如图4中所定位的68个关键点中,眼部的关键点为P37~P42(左眼),P43~P48(右眼),嘴部的关键点为P49~P68。疲劳参数计算的基准主要为在一定的连续帧数内,眨眼的频率与打哈欠的状态。 经过实验,眼部在睁开与闭合状态时,由于竖直方向上眼睑关键点之间的距离变动,其宽高方向上的比值会出现明显变化,能够通过特征点坐标数值动态计算得出。以左眼为例,距离计算函数Distance为图像两像素点间的欧式距离,则: 在实际测量中,当Ratio(Eye)小于0.2时,人眼为闭合状态。同理,在打哈欠时嘴巴张开幅度较大,嘴部选取的宽高方向上的关键点在比值上同样具有较明显的变化,计算方式为: 在实际测量中,当Ratio(Mouth)大于0.75时,则可判断该帧嘴部有较大张幅。 在眼部和嘴部状态能够以一定阈值判别的情况下,根据状态信息可在一定帧数内实现融合疲劳参数的计算。计算方式为在循环读入视频流的N帧内,当3.2中所述Ratio值在当前处理帧数内达到限定阈值,则对应计数器n增加一次,N帧后计数器对应清零。则眼部与嘴部疲劳频度为: 由于Ratio(Mouth)的值受外界影响较大,如行车交谈等也会影响到该值变化,故在判别中作为眼部疲劳的辅助判别参数,当fMouth超过规定频度时,若feye并没有超过该占比则不做疲劳判定。 图5 不同状态下关键区域划分结果 实验程序采用Python语言下的OpenCV 3.3.0与Dlib 19.6.0框架进行编写并测试,操作系统为macOS,CPU为Intel Core i7-4770HQ@2.2GHz,内存16G。测试用视频序列分辨率为800×460。 PERCLOS(Percentage of Eyelid Closure over the Pupil over Time)疲劳计量方法被认为是最有效的、车载、实时驾驶疲劳测评方法,其定义为单位时间内眼睛闭合所占的时间比例[8]。在测量周期t1-t4内,t2-t3为闭合时间,则度量值的计算方式为(采用P80-PERCLOS计算方式): PERCLOS疲劳计量方法作为对比组,与本文所叙述的关键点特征融合的方式进行对比,实验前预先统计测试视频序列中出现的疲劳次数,与实际检测出疲劳次数对比,算法对比的实验结果如表1所示。 表1 检测算法对比实验结果 在同一算法下,根据受试者眼部是否佩戴眼镜的状态,进行检测对比,实验对比结果如表2所示。 表2 面部关键点特征-佩戴眼镜对比实验结果 实验表明,面部关键点融合特征算法能够检测出较多的疲劳情况,正确率较高。但是由于本算法涉及多个疲劳因素与判定方式,在定值判定的情况下容易发生误检测的情况;PERCLOS疲劳计量方法采用单一因素进行检测,故误检发生不频繁。与此同时,不同受试者的疲劳判定关键区域情况不尽相同,如在佩戴眼镜的情况下,由于模型训练多为不佩戴眼镜的样本,故检测过程中时有检测丢失的情况发生,检测能力也较不佩戴眼镜情况弱。 以视觉方法为基础的疲劳驾驶检测方法在实际应用过程中设备限制低,也不会给驾驶员活动带来障碍。且得益于积分图加速、人脸关键点定位等方法在前期工作中的应用,保证了实时性,基于面部关键点特征融合的疲劳检测方法在上述测试中也取得了较好的精度,具有易于部署的特点且在嵌入式平台上也能够保证一定速度。3 人脸关键点及疲劳区域参数计算
3.1 人脸关键点定位
3.2 关键区域参数计算
3.3 疲劳参数计算
4 实 验
4.1 实验环境
4.2 实验结果
4.3 结果分析
5 结 论