一种基于人眼识别的疲劳驾驶检测算法
2021-11-03刘帝黄妍妍孟雪
刘帝 黄妍妍 孟雪
(中国石油天然气油运输公司 北京市 101300)
1 简介
疲劳驾驶是导致交通事故发生的主要原因之一。[3]因此如何及时检测驾驶员是否处于疲劳状态成为了近年来的研究重点,其中最有效的当属基于面部特征的疲劳检测算法。因为眼睛的开闭程度可以直接反应人的疲劳状态,所以人们可以通过图像处理算法检测驾驶员的疲劳状态。[4]
早期的人眼定位算法有:灰度投影算法,边缘提取算法,模板匹配算法等。但是这些算法在实际应用时都存在一些问题。例如:边缘提取算法处理时间过长,无法满足实时处理的需求。可变形模板算法虽然算法本身实现简单,但是算法计算量过大。另外改进的Adaboost 算法,只有在训练好的样本情况下才能达到较高的识别率,非训练样本识别率成功率极低。
目前人眼识别算法主要基于机器分类学习算法和图像分析算法。但现有一些算法依并不完善。例如:使用RBF 神经网路的人眼识别算法需要大量的人眼模板数据用于训练模型,并且识别过程中的运算量也非常大。还有一种同时使用图像二值预测算法和霍夫变换的检测算法,这种算法识别精度低并且检测结果受图像采集角度影响。
2 算法总览
本算法由五部组成,图像预处理,面部检测,特定区域提取,眼睛位置和状态分析。如图1 所示。
图1:算法总览图
因为受车内空间的限制,设备采集的图像容易存在照度不均的问题。所以为了提高分析准确度,首先需要使用直方图均衡算法对图片进行处理。在方程式中图像的灰度范围为Rk到Sk。
其中,MN 代表图像的总像素;L 代表灰度级数,Nj代表一个灰度为Rk图像的像素数量
3 面部检测以及面部图像区域划分
3.1 面部检测
本算法使用的面部检测算法基于皮肤颜色检测。该检测算法运算量小,可以快速完成检测。另外,该检测算法受面部方向与面部表情影响小。所以使用该算法作为面部检测算法。
因为YCbCr 色域可以直接反应特定的颜色簇,所以我们首先需要将图像转化为YCbCr 色域。从G.Kukharev 和 A.Novosielsk提出的算法中可知:如果某个区域Y,Cb,Cr 值分别满足Y>80,85 确定人脸位置之后,接下来需要判断图像中是否存在耳部区域。如果在采集的图像中脸部区域右侧存在一个与其相连的区域,则可认定该区域为疑似耳部区域。则我们首先需要计算出该区域每一列含有的白色像素数量。如果白色像素数量符合以下两个条件则可以认定该区域为耳部区域。 (1)如果疑似耳部区域的白色像素数大于0.3X(X 为面部区域的宽度)。 (2)疑似耳部区域的投影为连续区域。 检测嘴部区域最有效方法之一为:计算YIQ 色域中的Q(正交相位)。因为相比RGB,YIQ 的Q 部分可以更好的对黄色色域、绿色色域、紫色色域进行独立描述。RGB 与YIQ 转换方法如下: 通过多次试验测试,我们发现当把下限参数设置为最大值的70%时,检测准确度最高。 确定嘴巴和耳朵的位置之后,我们可以将人脸图像划分为四个区域。人脸的对称轴是一条穿过嘴唇中点的竖直直线,我们将左、右嘴角的坐标设为(X1,Y1),(X2,Y2)。所以嘴唇的斜率为 K =(y2-y1)/ (x2-x1),由K 可得人脸对称轴的斜率为1/k。同样通过耳部中心点位置,可以将面部划分为上、下两部分。最终,面部被分为如图2 所示的四部分。 图2:驾驶员面部划分 表1:算法对比 图片中驾驶员眼睛处于图片上部区域。当驾驶员处于驾驶状态时双眼状态相同。因此通过检测单眼状态即可获取驾驶员的驾驶状态,所以我们最终选择右眼所处的左上部区域为检测区域。 对图像分割完成后,左上角区域被提取出来。接下来使用Otsu算法将左上角图像转化为二值图。通过基本形态信息对区域中的相连点进行分析后,可以将非眼部区域的连续点剔除。接下来通过椭圆曲线拟合算法对剩余相连点进行处理,我们可以进一步定位右眼位置。 人类眼球的形状近似于一个椭圆形,所以可以通过椭圆曲线拟合确定人眼在剩余的相连点中的具体位置。 通过计算白色区块的面积、型心、二阶矩可以得出相应的椭圆参数。在二值图中,每个像素点坐标使用坐标(R,C)表示。若在一个面积为R 的区域中有一白色区块,这个白色区块的面积可以表示为该区块的形心坐标为二阶线性矩为:二阶柱矩为二阶混合矩为:椭圆的两个对称轴的二阶矩阵公式为: 通过以上公式,我们可以得到白色区块椭圆参数。当白色区块近似于一个椭圆时,我们可以计算出准确的椭圆参数。然而,当白色区块并不近似于一个椭圆形时,计算出的椭圆参数就会存在一定的偏差。这里我们定义椭圆度γ,用以表示偏差。 当γ 越近似1 时,白色区块的形状就越近似椭圆形。 通过实验结果可知,人眼可以通过区域的椭圆属性来定义。规则如下:当γ 小于1.5 时,长短对称轴的比例小于2.5。 眼睛的状态即为眼睛的开闭程度,该值直观反映了眼睛区域的面积。在二值图中,首先,我们可以得到白色区块面积“S”。则该区域对应的椭圆区域面积S 为:S=πab 这里a,b 分别代表长短对称轴。通过它们,眼睛的开闭程度可以表示为 本文中所有实验图片来自于真实的车辆环境。被试者被要求在该过程中模拟驾驶状态。摄像头置于车内的,以固定的角度对准被试者。 使用不同算法计算出的眼睛位置准确度对比如表1 所示,通过对比可知,本文提出的算法不但耗时更少,而且受摄像角度影响较少。最终得到的结果更为精确而且算法鲁棒性更好。 本文提出了一种,基于人眼识别的疲劳驾驶检测算法。该算法首先对采集到的图像进行预处理。然后使用肤色模型识别驾驶员的面部区域。接下来使用嘴部、耳部位置信息,对面部图片进行划分,提取左上部区域作为识别区。最后使用椭圆曲线拟合方法确定右眼的准确位置并判断其状态。 通过实验得知,本算法基本不受驾驶员头部角度的影响。并且在识别速度与准确性上相较于其他算法有所提升,可以应用于实际系统。3.2 耳部检测
3.3 嘴部检测
3.4 面部区域划分
4 眼睛位置及状态分析
4.1 眼睛区域
4.2 椭圆曲线拟合
4.3 眼睛状态分析
5 实验结果
6 结论