涂超 赵波
(上海工程技术大学 上海 201600)
据统计,我国由疲劳驾驶造成的交通事故大约占交通事故的25%~30%,由此造成大量人员伤亡[1]。因此,研究出一种能够实时检测疲劳的系统不仅能够减少人员伤亡,还能避免由交通事故所造成的经济损失。
目前疲劳检测的方法的研究大致可以分为三类:基于驾驶员生理信号的检测方法,基于驾驶员驾驶行为及车辆参数信息的检测方法,基于视觉特征的检测方法[2]。基于驾驶员生理信号的监测方法,主要是利用专门的生理传感器检测驾驶员生理信号,通过对这些信号的分析来实现对驾驶员疲劳状态的检测与判别。如牛琳博[3]通过对心率变异性和R-R间期的分析,确定了R-R间期的提取方法,并结合采集的被试心电和行为数据来判断驾驶员是否处于疲劳状态。基于驾驶员行为及车辆参数信息的检测方法,主要是利用车载传感器采集驾驶员在驾驶状态下对方向盘、加速踏板及离合等设备的操作信息和车辆的行驶速度、侧向及横向加速度、车身的横摆角及车辆轨迹等信息。如胡宏宇[4]利用转向盘转角速度时序分析对来对驾驶员的疲劳状况进行判断。基于视觉的检测方法,主要是车载摄像机来监控驾驶员的行为信息,包括闭眼、眨眼、打哈欠、头部姿势等。通过一定的算法对驾驶员眨眼频率、打哈欠等特征进行分析,来对驾驶员疲劳进行检测。
研究表明,利用生理信号检测驾驶员疲劳的方法有非常好准确性和可靠性,但是提取生理信号需要接触性器材,这给驾驶员的驾驶带来较大的不便。而对于基于车辆参数的驾驶员疲劳检测方法,检测速度太慢,无法达到实时性的要求。基于视觉的检测方法,利用摄像头获取驾驶员面部信息,不会对驾驶员驾驶产生影响,并且随着科技的发展,人类在计算机硬件制造工艺的提高以及软件开发水平的快速进步,该方法能够达到实时性的要求。因此,本文使用基于视觉的疲劳检测方法。
为了增加图像中人脸与驾驶环境的对比度,需要对图像进行直方图均衡化处理[5~6]。对于灰度级在[0,L-1]范围内的图像的直方图定义的离散函数为
其中rk是第k级灰度值,nk是图像中灰度值为rk的像素个数。对于灰度图像来说L的值为256。对于一幅灰度图像直方图对应关系如图1所示。
图1 灰度图像直方图
对于离散的灰度级,其均衡变变换为
由于在计算过程中对图像的直方图进行了归一化处理,所以最后均衡化的结果还需要还原直方图的表示范围,对于灰度图像来说,直方图均衡化的公式为
对于图1(a)中的灰度图像进行直方图均衡化的结果如图2所示。
图2 均衡化后的图像与直方图
Haar-like特征也叫矩形特征,是一种常用的特征描述算子,最早由Papageorigiou[7]等用于人脸描述的。基本的Haar-Like特征包括四种形式,如图3所示。对于Haar-Like特征值可以表示为白色区域像素和与黑色区域像素和的差值。
图3 Haar-like特征
对于人脸的一些特征可以用矩形特征简单地描绘,在一幅图像中,眼睛区域所表现出的颜色要比周围的颜色更深,鼻梁区域的颜色要比两侧的浅。对于一张24×24的图像来说,其Haar-Like特征的数量大约有160000个,远远超过了图像本身的像素数,增加了很多的计算量。因此,需要一种简单的运算方法来降低运算量,由此引出了积分图的概念[8~9],构造的积分图如图4所示。
图4 积分图
图中ii(x,y)表示灰色区域内图像中所有像素的和,用f(x,y)表示图像在点(x,y)处的像素值则:
则任意区域D的像素和表示为
Adaboost(Adaptive Boosting)人脸检测算法是由Viola和Jones提出的,它是基于boost算法的改进[10~11]。该算法首先进行弱分类器的训练,然后通过不断更新弱分类器的权重,来构造一个强的分类器,最后通过多个强分类器的级联来构造出分类能力更强的级联分类器。具体算法如下:
2)设置初始化样本权重,当yi=0,w1,i=1/2p;当yi=1,w1,i=1/2q。w1,i表示在循环开始时第i个样本的权重。
3)对t=1,…,T(t表示当前循环次数,T表示循环总次数),样本权重进行归一化处理,公式如下;
4)对于每个特征j,训练一个相应的弱分类器hj,计算当前权重下的分类错误率:
选择错误率εt最小的弱分类器ht。
5)令βt=εt/1-εt更新样本权重:
6)最后将将弱分类器进行组合得到强分类器为
7)然后由多个强分类器构成级联分类器。
SDM(Supervised Descent Method,监 督 下 降法)[12~14]算法是一种逼近函数,从最小二乘函数出发,寻找一个递减的下降函数序列。它提出的背景就是为了更好地解决非线性优化问题,计算机视觉领域的很多问题可转化为优化非线性最小二乘的问题。本文在Adaboost人脸检测算法检测到人脸区域的情况下,使用SDM算法对驾驶员面部进行特征点定位。算法的主要分为两个阶段,训练阶段和测试阶段,算法的具体流程如图5所示。
图5 SDM算法流程
PERCLOS(Percentage of Eyelid Closure Over the Pupil Over time)准则是指单位时间眼睛闭合时间所占的百分比。在20世纪70年代,由Walt Wier⁃wille提出的,主要是通过对眼睛闭合状态来分析驾驶员的疲劳状态[15~16]。主要有P70标准,P80标准和EM标准分别是指一定时间内眼睛睁开面积占瞳孔面积的70%,80%和50%所占时间的百分比。通过大量实验表明P80是三个标准中效果最好的,因此本文选择P80标准来判别驾驶员疲劳,其原理图如图6所示。
图6 PERCLOS原理图
由图6可知,在P80的标准下,眼睛闭合时间所占百分比也就是眼睛闭合程度高于80%所用的时间占眼睛从睁开到闭合再到睁开的时间的百分比,公式如下:
对于视频序列当中的PERCLOS值为
首先通过SDM算法对驾驶员眼部特征点精确定位,定位结果如图7所示。
图7 眼部关键点信息
通过SDM算法可以得到每个眼部关键点的位置(xi,yi),则眼部平均高度为
则眼睛的睁开度为
通过式(12)和(13)实时计算驾驶员的眼部的睁开度,然后通过P80标准进行眼部睁开或闭合判断,当P小于0.8时则表示驾驶员眼睛闭合。通过计算一段时间内的眼睛闭合时间占总时间的比例来判断疲劳状况。本文对15名测试者正常状态和疲劳状态下分别采集600帧视频,实时计算他们的眼部睁开度。其中一名测试者的正常状态和疲劳状态下的眼睛睁开度如图8(a)(b)所示。
图8 疲劳状态测试
最后对测试者两种状态下的PERCLOS进行计算,计算结果如图8(c)所示。从图中可以看出驾驶员在正常状态下的PERCLOS值的范围为[0.08,0.3],当处于疲劳状态时,驾驶员的PERCLOS值的范围为[0.45,0.75],因此,当驾驶员的PERCLOS值超过0.45时,就判断驾驶员处于疲劳状态。
为了验证本文提出的疲劳检测算法的准确度,对该算法进行了实验,软件编写采用Python语言,开发平台为PyCharm 2019,硬件环境采用Intel(R)Core(TM)i5-4200 CPU、GTX750显 卡 和6GB内存。实验使用自己采集的8名测试者的视频图像对算法的准确性记性检测,计算他们的PERCLOS值与实际进行对比,来判断算法的准确性和驾驶员疲劳状况,实验结果如表1所示。
表1 实验结果
本文首先利用Adaboost算法对视频图像中人脸区域进行精确定位,然后利用SDM算法对驾驶员面部特征点进行定位,最后使用眼部的特征点,来计算驾驶员的PERCLOS值,通过分析正常状态和疲劳状态下的PERCLOS值来判断驾驶员是否疲劳。实验结果表明,该算法能够准确地判断出驾驶员的疲劳状态。