张 华,杨 帆,潘国锋,孔 哲
(1.河北工业大学,信息工程学院,天津300401;2.中国人民解放军93716部队,天津301716)
因长时间驾驶等原因引起的驾驶疲劳已经成为导致交通事故的重要原因之一[1]。由于人眼的某些行为能够准确地反映驾驶员所处的精神状况,基于人眼状态的驾驶疲劳监测,已成为驾驶疲劳监测系统研究中的热点方向,其核心内容是在连续视频序列中准确、快速地确定人眼位置并分析眼睛状态[2]。
目前,疲劳监测中的眼睛定位及状态分析方法主要分为红外图像和可见光图像两类。红外图像方法需要特殊的光源照射,而且闭眼状态下在红外图像中定位眼睛困难,基于可见光图像的疲劳监测具有广阔的前景[3]。例如,文献[4]根据肤色模型分割出肤色区域,并利用形态学方法及复杂度函数实现眼睛定位,最后利用眼睛颜色及结构特征实现眼睛状态分析,该方法定位准确、可度量不同人眼睁开高度;为提高算法速度,文献[5]采用灰度视频图像的地形特征进行眼睛精确定位,然后利用SVM方法将眼睛识别为睁开、闭合两种状态;文献[6]通过训练好的SVM分类器在二值化人脸图像中定位人眼,并通过粒子滤波器进行跟踪,最后利用模版匹配法判断眼睛睁闭状态。然而驾驶室外部环境复杂多变,受其影响脸部光照随机、快速多变,偏光、侧光、阴影等均给基于机器视觉的人眼定位制造了困难;另一方面,人类在清醒状态下每次眨眼时间只有200 ms[7],疲劳监测对算法实时性要求极高。传统算法很难在可靠性及实时性两方面同时满足疲劳监测系统。
提出一种应用于实际驾驶环境中的快速人眼定位与状态分析算法,该算法以Adaboost分类器检测人脸为基础,分析了实际驾驶室环境中人脸光照特点,给出了图像自商融合方法克服光照影响;采用自适应局部阈值方法二值化人眼区域自熵图,通过图像矩特征及目标上下文信息,实现了眼睛定位及状态分析。本文算法定位准确率高、实时性好,适用于驾驶员疲劳监测。
驾驶室环境及光照复杂,在视频图像中直接定位人眼难度大,因此在定位人脸基础上进行人眼检测。司机人脸图像是视频图像的主体,且人脸倾斜角度和尺寸变化较小,故采用基于Adaboost的人脸检测算法[8]定位人脸,该算法是目前正确率比较高的算法。
驾驶员面部光照是影响人眼定位的主要因素,为了提高算法可靠性,本文对检测到的人脸图像进行预处理。眼睛内部由虹膜及巩膜组成,灰度值呈高—低—高的分布;而受光照影响的人脸,在局部区域内的灰度分布为高—低或低—高的某种单一形式。因此利用算子的灰度分布方向选择性及结构元素的膨胀方向性,可以增强眼部灰度特征,抑制光照影响。根据上述分析,定义一种图像自商融合方法
式中:If为自商融合结果;I为原始人脸图像;F1,F2为水平相反方向的2个滤波核;S1,S2为水平相反方向的2个膨胀元素。图1为实际驾车环境中的原始图像及自商融合结果,可以看出,自商融合图能够克服光照影响,突显眼睛灰度特征,这对后续人眼定位具有重要意义。
图1 图像自商融合
基于整个人脸定位眼睛增加算法耗时。灰度投影是脸部特征定位领域的经典算法,其优点是方法简单、定位快速。因此笔者采用投影算法快速分割出人眼区域,为后续处理缩小数据量。水平积分投影函数为
式中:Sh(y)为水平行投影曲线;If由式(1)得出。设曲线波峰位置为yc,以yc为中心在曲线中分别向上、下寻找到的曲线均值位置分别为yup和ydow。yup和ydow基本为眼睛上边沿及下边沿,考虑到闭眼状态yup与ydow十分接近,定义下面规则确定人眼区域的上下边界
式中:BLup和BLdow分别为人眼的上、下边界位置;l为根据人脸“三庭五眼”规则确定的常数。图2为划分结果示意,上下边界用白线表示,准确包含了眼睛,并排除了大部分眉毛。
图2 人眼区域划分
人眼区域中,虹膜灰度值低于周边区域。为增加算法对光照的适应性,采用Bernsen局部自适应阈值法对人眼区域二值化,提取眼睛目标区域。其中Bernsen窗口根据人眼区域大小动态设置。
当驾驶员佩戴眼镜时,鼻梁两侧区域容易和人眼区域粘连,这是二值化方法提取候选区域的主要问题。采用复杂度或SSIM特征区分出干扰区域,算法复杂、计算特征的区域大小不易确定,而且闭眼状态很容易漏检人眼。眼睑存在明显眼睛轮廓特征,上下眼睑在竖直方向存在明显的灰度变化。本文通过检测眼睑边缘并计算其外接矩形的方法解决粘连问题,整个眼睛候选区域提取流程如图3所示。图4给出了眼睛候选区域提取结果,眼睑特征很好地解决了粘连的问题。
图3 眼睛候选区域提取流程
图4 眼睛候选区域(截图)
由于眼镜、眉毛及人脸边缘的存在,候选区域中存在部分干扰区域,本节从图像矩特征及上下文信息两方面分析候选区域,达到排除干扰,确定眼睛区域的目的。
图像矩可以描述图像的不同特性,一阶矩表示目标的质心,二阶矩表示目标的大小和方向。定义N×M的灰度图像f(x,y)的二维(p+q)阶规则矩mp,q为
为获得平移无关性,图像中心距定义为
以图4中候选区域为例,图5给出了候选区域的椭圆描述结果及椭圆参数统计结果。图5b中右侧y轴为参数θ,左侧y轴为参数a和b,x轴为候选区域号。正常情况下,驾驶员头部倾斜角度在10°以内;眼睛长度、宽度满足“三庭五眼”规则。据此,通过人眼区域划分情况,自适应设定a,b及θ范围,从候选区域中筛选出人眼区域。图5中区域16及区域19为左右人眼区域。
图5 椭圆描述及眼睛判定
驾驶员佩戴眼镜时,在闭眼状态下,眼睛区域的参数与眼睛上方的镜框边缘区域及部分眉毛区域的参数相近,无法通过限定a,b及θ范围排除这部分干扰区域。目标上下文是指场景中目标与其他物体的位置关系[9],闭眼时存在的干扰区域位于人眼区域上方,因此可通过目标上下文信息进一步筛选目标。
用矩形表示干扰区域,用圆角矩形表示目标眼睛区域,用一阶矩质心表示区域的位置。按“首先y轴方向由大到小,其次x轴方向由大到小”的规则排列各候选区域,那么目标区域与干扰区域存在以下3种位置关系:1)头部倾斜角度较小时,两个眼睛同时低于眉毛区域;2)头部向右侧倾斜一定角度后,左眼区域高于右侧眉毛;3)头部向左侧倾斜一定角度后,右眼区域高于左侧眉毛。图6给出了3种位置关系及区域排列顺序。通过分析可得出下列结论:当区域1与区域3的中心y轴距离小于区域1与区域2的中心x轴距离时,区域1和2为目标区域;否则区域1和3为目标区域。
图6 上下文眼睛位置分析
目前基于眼部行为的疲劳判断指标主要有:采样时间段内的眨眼频率、总闭眼持续时间、眨眼时间均值和PERCLOS值[7,10],且各指标间具有互补性。图7为 PERCLOS指标原理示意,t1,t2,t3分别为3次眨眼过程中瞳孔纵向张开低于20%的时间,PERCLOS值即为采样时段内,瞳孔被遮住80%以上的时间占采样时间的比例。PERCLOS值及其他三种指标都是在线统计监测类指标,因此可使用人眼椭圆参数短轴a来表征瞳孔纵向开合高度,只要算法能在一个眨眼过程多次采样眼睑位置即可。
图7 PERCLOS疲劳判定指标原理示意图
行车中驾驶员头部不会大范围移动,为提高实时性及可靠性,帧处理时充分利用帧间有效信息。进行人脸检测时,根据前k帧中人脸位置信息设定当前帧的ROI,提高检测速度及检测鲁棒性;人眼区域划分时,根据前一帧眼睛位置信息设定当前帧的ROI,只在局部进行人眼区域划分,不但提高处理速度而且能克服大部分脸部光照的影响;在克服区域粘连问题时,进行最多N次的区域形态学腐蚀。此跟踪方法建立在单帧定位精确基础上,方法简单易行。总结帧处理过程及目标跟踪方法,本文算法流程图如图8所示。
本文算法在M480 2.67 GHz CPU,2.00 Gbyte RAM 的PC机上,采用VC++2008编程实现。视频采集设备采用USB CMOS摄像头(帧速率30 f/s、帧规则480×360),并将摄像头固定于驾驶室内前方玻璃上。实验中采用实时监测、脱机监测两种方法测试算法性能,分4个时段行车及停车模拟测试。图9为实验中眼部定位结果示意,算法可以定位不同状态下的人眼并确定睁眼高度;眼部矩形框为眼睛位置,矩形高度表征眼睛睁开高度。
图8 算法流程
图9 部分驾车实验结果
为能准确地分析眼睛定位正确率,采用脱机监测方法。脱机监测是对驾驶视频的事后监测,算法可以扑捉视频序列中的每一帧。眼睛定位正确率用正确定位眼睛的帧数占总帧数的百分比表示,正确定位眼睛定义为正确定位单眼或双眼且无误定位现象。在驾驶视频中分时段截取4组共10 000帧视频,并结合Virtual Dub软件进行分析。
表1为定位结果统计,定位正确共9 834帧,定位失败共166帧。其中“无人脸”60帧,主要由大角度侧头导致的Adaboost人脸检测失败造成。组别3和4定位正确率相对较低,原因是2个时段内的低角度光照造成脸部侧光,侧光导致定位失败且造成单眼成功定位现象。总体看,算法能够定位任意睁开高度下的人眼,对光照具有较强适应能力,平均定位正确率达到98.34%。
表1 眼睛定位结果统计
实际应用中需采用实时监测方法监测人眼状态,此时监测速度由算法单帧处理时间决定。人类约3 s眨眼1次,眨眼时间大约为200 ms[7]。若算法单帧处理时间不能明显小于200 ms,算法将漏采集大部分闭眼过程,无法保留眼睑位置的关键信息。算法实时性直接影响PERCLOS等指标的有效性。
实时监测中,算法平均处理速度为28 f/s,在眨眼过程可采集6帧图像并实现眼睛状态分析,远高于文献[12]提出的13 f/s的标准。图10为停车状态下模拟疲劳状态的一段实时监测视频序列的人眼状态检测结果。前600帧为快速眨眼清醒状态;大概从600帧开始,眨眼时间变长,眨眼频率下降,出现疲劳状态;大概到1 140帧位置出现瞌睡状态。从数据曲线的起伏变化看出,算法28 f/s的处理速度能够正确跟踪每次眨眼过程,人眼高度随时间的变化能够准确描述驾驶状态。
图10 眼睛状态检测结果
本测试采用眨眼时间均值及PERCLOS疲劳判断指标,其指标阈值及在线采样时间参考文献[11-12],如表2所示。考虑安全问题,对副驾驶员进行疲劳测试,准许副驾驶员进入瞌睡状态。同时引入主观监测技术,记录驾驶员状态并给出评价。从连续5 h的2名测试者驾驶实验来看,本文算法应用于2种指标可以有效地进行疲劳预警;由于算法高达28 f/s采样速率及60 s的采样时间,使单帧图像眼睛定位失败及眼睛状态的误判对预警有效性影响很小,疲劳监测受光照影响小,提升了预警正确率。
表2 疲劳指标阈值及采样时间
针对驾驶员疲劳监测中实时性与可靠性两个关键问题,提出了一种快速、精确的驾驶员眼睛定位及状态判定算法。通过一种图像自商融合方法,增强了算法对驾驶室光照的适应能力;采用投影方法划分人眼区域,并利用帧间信息缩小检测区域,减小了数据量、提高了算法速度;采用眼睑特征解决了区域粘连问题,并通过图像矩特征及上下文信息实现了眼睛的定位。不同光照条件下的多种驾车实验表明,定位准确率达到98.34%,算法处理速度高达到28 f/s,算法对光照鲁棒性强,完全满足疲劳监测系统要求;结合PERCLOS及眨眼时间均值两个指标进行疲劳监测,应用该算法的疲劳监测受光照影响小、预警正确率高,本文算法实用价值很高。
[1]杨海燕,蒋新华,聂作先.驾驶员疲劳检测技术研究综述[J].计算机应用研究,2010,27(5):1621-1624.
[2]葛如海,陈彦博,刘志强.基于计算机视觉的驾驶员疲劳识别方法的研究[J].中国安全科学学报,2006,16(9):134-138.
[3]隋博,赵永胜.基于视觉的可靠性疲劳驾驶检测技术研究[J].电视技术,2011,35(15):9-12.
[4]朱淑亮,王增才,王树梁,等.头部多角度的眼睛定位与状态分析[J].重庆大学学报,2010,33(11):20-26.
[5]刘鹏,江朝晖,熊进,等.用于驾驶疲劳检测的人眼定位及疲劳判别算法[J].计算机工程与应用,2010,46(24):185-188.
[6]王琼,王欢,赵春霞,等.基于眼睛状态识别的驾驶员疲劳监测[J].南京理工大学学报:自然科学版,2010,34(4):448-453.
[7]潘晓东,李君羡.基于眼部行为的驾驶疲劳检测方法[J].同济大学学报:自然科学版,2011,39(2):231-235.
[8] VIOLA P,JONESM.Robust real-time face detection[J].International Journal of Computer Vision,2004,57(2):137-154.
[9]武晖,于昕,隋尧,等.融合上下文信息的场景结构恢复[J].中国图象图形学报,2012,17(7):839-845.
[10] PORTOULI E,BEKIARIS E,PAPAKOSTOPOULOS V,et al.Onroad experiment for collecting driving behavioral data of sleepy drivers[J].Somnologie-Schlafforschung und Schlafmedizin,2007,11(4):259.
[11]潘晓东,李君羡,徐小冬.基于眼部行为的驾驶疲劳评价指标的阈值[J].同济大学学报:自然科学版,2011,39(12):1811-1815.
[12]苑玮琦,滕红艳.眼睛疲劳程度判定方法研究[EB/OL].[2013-06 -18].http://www.cnki.net/kcms/detail/11.2127.tp.20120425.1719.021.html.