APP下载

驾驶员疲劳检测系统的研究

2013-07-19李绍文王江波

计算机工程与应用 2013年15期
关键词:人脸分类器投影

李绍文,王江波

1.桂林电子科技大学 网络中心,广西 桂林 541004

2.桂林电子科技大学 计算机科学与工程学院,广西 桂林 541004

驾驶员疲劳检测系统的研究

李绍文1,王江波2

1.桂林电子科技大学 网络中心,广西 桂林 541004

2.桂林电子科技大学 计算机科学与工程学院,广西 桂林 541004

1 引言

近年来,由于经济的高速发展使得人民生活水平大大提高,国民拥有私家车的数量不断增加,与此同时交通事故的发生率也不断上升,车辆与安全问题已成为社会关注的热点,而其中与疲劳有关的交通事故占事故总数的20%左右,占特大交通事故的40%以上[1],可以说疲劳已成为安全行车的大敌。因此研究疲劳驾驶检测系统对于预防交通事故的发生有着重要意义。

目前,国内外研究机构均已在检测驾驶员疲劳状态方面取得了一定的进展。如澳大利亚国际大学开发的DAS[2]在商业上获得使用。欧盟于2004年完成 AWAKE[3]工程,采用的特征状态包括眼睑运动、握力改变及路面跟踪,并使用刹车和方向盘位置等制动行为,把这些方法结合起来抵制交通风险。Seeing machine研究组开发的FaceLAB[4-5]系统监控驾驶员行为,能检测疲劳与精力分散等情况。虽然国内外研究机构在检测驾驶员疲劳状态方面取得了一定的进展,但是到目前为止,大都仅限于理论研究的层次,即使已经问世的检测装置产品大多也存在着很多局限性,有很多问题亟待解决,主要表现为:由于驾驶员的个体差异,单一的检测方法并不能准确反映驾驶员的疲劳状态;现有的检测方法不能很好地掌握疲劳与检测指标之间的关系,对疲劳的等级划分不够准确。疲劳驾驶监测装置已经商业化,有越来越多的成熟型产品推向市场,但是高成本阻碍了检测装置的普及应用,需要采用更先进的技术,降低监测装置的成本,将疲劳驾驶检测装置推向更广阔的市场。

基于此,本文提出一种综合判定的疲劳检查方法。该方法首先使用中值滤波去除噪声和光照对图像的影响,然后通过对AdaBoost算法冗余特征的去除和弱分类器的优化选择,对强分类器训练算法进行了改进。并且对级联分类器进行了优化实现对人脸的快速检测,然后在人脸的上半部通过水平灰度投影、垂直灰度投影划分出准眼睛区域,通过从粗到细的多次模板匹配方法对人眼进行准确定位。最后通过PERCLOS、眼睛闭合时间、眼睛眨眼频率、嘴巴张开程度、头部运动的计算,进行驾驶员疲劳程度的综合判定。系统总体流程如图1所示。

图1 疲劳驾驶系统总体流程图

2 人脸检测

2.1 图像预处理

由于自然条件下的噪声和光照影响等一些因素,会给人脸图像的处理带来一定的干扰,所以需要找到合适的方法滤除噪声和改善非均匀光照的影响。经实验验证,3×3中值滤波法可达到很好的预处理效果。

2.2 改进的AdaBoost检测方法

1995年,Freend和Schapire提出AdaBoost算法,Viola P和Jones M提出的与基于积分图的Haar-like特征快速计算算法相结合的AdaBoost算法[6],在历史上第一次真正实现目标的实时检测。这个算法的基本思想就是将大量的分类能力一般的弱分类器通过一定方法叠加起来,构成一个分类能力很强的强分类器,且算法不需要任何关于弱分类器性能的先验知识,很容易应用到实际问题中。AdaBoost算法流程如图2所示。

图2 AdaBoost算法流程图

Viola P和Jones M提出的基于AdaBoost的快速目标检测方法,虽然得到了广泛的应用,但是该算法还存在很多问题。如:虽然AdaBoost系统检测速度很高,但是由于AdaBoost算法本身训练比较耗时,整个系统的训练时间非常惊人。根据文献[7],其系统在训练上花费了数周的时间。在分析这些问题的基础之上,本文提出了改进的AdaBoost目标检测算法,极大降低了检查的时间。

2.2.1 强分类器训练改进算法

基于AdaBoost的快速目标检测算法在计算Haar-like特征时使用积分图的方式进行了快速计算,根据文献[8]的统计,24×24的搜索窗口虽然有18万的特征,但是过半的矩形特征面积非常小(小于2×2),这些特征在实际目标检测的性能很差,使训练的特征不具有很好的泛化能力。本文在进行特征选取的时候将这些小面积矩形特征进行过滤,避免了此类特征的计算,在保证分类器检测率的同时,提高了分类器的训练速度。

由AdaBoost训练强分类器的训练算法可以看出,该算法是选择单个特征作为弱分类器,且选择弱分类器的标准是弱分类的检测准确率略大于随机猜测(即略大约0.5),则将该弱分类器保留[9]。但是在训练的过程中,很可能出现非常相似的特征,这类相似的特征对分类器的性能没有提高的作用,而且不利于分类器的泛化能力。

为了避免选取相似的特征作为弱分类器,本文采取如下改进方法:首先,要描述弱分类器之间的差异性,如果定义第t个弱分类器对第i个样本的预测结果为hi(xi),hi(xi)是第j个已被选取的弱分类器对第i个样本的预测结果,则定义第t个弱分类器和已有的第j个弱分类器对第i个样本的检测差异性为:

如果样本总数为N,定义第t个弱分类器和第j个弱分类器的差异性Dt,j为:

则第t个弱分类器与其他已有的弱分类器之间的差异性可以按如下公式计算:

其中T为训练强分类时当前的训练轮数,T-1即为当前已存在的弱分类器个数。

根据上面的改进策略,下面给出改进后的强分类器的训练算法:

(1)输入:S={(x1,y1),…,(xi,yi),…,(xn,yn)},yi=1,0分别代表正负样本;训练轮数为T;弱分类器相关性阈值DΤhresh;特征最小面积Smin。

(2)初始化:初始化每个样本的权重为:

i=1,2,…,n。m和l分别为负正样本的总数。

(3)循环t轮,t=1,2,…,T:

①根据公式归一化权重。

②计算当前搜索窗口内的Haar-like矩形特征的面积,滤去面积小于Smin的特征。根据公式对剩余的每一个Haar-like矩形特征,都训练一个弱分类器hj。

③从V中选择出错误率最低的弱分类器hi,错误率为et。根据公式计算此弱分类器与其他弱分类器的差异性Dt。若Dt<DΤhresh,则抛弃该弱分类器,并根据样本权重变化调节阈值θ,跳到步骤②。否则,进入下一步。

④根据公式更新样本权重。

(4)根据公式输出强分类器。

2.2.2 级联检测技术的优化

AdaBoost算法能够完成实时性检测的原因除了通过积分图进行快速特征计算之外,另一个重要原因是该算法在进行检测目标时采用了级联分类器。级联结构分类器如图3所示。

图3 级联结构分类器

在将训练出强分类器串联在一起形成层叠分类器时,应遵循“先重后轻”的分级分类器思想,将由重要特征构成的结构较简单强分类器放在前面。这样可以先排除大量假样本,从而提高检查速度。

AdaBoost算法在进行级联分类器训练的时候,对每一级强分类器都进行了重新训练,训练比较耗时。文献[10]已经证明:“随着弱分类器数量的增加,通过AdaBoost构建的强分类器的检测率也会不断提高”。本文为了提高训练速度,在对级联分类器训练时,后一级的强分类器会重复利用前一级已经训练好的弱分类器,并在此基础上通过增加弱分类器的数量来提高强分类器的性能。这样可以大大减少强分类器的训练时间。

本文采用3 200张单人的正样本,其中一半用于训练,一半用于测试。负样本为3 200张,也是一半用于训练,一半用于测试。为了验证改进后的AdaBoost算法的检测性能,本文将该算法与标准的AdaBoost算法、支持向量机[11]进行对比。标准和改进的AdaBoost算法的级联层数设为5层,各层选取的特征数量分别为80、200、500、1 000、1 500。实际检测时对320×240大小的图像进行检测。三种算法实际应用准确率和检测平均时间如表1。

表1 三种算法的性能对比表

本文提出改进AdaBoost算法在人脸检测准确率和实时性上均具有很好的性能,特别是减小了检查时间,在实时性上比标准的AdaBoost算法有了很大的提高,同时本文也考虑到很多可能存在的状况,比如差异太大的人脸,受边缘光影响造成阴阳脸,人脸部分被遮挡,以及戴眼镜的情况等。本文提出算法的实际检测效果如图4所示。

图4 人脸检测效果图

3 人眼定位

本文采用基于改进相似度模板匹配方法对人眼进行定位。经过多张图片的观察,发现眼睛都在检测到的人脸区域上部,截取人脸区域的上半部分,通过对其水平灰度积分投影、垂直灰度积分投影确定准眼睛区域,然后在准眼睛区域用改进的模板匹配方法对眼睛准确定位。

3.1 灰度积分投影确定准眼睛区域

在准确定位脸部位置后,根据人脸的面部器官的分布,人眼在脸部的上半部,所以首先截取人脸区域是上半部进行处理。

人脸图像中眼睛部位的灰度值通常比周围区的灰度值小,利用该特征常使用积分投影的方法来定位眼睛。最为常用的投影函数是积分投影函数。假设I(x,y)表示点(x,y)处的像素灰度值,在区间[x1,x2]和[y1,y2]内的水平积分投影函数和垂直积分投影函数分别表示为Sh(y)和Sv(x),则:

观察不同单人图像的水平灰度投影曲线,可以发现人脸所在区域将使垂直灰度投影曲线形成两个波谷。第一个波谷为眉毛的水平投影。第二个波谷为眼睛瞳孔的水平灰度投影。得到眼睛瞳孔水平位置后设定一个阀值,根据经验本文设为14,即可得到眼睛水平的上下边界。水平灰度投影曲线及眼睛的上下边界如图5所示。

观察不同单人图像的水平灰度投影曲线,可以发现人脸所在区域将使垂直灰度投影曲线形成两个波谷。即为左右眼睛的瞳孔垂直投影。定位到左右眼睛瞳孔垂直位置后,根据经验设定阀值。左眼左边界阀值为20,右边阀值为40。右眼的左边界阀值为40,右边界阀值为20。即可得到双眼的左右边界。垂直灰度投影曲线及眼睛的左右边界如图6所示。

将眼睛上下边界和左右边界相交,即可得到准眼睛区域。准眼睛区域如图7所示。

3.2 改进的模板匹配精确定位眼睛

模板匹配方法是假设待搜索图像S的尺寸为W×H,模板T的尺寸为M×N,通过一定的算法在大图像(即待搜索图像S)中搜索与模板T具有相近的尺寸、方向和图像的子图,并确定其坐标位置。

基于相似度的模板匹配算法以各局部图像作为模板,先在人脸集中手工提取各种状态的眼睛图像作为模板如图8所示。

图5 水平灰度投影曲线及眼睛上下边界

图6 垂直灰度投影曲线及眼睛左右边界

图7 准眼睛区域

图8 眼睛模板

一幅眼睛图片为一个模板,即一个二维矩阵,利用眼睛模板与人脸图像作相关匹配,匹配函数如下:

当模板匹配的相关系数R(i,j)等于1的时候,说明搜索子图与模板完全匹配。这只是一个理想值,模板匹配的过程中主要是寻找相关系数的最大值,此时它所对应的搜索子图便是所要寻找的目标子图[12]。显然,用这种公式做图像匹配计算量大、速度慢。可以使用另外一种算法来衡量T和Sij的误差,其公式为:

计算两个图像的向量误差,可以增加计算速度,根据不同的匹配方向选取一个误差阀值E0,当E(i,j)>E0时就停止该点的计算,继续下一点的计算。

传统的模板匹配法,通常是在整幅图像中进行匹配,运算量大,且干扰因素较多,本文在上文得到的准眼睛区域,利用改进的模板匹配算法进行人眼的准确定位。

本文将模板匹配过程更改为两次匹配,第一次匹配为粗略匹配。取模板的隔行隔列数据,即1/4的模板数据,在被搜索图上进行隔行隔列匹配,即在原图的1/4范围内匹配。且在每行先跳动着隔几个点进行一次粗匹配,大致框定匹配区域,然后在附近区域逐一检索获得最佳匹配点。运算量可减少到1/3以下,且目标提取效果相当好。由于数据量大幅减少,匹配速度显著提高。

传统的模板匹配过程中都是在眼部区域整个窗口自左向右,自上而下搜索。通过观察可以发现眼睛常处于准眼睛匹配区域中心附近,所以本文选择由准眼睛匹配区域中心向周围辐射匹配的方式,通过实验验证此种方式效果最理想。同时为了合理地给出一个误差阈值E0,使用一个确定误差阈值E0的准则:

式中,e0为各点平均的最大误差,一般取40~50即可;m,n为模板的长宽。

第二次匹配是精确匹配。在第一次误差最小点(Imin,Jmin)的邻域内,即在对角点为(Imin-1,Jmin-1),(Imin+ 1,jmin+1)的矩形内,进行搜索匹配,得到最后结果。为了验证改进后的模板匹配算法的检测性能,本文将该算法与传统的模板匹配算法进行对比。利用本文的模板匹配算法对100幅图像进行了人眼定位实验。两种算法检测平均时间、检测准确率的对比如表2。

表2 两种算法的性能对比表

本文提出的改进模板匹配算法在保证传统匹配算法准确率的基础上大幅度提高匹配速率。本文提出算法的实际检测效果如图9所示。

图9 部分人脸图像眼睛定位结果

4 疲劳程度的综合判定

驾驶员疲劳的判定会因错误检查带来不良影响,本文采用PERCLOS、眼睛闭合时间、眼睛眨眼频率、嘴巴张开程度、头部运动的计算,进行疲劳程度的综合判定,准确、有效地进行驾驶员疲劳的检测。

4.1PERCLOS

PERCLOS[13](Percentage of eyelid Closure over the pupil overtime)是指眼睛闭合时间占某一特定时间的百分率。PERCLOS方法有P70,P80和EM三种判定标准。研究表明P80与疲劳程度间具有最好的相关性。

眼睛的状态通常有三种,正常睁开,半睁开以及闭合,相应的灰度图及二值化如图10所示。

图10 三种状态眼睛灰度图及二值化

定义SE(n)为第n帧眼睛的疲劳状态:

其中,n为视频帧数,T(n)为第n帧眼睛的高度,D为正常睁开时上眼睑到下眼睑的垂直距离(单位为像素)。通过对不同眼睛的实验可知,当阀值J=D/3时可以较好地检测出眼睛的疲劳状态。SE(n)=1代表正常睁开,SE(n)=0代表眼睛疲劳。在一定的时间内PERCLOS值为:

4.2 嘴巴张开程度

嘴巴的状态通常有三种,闭合,说话及打哈欠,在疲劳状态下,人会频繁地打哈欠。在人脸下半部分进行水平灰度投影,观察不同单人图像的水平灰度投影曲线,会发现该区域下半部分的水平灰度投影曲线有一个波谷,即为嘴唇间位置。对人脸下半部分区域二值化,从嘴唇间向上、下计算连通区域(连通区域可以防止鼻孔及胡须对计算带来影响)的像素值,即可得到嘴巴的张开程度。

分别对三种人脸区域嘴巴状态灰度图进行二值化。三种状态嘴巴灰度图及二值化如图11所示。

图11 三种状态嘴巴灰度图及二值化

定义SM(n)为第n帧嘴巴状态,则

其中n为视频帧数,TM(n)为第n帧嘴唇间高度,H为嘴巴闭合状态下嘴唇间高度(单位为像素)。通过对不同嘴巴的实验可知,当阀值K=H×10时可以较好地检测出嘴巴是否打哈欠(说话时嘴巴的高度为H的4~5倍,打哈欠时嘴巴的高度约为H的10倍。打哈欠时嘴巴的高度远远大于说话时嘴巴的高度)。SM(n)=1代表嘴巴打哈欠,SM(n)=0代表嘴巴处于正常状态。在一定的时间内PMRCLOS(Percentage of Mouthlid Closure over the pupil overtime)值为:

4.3 眼睛高度D及嘴巴高度H补偿

在上眼睑到下眼睑的垂直距离D及上嘴唇到下嘴唇的垂直距离为H时,由于驾驶员头部相对于检测设备有位置移动,因此为了实现驾驶员眼睛高度和嘴巴高度的准确计算,需要修正眼睛、嘴巴与检测设备距离相对变化引起的D及H变化[14]。

驾驶员头部相对于检测设备有位置移动包括前后运动、转动、左右运动。头部的转动及左右运动不会影响到高度D和H的变化,所以只对头部的前后运动进行分析。眼睛高度D及嘴巴高度H补偿原理如图12所示。

驾驶员正常位置为ΑΑ,到摄像头距离为a,图像中驾驶员大小为Α1Α1。驾驶员头部向前移动x1,位置为BB,图像中驾驶员大小为B1B1。驾驶员头部向后移动x2,位置为CC,图像中驾驶员大小为C1C1。驾驶员在位置ΑΑ时,图像中上眼睑到下眼睑的垂直距离D,上嘴唇到下嘴唇的垂直距离为H,则移动x后,上眼睑到下眼脸的垂直距离D′=(D×a)/(a+x),x∈[-x1,x2]。上嘴唇到下嘴唇的垂直距离为H′=(H×a)/(a+x),x∈[-x1,x2]。通过实验验证,该补偿方法有效解决了由于驾驶员头部运动造成的眼睛、嘴巴高度变化的问题,提高了系统检查的准确率。

图12 眼睛高度D及嘴巴高度H补偿原理图

4.4 眼睛闭合时间

眼睛闭合时间,一般用眼睛闭合到睁开所经历的时间来表示。人处于正常清醒状态时,眼睛闭合时间是很短的,会迅速睁开眼。而当疲劳时,眼睛闭合时间会明显变长,因此眼睛闭合时间能直接反映驾驶员的精神状态。本文采用计算从眼睛闭合D/3到睁开D/3的最大帧数,帧数越多,闭合时间就越长,则疲劳程度就越严重。

4.5 眼睛眨眼频率

人在疲劳状态下,眨眼频率会比清醒状态下频率高。本文也将其作为一项参数作为疲劳判断的依据。眼睛闭合D/3到睁开D/3为眨眼一次。累加一段时间内眨眼次数,作为疲劳判断的一项参数。

4.6 头部运动的疲劳参数

驾驶员在疲劳状态下会出现频繁点头,头部向前倾。本文通过水平灰度积分投影得到眼睛瞳孔、嘴角的水平位置。d1为瞳孔水平位置到采集图片的上边缘距离,d2为嘴角的水平位置到采集图片的下边缘距离。

在驾驶员疲劳出现点头情况,则d1增大且d2减小。驾驶员疲劳时,头部向前倾,则d1增大且d2增大。点头和头部向前倾可以作为疲劳判断的一项重要的依据。

本文采用PERCLOS、眼睛闭合时间、眼睛眨眼频率、嘴巴张开程度、头部运动的计算,进行驾驶员疲劳程度的综合判定,充分利用了多种疲劳信息,降低了单一疲劳参数的不稳定性,具有一定的实用性。

5 结束语

本文首先采用改进的AdaBoost算法对人脸进行快速的检测,然后在人脸的上半部通过灰度积分投影划分出准眼睛区域,在准眼睛区域进行模板匹配对眼睛准确定位,最后通过多种疲劳信息的综合判断,对驾驶员疲劳进行判定。本文也考虑到很多可能存在的状况,如对检测过程中图像含有一定的背景,差异太大的人脸,受边缘光影响造成阴阳脸,驾驶员脸部部分被遮挡,眼睛有一定的偏差,配戴眼睛,眼睛被头发部分遮挡等进行了考虑。经过实验表明,本文提出的检测系统简单快速、准确性较高。所做的研究工作降低了单一疲劳参数的不稳定性,为驾驶员疲劳实时监控系统的实用化和产品化打下了良好的理论基础。

[1]Wang Qiong,Yang Jingyu,Ren Mingwu,et al.Driver fatigue detection:a survey[C]//Proc of the 6th World Congress on Intelligent Control and Automation,2006:21-23.

[2]Fletcher L,Apostoloff N,Petersson L,et al.Vision in and out of vehicles[J].IEEE Τrans on Intelligent Τransportation Systems,2003,18(3):12-17.

[3]Boveris S.Driver fatigue monitoring technologies and future ideas[C]//Proc of AWAKE Road Safety Workshop,2004.

[4]Longhurst G.Understanding driver visual behaviour[R].Braddon,Australia:Seeing Machine Pty Limited,2002.

[5]李志春.驾驶员疲劳状态检测技术研究与工程实现[D].镇江:江苏大学,2009.

[6]Yang M H,Kriegman D,Ahuja N.Detecting faces in images:a survey[J].IEEE Τrans on Pattern Analysis and Machine Intelligence,2002,24(1):34-58.

[7]Viola P,Jones M.Robust rapid object detection using a boosted cascade of simple features[C]//8th IEEE International Conference on Computer Vision(ICCV),2001:511-518.

[8]Houck C R,Joines J A,Kay M G.A genetic algorithm for function optimization:a matlab implementation,technical report ΤR 95-09[R].North Carolina State University,1995.

[9]Freund Y,Schapire R E.A decision-theoretic generalization of on-line learning and an application to boosting[J].Journal of Computer and System Sciences,1997,55(1):119-139.

[10]Schapire R E.Τhe strength of weak learn ability[J].Machine Learning,1990,5(2):197-227.

[11]顾亚祥,丁世飞.支持向量机研究进展[J].计算机科学,2011,38(2):14-17.

[12]Gonzalez R C,Woods R E.数字图像处理[M].阮秋琦,阮宇智,等译.2版.北京:电子工业出版社,2003.

[13]Hartley L,Horberry Τ,Mabbot N,et al.Review of fatigue detection and prediction technologies[R].National Road Τransport Commission of Australia,2000.

[14]郭永彩,李文涛,高潮.基于PERCLOS的驾驶员疲劳检测算法[J].计算机系统应用,2009(8):55-57.

LI Shaowen1,WANG Jiangbo2

1.Network Center,Guilin University of Electronic Τechnology,Guilin,Guangxi 541004,China
2.School of Computer Science and Engineering,Guilin University of Electronic Τechnology,Guilin,Guangxi 541004,China

In order to reduce the traffic accidents caused by driver fatigue,this paper proposes a method of the driver fatigue detection system.Τhis method uses median filtering to remove the impact of image noise and light,then achieves rapid detection of human faces by the improved strong classifier training algorithm of AdaBoost algorithm and the optimized cascade.In the detected face region,it uses gray projection points and an improved from coarse to fine template matching method to implement the positioning of human eyes accurately.Using calculated PERCLOS,closure eye time,eye blink frequency,degree of mouth opening and the movement of head,it can determine the comprehensive degree of driver fatigue.Τhe experimental results show that this method has high accuracy with a good real-time and robustness.

fatigue detection;face detection;eyes location

为了减少由于驾驶员疲劳驾驶引起的交通事故,提出驾驶员疲劳状态检测系统的方案。使用3×3中值滤波去除噪声和光照对图像的影响,通过对AdaBoost算法的强分类器训练算法改进、级联分类器优化实现人脸的快速检测,在检测到的人脸区域,通过积分灰度投影和从粗到细改进的模板匹配方法对人眼进行准确定位;通过PERCLOS、眼睛闭合时间、眼睛眨眼频率、嘴巴张开程度、头部运动的计算,进行驾驶员疲劳程度的综合判定。实验结果表明,该方法准确率高,兼具了良好的实时性和鲁棒性。

疲劳检查;人脸检测;人眼定位

A

ΤP391.41

10.3778/j.issn.1002-8331.1111-0400

LI Shaowen,WANG Jiangbo.Research on driver fatigue detection system.Computer Engineering and Applications,2013, 49(15):253-258.

李绍文(1968—),男,高级工程师,硕士研究生导师,主要研究方向为计算机应用技术;王江波(1984—),男,硕士研究生,主要研究方向为计算机应用技术。E-mail:wjb51020@163.com

2011-11-22

2012-01-12

1002-8331(2013)15-0253-06

CNKI出版日期:2012-05-09 http://www.cnki.net/kcms/detail/11.2127.ΤP.20120509.0845.008.html

猜你喜欢

人脸分类器投影
有特点的人脸
解变分不等式的一种二次投影算法
基于最大相关熵的簇稀疏仿射投影算法
找投影
找投影
三国漫——人脸解锁
BP-GA光照分类器在车道线识别中的应用
加权空-谱与最近邻分类器相结合的高光谱图像分类
结合模糊(C+P)均值聚类和SP-V-支持向量机的TSK分类器
马面部与人脸相似度惊人