靳冰凌,张 震,张子耀
(上海大学 机电工程与自动化学院,上海 200072)
汽车是人们日常生活中必不可少的交通工具和人类社会物质文明的标志。与此同时,交通安全隐患不断增加,交通事故频发,无证驾驶、酒后驾驶、疲劳驾驶等,都严重威胁到人类的生命安全。据交通部门统计,全国发生的交通事故大约40%左右是由于疲劳驾驶所导致的。因此,研究一种实时的疲劳驾驶检测系统不但能减少人员伤亡,还能避免因此产生的经济损失。
目前,常见的驾驶员疲劳检测方法总体上可分为三类:基于驾驶员生理参数的判断方法[1]、基于车辆行驶参数的判断方法[2]以及基于图像处理的判断方法[3]。其中,前两种方法由于其可操作性差、准确率低等原因,难以在普通车辆内推广使用。而随着计算机视觉与图像处理技术的发展,基于图像处理的方法由于其操作简单、成本低,对驾驶员的正常驾驶几乎不会产生影响等优点,成为目前研究的热点。
方向盘监视装置S.A.M(steering attention monitor)是美国Electronic Safety Products公司开发的一种监测方向盘非正常运动的传感器装置[4]。当驾驶员正常驾驶时装置不报警,若方向盘持续4秒不运动,S.
A.M装置就会发出警报声,直到方向盘继续正常运动为止。装置被固定在车内录音机旁,通过方向盘下安装的一条磁性带检测方向盘的运动。基于视觉的驾驶员疲劳检测技术是利用图像处理方法对获取的车内图像进行分类识别,当驾驶员疲劳时会出现眨眼频率变快、眼睛睁开幅度变小、闭眼时间增加,有的还会出现频繁点头、打哈欠等特征[5-6]。美国ASCI公司研制的MINDS(micronod detect system)是一种通过检测点头频率判断驾驶员疲劳程度的疲劳检测系统[7]。该产品利用传感器对驾驶员的头部位置进行定位,通过头部位置的变化得到点头频率,从而实现疲劳检测。美国卡内基梅隆大学的Richard Grace测量PERCLOS特征以决定目标是否疲劳,分别使用850纳米和950纳米的红外线作为光源得到两幅图像,根据视网膜对不同波长光的反射率不同得到驾驶员瞳孔位置,通过计算眼睛的高度来判断其睁开闭合状态,进而求出PERCLOS特征。美国内华达州立大学Haisong Gu在可变光的条件下利用红外传感器初步确定瞳孔位置,使用Gabor算子提取眼睛特征并最终得到驾驶员的疲劳程度[8]。国内驾驶员疲劳检测研究主要集中在大学和科研机构,刘扬等通过对灰度视频序列进行图像二值化实现了人眼的快速定位[9],但该方法仅研究了白天自然光照条件下的眼睛定位,当驾驶环境存在光照不均匀等因素干扰时,会发生一定的误判现象[10]。
文中的驾驶员疲劳检测主要由三个环节组成。首先通过眼睛和嘴唇的检测方法对图像中人眼和嘴唇的位置进行定位,然后提取眨眼频率、哈欠频率和PERCLOS等疲劳特征,最后根据疲劳特征通过分类器判断驾驶员的疲劳状态[11]。
由于车内环境复杂,驾驶员实时视频图像的采集容易受到光照的影响,难以精确定位眼睛区域,所以需要对采集到的视频图像进行预处理,改善图像质量,提高眼睛定位的准确率。
直方图均衡化[12]是一种以累积分布函数为基础的直方图修正方法,它通过拉伸图像像素强度分布范围使像素灰度的概率密度保持均匀,达到增强图像对比度的效果。
由于摄像机采集到的图像为彩色图像,RGB三个分量均受光照影响较大,而HSI(色调、饱和度和亮度)颜色空间中三个分量的相关性很小,色调H和饱和度S受光照影响很小,所以只需要对图像的亮度I分量进行直方图均衡化即可。图1显示了图像在光照不均匀情况下用直方图均衡化方法的处理效果及其直方图信息。
图1 直方图均衡化效果
人脸检测是眼睛和嘴唇区域定位的基础,由于驾驶环境中背景复杂多变,其中可能存在符合眼睛和嘴唇特征的图像,容易造成误判。同时,根据人脸检测结果和五官分布规则可以对眼睛和嘴唇区域进行粗定位,因此,首先进行人脸检测,可以缩小眼睛和嘴巴区域的定位范围,既能提高检测的准确性,又可以减少背景的影响。
人脸检测是指确定输入图像中所有人脸的位置、大小和姿态的过程。目前常用的人脸检测方法可以分为四类:基于知识的方法、基于模板匹配的方法、基于统计学的方法和基于机器学习的方法。AdaBoost算法是一种兼具检测精度和检测速度的基于机器学习的分类方法[13],该算法采用Haar特征作为弱分类器,在权重不断变化的T轮迭代学习中,每次选取一个最具有区别样本类别能力的Haar特征作为弱分类器,将T个弱分类器级联组成最终的强分类器。图2显示了AdaBoost算法进行人脸检测的效果。
利用AdaBoost算法检测出人脸后,需要定位眼睛区域。眼睛定位的方法有多种,例如霍夫变换法、灰度积分投影法和机器学习法等。其中,霍夫变换法检测人脸上的圆形区域,从而定位到瞳孔位置,但当眼睛处于闭合状态或瞳孔形状不规则时,该方法可能由于无法检测到圆而出现判断错误。灰度积分投影法根据人脸像素的积分投影,在极值位置定位眼睛区域,但这种方法适用于静态正面的眼睛检测,当有小角度转动时误差很大[14]。
文中采用机器学习法,利用AdaBoost算法训练人眼检测分类器,实现眼部区域的精确定位。首先根据五官的位置分布,可以粗定位眼睛和嘴部的大致区域,将眼睛检测的区域缩小为人脸高度中部1/3区域。然后通过大量人脸样本进行眼睛区域定位训练,最后使用训练好的分类器对粗定位区域进行检测,可以实现对眼睛的快速定位,从而提高系统的检测速度与检测精度,降低误检率。图2为不同实验人员的眼睛区域定位结果。
图2 眼睛区域定位结果
疲劳状态具有相当的隐蔽性,所以需要一些特征参数对疲劳程度进行评定。据了解,在面部信息中,驾驶员的疲劳状态主要表现在眼部和嘴部区域,如打哈欠、眨眼、眼睛发涩、点头等特征。下面介绍一些常用的疲劳特征。
(1)眨眼频率。
眨眼是指眼睛从睁开到闭合再睁开的过程。清醒状态下人一分钟内平均眨眼次数约为10~15次,当处于疲劳状态时眨眼频率会明显加快。
(2)眼睛平均闭合速度。
平均闭合速度指的是眼睛从完全睁开到完全闭合所经历的时间。研究表明,清醒的人和疲劳的人眼皮闭合速度有明显区别,正常人眼闭合时间只需0.17 s,疲劳时可达到1.68 s。
(3)PERCLOS。
PERCLOS特征指的是在单位时间里眼睛闭合时间所占的比例。实践证明,单位时间内眼睛闭合时间的长短和驾驶员疲劳程度有着密切的关系,眼睛闭合时间越长,疲劳程度越严重。文中实验取一分钟内眼睛闭合的帧数与一分钟视频总帧数的比值近似求得PERCLOS特征值。
(4)打哈欠频率。
一般来说,在疲劳或开始疲劳时人的面部肌肉通常处于无表情状态,并且常常伴随着频繁的哈欠动作。因此,可以检测一分钟内驾驶员打哈欠的频率,将该值作为疲劳程度评定的特征值之一。
(5)点头频率。
疲劳程度严重时人常常会打盹,即使没有打盹,也会习惯性将头低下,又频繁抬起,这实际上也形成了一种头部的上下往复运动。点头频率特征值可以通过检测人脸在图像中的位置随时间的变化规律得到。
另外,诸如眼球运动,视线分布范围和视线跳动频率等特征也可作为判断疲劳状态的依据。
在上述眼部疲劳特征中,判断眼睛的开闭状态是提取特征值的关键。在以往的疲劳检测研究中,常用的眼睛状态识别方法主要有Hough查找圆、模板匹配、计算眼睑曲率和水平投影等[15]。其中Hough查找圆法通过Hough变换检测眼睛图像中是否有圆来判断眼睛状态;模板匹配法建立眼睛各状态的模板,计算眼睛图像与各模板的匹配度;计算眼睑曲率法根据人眼在开、闭状态时的曲率差异判断眼睛状态;水平投影法根据眼睛区域水平投影的灰度值进行判断。这些方法都或多或少地存在诸如正确率低、实现困难等缺点。
文中采用最大类间方差法(Otsu)获取自适应阈值对眼部图像进行二值化,将上眼睑和瞳孔区域分割出来,计算该区域像素点个数与眼睛区域像素点总个数的比值,由于闭眼时上眼睑和瞳孔区域面积明显减小,因此可根据比值判断眼睛的开闭状态。算法的具体流程如下:
(1)对于第一帧图像,检测人脸和人眼,并根据Otsu算法获取眼睛区域二值化阈值T;
(2)对于后续人眼图像,根据阈值对图像进行二值化处理;
(3)统计眼部图像像素总个数N;
(4)统计二值化后图像最大联通区域像素个数n;
(5)计算ratio=n/N,根据阈值判断当前帧的眼睛开闭状态。
图3显示了对一帧图像进行眼睛状态判断的整体流程。其中T为由Otsu算法得到的图像分割阈值。
图3 眼睛状态判断流程
2.3.1 嘴唇区域分割
要统计嘴部疲劳特征值,首先要找到嘴巴的位置。根据第二章的描述,人眼的位置是已知的,可以先根据人脸的器官分布,对嘴部区域粗定位,约在人脸下部1/3处两眼之间的位置。
接着要定位嘴唇的确切位置,从而得到嘴巴区域的宽和高,利用宽高比判断嘴巴的开闭状态。由于粗定位的嘴部区域图像中主要包含唇色和肤色,因此可以利用唇色和肤色之间的颜色差异定位嘴唇位置。
唇色和肤色像素均满足红色分量像素值大于蓝色和绿色分量像素值,但在唇色中红色分量的像素值所占的比例更大。即唇色和肤色的红色分量像素值没有太大差别,但肤色中蓝色和绿色分量像素值要明显小于唇色。根据上述颜色差异以及嘴部区域中唇色所占比例大约为20%,文中采用自适应阈值分割方法[16]将嘴唇区域分割出来,具体算法如下,其中R、G、B分别表示图像中R、G、B各通道的像素值:
(1)令rg=R-G,rb=R-B,threslip=0;
(2)统计rg>threslip && rb>threslip的像素个数pixelnum和总像素个数N;
(3)若pro=pixelnum/N>20%,则令threslip++,否则退出循环;
(4)重复步骤2~4。
根据该算法分割出嘴唇区域后,对分割后的图像进行形态学滤波等操作,滤去部分噪声点,即可得到完整的嘴唇区域图像。图4显示了嘴唇区域分割效果,可看到嘴唇区域被准确地分割出来[17-18]。
图4 嘴唇区域分割
2.3.2 嘴巴状态判断
由图4可以看出,在打哈欠过程中嘴部区域宽高比变化明显,在提取到嘴唇区域图像后,可计算出上下嘴唇的高度和左右嘴角的宽度,求出嘴部区域宽高比,由此判断嘴巴开闭状态。图5显示了眼部和嘴部开闭状态判定依据。
图5 眼部和嘴部开闭状态判定
为了验证算法的有效性,进行了基于视觉的驾驶员疲劳特征提取实验。
通过多个实验人员拍摄多段实验视频,视频中分别进行眨眼、打哈欠等动作,利用文中方法提取上文所述的眨眼频率、眼睛平均闭合速度、PERCLOS和打哈欠频率等疲劳特征,其中眨眼频率通过统计一分钟内眨眼次数得到,眼睛平均闭合速度通过统计一分钟内每次眨眼过程中眼睛闭合帧数得到,PERCLOS特征由一分钟内眼睛闭合的帧数与视频总帧数的比值得到。实验在Inter Core i5 CPU 1.6 GHz和内存4 G的PC机上进行。表1展示了五个视频序列的实验结果,可以看出,该方法可以准确判断出视频中人员眨眼和打哈欠的次数,从而提取得到上述疲劳特征值。
表1 疲劳特征提取实验结果
讨论了基于视觉的驾驶员疲劳特征提取方法,设计并实现了驾驶员疲劳特征提取的整体流程,其中包括图像预处理、人脸检测、眼睛定位、眼睛和嘴巴开闭状态判断等。该方法可以满足全天候检测的要求,同时具有光照自适应、非接触性、实时性等优点。实验结果表明,该算法可以在光照等自然环境变化的情况下准确提取出疲劳特征值。