APP下载

基于双眼定位与状态判决疲劳检测算法

2018-06-19唐美霞

计算机工程与设计 2018年6期
关键词:分类器驾驶员眼睛

唐美霞,何 勇

(1.南宁职业技术学院 信息工程学院,广西 南宁 530008;2.湖南科技大学 计算机科学与工程学院,湖南 岳阳 414000)

0 引 言

基于计算机视觉方式检测驾驶员疲劳状态的主要依据是检测驾驶员的双眼状态,如果驾驶员两个眼睛都已经闭合,那么说明驾驶员已经处理疲劳状态[1-7]。譬如,文献[8]提出了一种非侵入式驾驶员疲劳状态检测方法。首先,采用AdaBoost算法检测到脸部区域。然后,基于脸部几何形状来定位眼睛的感兴趣区域。在这个区域,通过径向对称变换精确定位眼睛瞳孔。通过主成分分析训练3个特征空间来识别眼睛状态。但该方法在定位眼睛的感兴趣区域时精度不高,后续定位眼睛瞳孔所采用的径向对称变换对于闭眼状态定位效果差。文献[9]提出一种改进的眼睛状态检测方法,利用“参考白”算法对原始帧图像做光照补偿处理,基于肤色特征检测出人脸区域,利用积分投影法将人脸和眼睛分割出来,结合眉毛和眼睫毛之间距离的变化、眼睛区域黑色像素点的个数变化这两个参数对眼睛的状态做出判断。该方法尽管效率很高,但是适应性较差。首先是采用肤色特征检测的人脸区域可靠度较低,尤其是驾驶员头发稍长时会造成面部上半部确实太多,眼睛定位很困难。而且积分投影方法定位眼睛区域的可靠性也不高,受黑框眼镜以及面部姿态的影响较大。而且特征的鲁棒性弱,易受分割误差、尺度等影响。文献[5]为了解决头部多位置眼睛精确定位的问题,提出了一种基于肤色和纹理特征的算法,根据皮肤颜色以及眼睛和其它部位之间的灰度差异检测脸部,采用二值化和形态学图像处理方法,找到眼睛候选区域。通过计算候选区域的纹理特征值来检测眼睛。用椭圆拟合的方法来检查双眼的真实性,并测量眼睛的开放程度,从而判断驾驶员是否疲劳。该方法定位眼睛的精度同样受驾驶员发型的影响,而且采用椭圆拟合方法检测闭眼状态的双眼的精确度较低。

针对现有方法定位眼睛精度不高、特征鲁棒性不强的问题,本文提出了一种非侵入方式驾驶员疲劳状态检测方法,采用一种时空约束的Adaboost方法从视频中快速检测驾驶员面部区域,结合先验知识从面部区域中定位双眼的可能区域,接着采用大数据Haar-like特征和Adaboost分类器快速、精确定位双眼区域。在此基础上,采用卷积神经网络的LeNet5网络架构训练眼睛状态分类器和检测双眼状态,依据双眼是否闭合的特性判别驾驶员是否疲劳。其中,本文采用Haar-like特征和Adaboost分类器在可能双眼区域定位眼睛位置,相对于现有的采用投影、径向对称变换、椭圆拟合等方法而言,双眼定位精度可以得到明显提高。

1 面向视频的双眼区域快速定位

本文首先选择文献[10]所述的时空约束的Adaboost方法从驾驶员视频中快速可靠定位面部区域,该方法不需要面部的肤色信息,受光照以及驾驶员发型的影响小。而且该方法结合了相邻帧之间的相关性以及驾驶员面部活动的先验知识,检测面部区域的效率和精确度都很高。然后,本文依据双眼在面部区域分布的先验知识,确定双眼的大致区域,该区域范围大,肯定可以包含双眼区域,但是包含的背景区域也很多。接着,我们在该区域上采用Haar-like特征和Adaboost分类器检测精确的双眼区域,由于双眼的大致区域相对于面部整个区域来说尺寸很小,而且排除了面部其它区域的干扰,因此双眼精确检测的效率和精度都比较高。

1.1 面部快速检测

文献[10]指出,在驾驶员疲劳检测系统中,驾驶员面部有两个先验条件:①在驾驶过程中,相邻视频帧检面部的位置变化不大;②驾驶员面部视频中最多只有一张脸。

基于这两个先验条件,文献[10]提出了一种时空约束的Adaboost方法。首先,根据前一帧计算当前视频帧中驾驶员脸部的可能位置。其次,设计了空间限制策略来抑制Adaboost方法的检测窗口和尺度,从而减少了人脸检测的时间消耗和误检。最后,设计面部知识限制策略,用于确认Adaboost方法检测到的面部。流程如图1所示。相对于传统的基于Haar-like和Adaboost的人脸检测方法,该方法的主要贡献在于设计了3个限制策略:

(1)时间限制策略。首先,执行帧差分法来检测移动目标;然后,根据前一帧计算当前帧中的面部的可能位置;最后,根据脸部的可能位置来限制Adaboost方法的检测窗口,以避免在非面部窗口中的脸部检测的时间消耗和误检。

(2)空间限制策略。Adaboost方法的检测规模根据前一帧和已检测到的面部大小进行限制,以避免在非脸部尺度上的脸部检测的时间消耗和虚假检测。

(3)知识限制策略。通过Adaboost方法检测到的子窗口可以根据面部知识进行确认,以减少脸部检测的误检率。如果子窗口符合知识限制,可以根据前期检测结果立即结束脸部检测过程,以减少时间消耗。

时空限制策略的详细过程描述如下:

步骤1 寻找面部的可能位置。

令P0(P0x,P0y)为前一帧中f0w×f0h大小的检测面部的中心位置。如果前一帧中没有检测到任何面部,则P0x=P0y=-1,f0w=f0h=0。当前帧中可能的位置P(Px,Py)可以计算如下:

(1)采用三帧差分法检测当前帧中的移动目标,并记录所有检测到的目标的大小和位置。

(2)找到面积最大的目标区域S,记中心位置为P1。这个目标比其它目标更有可能成为一个面部区域,因为真正的面部在驾驶员视频中占据较大的面积。

(3)由于驾驶员的面部有时候不会移动或移动,所以当S

如果Px=Py=-1,或f0w=f0h=0,则不限制Adaboost方法的检测窗口和比例尺度,转到步骤4;否则,转到步骤2。

步骤2 限制Adaboost方法的检测尺度。

根据先验条件1,两个连续帧之间的面部大小的变化不大,所以尺度限制策略可以描述为

(1)

其中,(MaxW,MaxH)是Adaboost方法的最大尺度(MinW,MinH)是Adaboost方法的最小尺度,k1和k2是系数。其中,k1=1.5,k2=0.5。

步骤3 限制Adaboost方法的检测窗口。

限制策略可以描述如下

(2)

其中,(x,y)是Adaboost方法的检测窗口中的任一像素,k3和k4是系数。其中,k3=k4=1.0。

步骤4 更新参数。

如果在当前帧中检测到真实人脸,尺寸为fw×fh,中心为P(Px,Py),则更新参数应如下:P0=P、f0w=fw、f0h=fh。

图1 面部检测流程

1.2 双眼区域定位

获取视频中的面部区域以后,本文进一步定位双眼区域,最终依据双眼状态辨别驾驶员是否疲劳。双眼区域定位主要有3种方法,一是依据面部图像分割结果和五官的先验分布知识,定位双眼区域。该方法效率很高,实现也很方便,但存在的问题是受分割误差影响大,譬如,如果光照不均匀导致面部分割错误,或者黑框眼镜等干扰导致分割中存在干扰目标块时,双眼区域的定位可能完全错误,如定位到眉毛或黑框眼镜区域。二是依据霍夫圆或者椭圆拟合检测瞳孔位置,间接实现双眼区域的定位。该方法效率也较高,但对于驾驶员疲劳检测应用而言是不适用的,因为驾驶员疲劳的主要特征是眼睛闭合,这样,瞳孔就不明显。而且,当带眼镜时可能由于反光等因素影响,导致瞳孔不明显。三是基于纹理特征定位双眼区域。目前应用效果较好的是基于Haar-like特征和Adaboost分类器来检测眼睛区域。但该方法效率偏低,且虚检较多。考虑到前面我们已经检测到面部区域,因此我们可以依据眼睛分布的先验知识来缩小眼睛检测的范围,这样可以大幅提高运算效率,而且大幅降低虚检现象。具体的实现方法是:

步骤1 采用双线性插值方法,将上一小节检测到的面部区域图像尺寸变换为256×256。

步骤2 依据眼睛分布的先验知识,从面部图像中切分双眼的可能区域图像。记(xl,yl,wl,hl)和(xr,yr,wr,hr)分别表示左眼和右眼的可能的矩形框区域,依据先验知识,有

(3)

步骤3 分别在左眼和右眼的可能矩形框区域(xl,yl,wl,hl)和(xr,yr,wr,hr)上进行眼睛检测,寻找真实的眼睛区域。本文采用基于Haar-like特征和Adaboost分类器的方法,具体是使用OpenCV中自带的眼睛检测分类器来实现这一功能。

步骤4 依据检测到的双眼真实区域,从面部图像中分别裁剪左眼区域图像和右眼区域图像,并采用双线性插值方法进行尺度变换,变换后的眼睛区域尺寸为64×32。记变换后左眼图像为Sl,右眼图像为Sr。

2 基于卷积神经网络的双眼状态检测

对于变换后的左眼和右眼图像,分别采用卷积神经网络判别眼睛状态。这里,首先需要训练眼睛状态分类器,采用的是卷积神经网络常用的LeNet5网络架构[11],如图2所示。该网络架构主要包括5层,即3个卷积层和两个抽样层。具体实现是使用Caffe工具集中的LeNet5网络。

图2 LeNet5网络结构

训练时需要构建正负样本数据集。本文要建立的是眼睛状态分类器,眼睛有两种状态,一种是睁开状态,一种是闭合状态。我们要检测的是闭合状态的眼睛。因此,正样本集由闭合的眼睛图像构成,负样本集由睁开的眼睛图像构成。由于目前没有公开的眼睛状态数据集,因此我们自己构建数据集。我们拍摄了50个志愿者的共1000幅眼睛闭合面部图像,从中裁剪出2000幅闭合眼睛图像(不区分左右眼),构成正样本数据集。同时从ORL、YALE人脸数据集中裁剪出6000幅睁开眼睛图像(不区分左右眼),构成负样本数据集。其中,图像尺寸都变换为64×32。部分样本如图3所示。然后,使用LeNet5网络结构对数据集进行训练,构建眼睛状态分类器。测试时,将图像输入给分类器,即可输出眼睛状态,输出值为1是表示眼睛是闭合状态,否则表示眼睛是睁开状态。记左眼图像Sl的分类输出为vl,右眼图像Sr的分类输出为vr。

图3 部分样本图像

3 驾驶员疲劳状态检测

驾驶员是否疲劳可以通过检测两眼是否闭合来判决。结合前两节的阐述,本文所述的驾驶员疲劳状态检测方法的实现流程如图4所示。首先,从视频中快速定位面部区域位置,然后精细检测双眼区域位置,得到尺寸规范化的双眼图像。接着,分别将双眼图像送入已经训练好的神经网络分类器,输出双眼状态。如果某帧图像中输出两个眼睛都是闭合的结果,那么我们认为该帧图像中的驾驶员存在疲劳状态。否则,不存在疲劳状态。

图4 驾驶员疲劳状态检测实现流程

4 仿真实验

为了验证算法性能,本文设计如下仿真实验。

首先,建立算法验证所需的大数据集。由于计算机视觉领域目前还没有公开的测试数据集。本文考虑自建构建大数据集。实现方法是:拍摄50个志愿者模拟的驾驶视频(仿真实验时车辆是静止的),每一个志愿者拍摄两个视频片段,一个片段中双眼始终睁开,另一个片段中双眼始终闭合。将双眼睁开的视频片段放入负样本集,将双眼闭合的视频片段放入正样本集。视频片段的时长为2 s~4 s,视频帧率为25 fps,视频分辨率为720×576。视频中面部区域所占整幅图像的面积超过50%。后续实验都是在该数据集上进行的。

其次,制定算法测试的评价指标。本文从驾驶员疲劳状态检测和可靠性和效率两个方面综合考虑,采用检测正确率和检测帧率两个指标进行性能评价。检测正确率是指检测结果正确的视频片段数量所占视频片段总数的比值。考虑到视频与图像不同,难以做到每帧图像都能得到一个稳定正确的结果。因此,通常采用滤波的方法对视频中多帧检测结果进行滤波。本文所指的检测结果正确的含义是,检测结果正确的视频帧数量超过了视频中帧数的80%。譬如,对于正样本中某一个视频,假设视频帧数为100,算法对每一帧的输出结果中如果得出的驾驶员疲劳的次数超过80次,则我们认为算法对该视频片段的检测结果是正确的。同样地,对于负样本中某一个视频,仍假设视频帧数为100,算法对每一帧的输出结果中如果得出的驾驶员非疲劳的次数超过80次,则我们认为算法对该视频片段的检测结果是正确的。检测帧率的计算方法是:每一个视频片段检测所耗费的总时间除以视频片段所包含的帧数。在统计时,检测帧率指标统计所有视频检测帧率的平均值。实验所用的计算机性能参数为:Intel I7 CPU、DDR3 16 G RAM。计算机安装的操作系统为:Windows 7 64 bits。算法运行的软件开发环境为:Visual Studio 2013。

接下来进行仿真实验,结合本文方法的两个优势,首先测试眼睛定位正确率,然后测试疲劳状态检测的正确率和检测帧率。参与测试的除了本文方法外,还有文献[5,8,9]所述方法,这3种方法与本文方法一样,都是基于眼睛状态进行疲劳状态检测的,所以具有可对比性。

4.1 眼睛定位实验

首先测试定位正确率,方法是将各种方法定位的眼睛区域图像保存下来,然后人工核对保存的图像中是否包含一只眼睛,如果包含则认为该图像定位正确。最后,统计定位正确的图像数量,然后除以数据集中的眼睛总数,作为眼睛定位正确率。该值越大说明定位效果越好。图5显示了4种方法的定位结果,很明显,本文方法的定位结果优于其它3种方法。

图5 眼睛定位正确率对比

4.2 疲劳状态检测实验

表1给出了4种方法的疲劳状态检测性能对比结果。首先从检测正确率来分析,本文方法明显高于其它3种方法,高出其它方法17%以上。这不仅是因为本文方法在眼睛定位阶段的定位正确率明显高于其它方法,而且还因为本文方法采用深度学习方法进行特征的提取和分类,特征鲁棒性更强,尤其是相对于采用几何特征的眼睛状态判别方法而言,眼睛状态分类的正确率得到明显提高。接着从检测帧率来分析,本文方法和检测帧率与文献[8]相当,高于文献[10],但低于文献[9]。综合考虑两个指标,本文方法明显优于文献[8,10],尽管检测帧率低于文献[9],但检测正确率高出文献[9]45%。因此,综合评价,本文方法是一种快速、可靠的非侵入式驾驶员疲劳检测方法。

表1 疲劳状态检测性能对比

5 结束语

非侵入式的驾驶员疲劳检测是目前驾驶员疲劳检测系统研究的重要方向。本文针对现有方法在眼睛定位精度不高和特征鲁棒性不强两个的问题,提出一种非侵入方式驾驶员疲劳状态检测方法。主要创新工作之一是采用一种时空约束Adaboost方法从视频中快速检测驾驶员面部区域,采用Haar-like特征和Adaboost分类器在双眼可能区域快速、精确定位双眼区域,提高双眼定位精度。主要创新工作之二是采用卷积神经网络的LeNet5网络架构训练眼睛状态分类器和检测双眼状态,提高特征的鲁棒性和分类的可靠性。实验结果也表明了本文方法在眼睛定位和眼睛状态检测方面的优势。但本文方法的检测帧率还没有达到实时,下一步还需完善。

参考文献:

[1]Jiao Y,Peng Y,Lu B L,et al.Recognizing slow eye movement for driver fatigue detection with machine learning approach[C]//International Joint Conference on Neural Networks.IEEE,2014:4035-4041.

[3]JIANG Jianchun,JIANG Li,TANG Hui,et al.Detection of driver fatigue based on pulse IMF frequency characteristics and SVDD[J].Journal of Computer Science,2016,43(7):314-318(in Chinese).[蒋建春,蒋丽,唐慧,等.基于脉搏IMF时频特征和SVDD的驾驶员疲劳检测[J].计算机科学,2016,43(7):314-318.]

[4]Horng W B,Chen C Y,Peng J W,et al.Improvements of driver fatigue detection system based on eye tracking and dynamic template matching[J].Wseas Transactions on Information Science & Applications,2012,9(1):14-23.

[5]Zhang W,Wang Z,Li Y.Eye localization and state analysis for driver fatigue detection[J].Jornal of Hongqng Nvry,2013,36(1):22-28.

[6]BAI Zhonghao,JIAO Yinghao,BAI Fanghua.Driver fatigue detection based on active shape model and fuzzy reasoning[J].Chinese Journal of Instrument and Meters,2015,36(4):768-775(in Chinese).[白中浩,焦英豪,白芳华.基于主动形状模型及模糊推理的驾驶疲劳检测[J].仪器仪表学报,2015,36(4):768-775.]

[7]Fu R,Wang H,Zhao W.Dynamic driver fatigue detection using hidden Markov model in real driving condition[J].Expert Systems with Applications,2016,63(C):397-411.

[8]Gao X Y,Zhang Y F,Zheng W L,et al.Evaluating driving fatigue detection algorithms using eye tracking glasses[C]//International IEEE/EMBS Conference on Neural Engineering.IEEE,2015:767-770.

[9]ZHAO Xiaolin,WANG Shigang,JIANG Xiuhong,et al.Driver fatigue detection based on human eye condition[J].Journal of Jilin University (Information Science Edition),2015,33(4):449-453(in Chinese).[赵晓琳,王世刚,姜秀红,等.基于人眼状态的驾驶员疲劳检测[J].吉林大学学报(信息科学版),2015,33(4):449-453.]

[10]Liu T,Xie J,Yan W,et al.Driver’s face detection using space-time restrained Adaboost method[J].Ksii Transactions on Internet & Information Systems,2012,6(9):2341-2350.

[11]Yu N,Jiao P,Zheng Y.Handwritten digits recognition base on improved LeNet5[C]//Control and Decision Conference.IEEE,2015:4871-4875.

猜你喜欢

分类器驾驶员眼睛
基于高速公路的驾驶员换道意图识别
驾驶员安全带识别方法综述
加权空-谱与最近邻分类器相结合的高光谱图像分类
结合模糊(C+P)均值聚类和SP-V-支持向量机的TSK分类器
我有一双探索的眼睛
眼睛在前
起步前环顾四周是车辆驾驶员的义务
为什么眼睛不怕冷?
眼睛真实太重要了
基于LLE降维和BP_Adaboost分类器的GIS局部放电模式识别