如前文综述关于驾驶员疲劳检测系统有很多相关的检测手段,当前国内外主流的检测算法是基于视觉系统的方式,其关键要素是对驾驶员进行图像采集,其中就有两种不同的方式:普通图像采集和基于红外光源的图像采集;从建立模型角度上看,有对眼睛建立的2D模型和对头部建立的3D模型进行视线估计;从疲劳状态的判断角度,有单一疲劳参数判断和多个疲劳参数结合的机器学习算法进行识别。当然,先进一点的方法是基于红外广元的系统,利用瞳孔对不同波长红外光的反射量不同,直接得到眼睛位置,从而省略了人脸检测及定位这一步,提高了实时性。
如下将分别进行较为详细的检测原理分析介绍。
1、驾驶员眨眼频率检测
眨眼频率指单位时间内眨眼的次数,研究表明,驾驶员疲劳引发的事故发生前,驾驶员眨眼频率增加,眼皮覆盖眼睛的百分比增加。利用测量眼睛闭合、眼睛运动或眼睛生来特性来监视驾驶员疲劳是很适宜的方法。具体的检测方式需要通过包含眼睛定位、眼睛特征提取、眼睛状态识别、眨眼频率分析几步进行,如下将分别进行介绍。
1、眼睛定位方法
眼睛定位是指在输入的人脸图像中快速检测出眼睛的位置。只有在眼睛定位后才能准确提取出眼睛特征信息用于判断出眼睛的开闭状态,进而判断驾驶员是否疲劳。针对驾驶员疲劳检测系统的特殊要求,目前眼镜检测与定位的方法比较多,其中正面人脸的快速眼睛定位算法主要有结合可变模板边缘提取法、对称变换法、虹膜检测法、积分投影法和区域分割法等。
对称变换法
对称性被认为是计算机视觉研究中一种基本性质,通常在物体从背景区域中分割出来后,用来简化物体形状的描述和物体近似。对于人脸而言,眼睛、鼻子、嘴巴等都有较弱的点对称性,利用对称变换可以用来定位人眼进而提取脸部特征,在此基础上利用方向对称变换DST,在不同方向上的分布情况反映物体的基本形状特征,同时,匹配因事先完成的一些先验规则估算尺度因子和人眼可能区域,大大减少了运算量。
以上算法中对称变换是同等对待图像中的所有像素点,计算每个像素点的对称值,实际上,在人脸图像中有一类像素点(包括除眼睛、嘴巴、特征区域外的头发、脸部及部分身体区域等)由于在图像中物体的单一背景区域中,其大面积灰度均匀区域上的像素点在一定的尺度范围内并不具备明显意义上的对称性,就没有必要计算该区域的对称值。以减少计算量为基本出发点,这里可以加入离散对称变换的方式,减少对于均匀像素点的计算,加入对一个图像灰度不均匀区域的检测步骤,接着定义一个与广义对称变换相似的对称算子来计算点对称,这样可以大大提高检测效率。
2、眼睛特征提取
眼睛特征的内容十分丰富,包括上下眼睑、虹膜、瞳孔、内外眼角等。根据疲劳检测系统的特殊要求,本节主要介绍虹膜检测和眼角检测。
1)虹膜识别
虹膜是眼睛部分乃至整个脸部区域中特征最为明显的部分。无论是人脸、视线检测或是虹膜识别技术,虹膜定位算法都是最为基础的。
虹膜检测主要基于虹膜的两个特征,即灰度特征和几何特征。由于虹膜的灰度与周围巩膜和皮肤的灰度存在很大差异(巩膜比虹膜亮),故可以用灰度投影法来检测。由于虹膜是圆形的特殊结构,可以用圆或是椭圆来拟合。比如Daugman圆形检测算子作为掩模使用积分、微分操作分别检测二虹膜和瞳孔的圆心和半径。设为坐标处的图像强度,并且将虹膜内边界和外边界模型化为圆心在、半径为r的圆。
,其中为高斯函数以上对瞳孔或虹膜外边缘的定位过程是在三个参数空间不断迭代以求得最优解的过程(也即最大值)。
以上算法过分依赖于瞳孔圆心的定位,而对于驾驶员眼睛形状变形、旋转、缩放、重叠、遮挡等原因,Daugman表示的掩模不再适合于虹膜检测。这些情况下的图像可以利用Hough变换来解决。Hough变换主要利用眼球的圆形特征,在边缘检测后提取的边缘中用Hough变换寻找到眼球。该方法对于驾驶员眼睛状态较为敏感,如果眼睛闭合或即将闭合,那么提供的虹膜边缘太少,就无法准确检测出虹膜了。
2)眼角检测
眼睛的内外眼角也是一个重要特征,可以将眼角作为角点来检测。在图像识别中,角点包含被识别目标的重要集合参数信息,其检测的结果直接影响后续图像分析及参数计算精度。角点可看做两条直线交点,由此可先拟合两条直线,然后寻找其交点;也可以看做图像边界上曲率最大的点,由此可用链码跟踪后的轮廓点计算曲率来判定角点;角点还可以看做是图像中梯度值和梯度变化率很高的点,由此可利用方向导数来检测角点。
3、眼睛状态识别
眼睛开合状态是进行疲劳检测的重要信息。相应的主流算法分为两种类别:基于特征分析的眼睛状态识别和基于模式分类的眼睛状态识别。
1)基于特征分析的眼睛状态识别
主流的眼睛状态识别方法包含了边缘复杂度法,该方法首先根据图像二值化得到眼睛边缘图,其次计算眼睛边缘复杂度,如果眼睛区域复杂度较大,说明眼睛为开眼,否则为闭眼。
此外,也可利用模板匹配法,训练众多驾驶员眼睛睁眼与闭眼状态,当检测驾驶员当前眼睛张合状态与睁眼匹配结果大于阈值时,则认为驾驶员睁眼,否则判定为闭眼或轻度闭眼。
假设检测到当前眼睛的原始图像为S(W,H),将原始图像S(W,H)划分为不同的覆盖子图Sij(i,j),如图所示:
然后利用以下训练眼睛模板T(m,n)与覆盖子图进行卷积计算后得到其相似性:
上述公式中第一项为子图的能量,第三项为模板的能量,都和模板匹配无关。第二项是模板和子图的互为相关,随(i,j)而改变。当利用如上结果计算的结果D取最大值时,其模板和子图最匹配。
此模板检测方法可延伸至检测眼睛面积和眼睛曲率的检测方法。
4、眨眼频率分析
研究分析表明,人每次眨眼时间为0.1-0.3s,每分钟眨眼频率为10-15次,当驾驶员眼睛一次闭眼时间超过0.5s时则可以判定为疲劳,当判断出人眼开闭状态后,则进一步统计出一段时间内驾驶员的眨眼次数。具体方法如下:
在采集到的视频图像中,由于每一帧图像里眼睛可以分为两种状态,即睁眼(标记为1)和闭眼(标记为0),两次眼睛睁开状态中必定有一次闭合状态,故检测一次眨眼可表示为从“1->0->1”的过程,然后设置一定的时间窗口TimeWindow统计在一定时间内该眨眼状态切换的频次统计图,可以看出,眨眼频率在疲劳情况下相对于正常情况时明显下降(约为40%)趋势。
5、PERCLOS判定准则
PERCLOS(Percentage of Eyelid Closure over the Pupil over Time)表示在单位时间内眼睛闭合时间所占的百分率。研究表明,应该有效考虑把测量机动车辆驾驶员PERCLOS作为车载的、实时的、非接触式的疲劳检测方法。通常PERCLOS方法有如下三种:
P70、P80、EM分别表示当瞳孔面积有超过70%、80%、50%被眼睑遮住时,就认为驾驶员处于闭合状态,统计在单位时间内眼睛闭合时间所占的时间比例。且实验证明,PERCLOS中的P80与疲劳发展程度的相关性较好,且具有良好的线性关系,其曲线图表示如下。
根据PERCLOS的测量原理,测量出t1~t4,就能计算出PERCLOS的值f:
其中t1表示眼睛从最大瞳孔开度闭合到80%瞳孔开度所用的时间,t2表示眼睛从80%瞳孔开度闭合到20%瞳孔开度所用时间,t3表示眼睛从20%瞳孔开度闭合到20%瞳孔开度张开所用的时间,t4表示眼睛从20%瞳孔开度睁开到80%瞳孔开度所用的时间。
PERCLOS具体的测量方法为:用摄像机抓取驾驶员脸部图像,通过图像处理方法(模板匹配)得到眼睛图像,经过图像分析和识别手段确定眼睛睁闭。
2、驾驶员嘴部活动检测
正常情况下,驾驶员嘴部基本处于闭合状态,但当驾驶员频繁的与他人进行说话或用手机通话时,其嘴部大部分时间处于普通张开或一张一闭的重复状态。此种情况下驾驶员注意力将会不集中。另外,当驾驶员频繁的打哈欠时,其嘴巴会张开很大,据此可判定其处于疲劳状态。由此,通过对驾驶员嘴巴张闭的识别可作为驾驶员注意力和疲劳的判断条件亦或者增强度驾驶员状态的判断。
对驾驶员嘴部的检测包含如下三个方面的内容:
1、嘴唇分割
为了对嘴唇进行分割,需要通过一定的检测方式区分嘴唇与面部其他部分,典型的驾驶员嘴部状态识别算法是基于Fisher线性变换进行的。众所周知,嘴唇特征是其颜色比其他部分较红,如果转为灰度值,其灰度值较其他部分更大。当摄像头识别到红色的嘴唇时,则通过取相应的颜色像素值(RGB值),这里为了保证颜色对光照敏感度及人脸旋转不变性,可将识别的颜色像素值进行归一化处理后形成颜色向量:
Fisher线性分类器能够寻找一个最佳投影方向w*,通过确保Fisher准则函数JF(w)值最大从而确保类间距尽可能大,而类内距尽可能小。将颜色向量按照w*方向(如下图方程所示)投影到相应空间后,肤色和唇色可以被很好的区分出来。
2、嘴部定位
通过第一步中Fisher线性变换分割得到的图像通常包含多个区域,需要通过联通标示分析他们分别提取出来,标示分割后(二值)图像中各个区域的简单而有效的方法是检查各像素与其相邻像素的连通性。其中典型的算法是八连通成分标示算法,该算法可对几个孤立的区域进行区域标示,进而获取各孤立区域的各种参数,如坐标位置、像素个数等。接着利用相关几何约束可以对这些孤立的区域进行判断,最终得到嘴部区域。
3、嘴部特征提取
针对驾驶员嘴部状态研究不难发现其状态无非分为三种主要状态:驾驶员说话时普通张嘴,驾驶员打哈欠时大张嘴,驾驶员不说话时嘴部闭合;由此,我们需要设置一定的嘴部特征提取算法进行嘴巴特征检测。
为了得到嘴部区域几何特征,必须在嘴部区域内准确地得到嘴部图像及相应的特征点,左右嘴角点A和B、上嘴唇中心点嘴上点C、上嘴唇中心点嘴上点E、下嘴唇中心最下点F。根据嘴部定位结果,经过图像像素颜色值得Fisher线性变换和联通成分标示分析可以得到完整的嘴唇轮廓,为嘴唇特征点的定位打下良好的基础。根据人脸嘴唇特征点的结合分布特性,并通过水平投影确定左、右嘴角,在作垂直于左右嘴角的直线,在直线的方向上进一步搜索可得到上嘴唇中心最上点、上嘴唇中心最下点、下嘴唇中心嘴上点、下嘴唇中心最下点。
4、嘴部状态识别
在嘴部状态识别算法中,基于神经网络BP的方式最为常用,其原理是将获得的驾驶员嘴部几何特征值组成的特征向量输入到BP网络中,根据网络输出得到驾驶员嘴部的三种状态。其中BP网络分为三层结构,输入层有三个神经元,分别代表驾驶员嘴部区域的不同几何特征,隐层选用14个神经元,其传递函数为Sigmoid函数。输出层有三个神经元,跟别代表驾驶员嘴部三种不同的状态,即普通张嘴,闭嘴以及大张嘴。
为了防止由于驾驶员说话张嘴误识别为打哈欠,需要设置相应的持续时间阈值作为判断驾驶员在打哈欠的条件,一般情况下,设置5s持续张嘴的时间是比较合理的。
3、总结
如上分析,对于驾驶员状态监控系统而言,需要进行包括图像采集,人脸检测与分析,眼睛识别、嘴唇识别等步骤实现对驾驶员状态的检测。其中,以驾驶员眼部状态识别为主要输入,同时辅助以嘴唇、脑电波、心电图、肌电图、头部姿态等检测实现对驾驶员驾驶疲劳状态的检测与分析。
具体流程图如下: