APP下载

基于机器视觉的疲劳驾驶监测算法研究

2022-09-13申海洋

蚌埠学院学报 2022年5期
关键词:标准差直方图灰度

申海洋,笪 诚

(巢湖学院 电子工程学院,安徽 合肥 238024)

随着我国汽车保有量的持续增长,交通事故发生的数量也呈现出不断上升的趋势。在引发车辆行驶事故的诸多因素中,疲劳驾驶是其中最主要的因素之一。疲劳驾驶是指驾驶员在经过较长时间连续行车后,生理机能和心理机能产生失调,其注意力、判断力、反应速度都可能严重削弱,因而,表现出驾驶技能的下降,这极易发生道路交通事故,严重影响驾驶安全。现有数据表明有近20%的交通事故与疲劳驾驶有关[1]。因此,研究疲劳驾驶监测算法非常重要,能及时准确地检测到驾驶员的疲劳驾驶状态,然后进行提醒干预,这在安全驾驶中具有实际的应用价值。

目前,各大车辆制造商在其研发制造的车辆中普遍安装了防疲劳提醒系统,主要采用被动式疲劳检测方法。大部分车辆厂家会通过对车辆驾驶时间进行计时来实现疲劳驾驶提醒,一般连续驾驶时间超过两个小时就会提醒驾驶员停车休息,避免长时间驾驶造成疲劳驾驶。但是鉴于不同驾驶员的身体机能会有所不同,部分驾驶员在连续驾驶时间尚未达到通常设定的两个小时前,可能已经处于疲劳驾驶的状态,因此,该方法适应性较差,存在一定的弊端。还有部分厂家通过利用车机系统判断驾驶员车辆操控特征来对疲劳驾驶进行判断,如通过监测车辆是否多次出现车道偏移,大角度变线,紧急刹车,跟车距离过近等行为来判断驾驶员是否处于疲劳驾驶状态[2]。但是,由于我国当前交通状况较为复杂,驾驶员数量众多,其驾驶技能和驾驶习惯也良莠不齐,因此,通过车辆操控特征分析对疲劳状态进行预判的方法准确率不高。另外,因需要检测到多次不良驾驶状态才能做出判断,因而,也无法及时发出疲劳驾驶提醒,导致实时性也较差。

当前,基于对驾驶员本身行为特征和身体状态分析的主动式防疲劳驾驶监测方法的研究成为研究的热点方向。研究人员尝试通过精确地监测驾驶员的血氧浓度、心率、脑电波等生理特征,来判断驾驶员的身体状态,以预判是否处于疲劳驾驶状态[3]。该方法能较为准确地反映出驾驶员当前的实际状态,不过对上述参数的实时监测需要使用到大量的传感器,种类繁多的传感器的佩戴,也给驾驶员带来负担,影响了驾驶舒适性。以脑电波监测为例,需要在驾驶员头部安置若干电极,会降低驾驶员的舒适性,且电极的安装需要专业人员来操作,因此,该方法适用性较差,很难普及,无法应用在实际驾驶环境中。

实践研究表明,当驾驶员处于疲劳驾驶状态时,其眼睛会间歇性地闭合、睁开。根据这一特征,文章提出了一种基于机器视觉的疲劳驾驶监测算法,即通过机器视觉的方式检测驾驶员眼睛是睁开还是闭合的状态,由此来判断驾驶员是否处于疲劳驾驶状态。

1 算法设计流程

基于机器视觉的疲劳驾驶监测算法主要分为驾驶员图像提取、面部识别、眼睛区域图像分割、眼睛闭合状态判断、疲劳驾驶判断几个部分。其具体流程如图1所示。

图1 疲劳驾驶监测算法流程图

首先,通过固定安装在驾驶台方向盘前侧的摄像头采集到驾驶员的视频帧。通过加权平均的方法获取车辆驾驶舱背景,然后通过应用边缘方向直方图相关性匹配算法[4]对驾驶员和背景进行分离,获取驾驶员图像;通过肤色聚类的方式定位和提取驾驶员面部区域[5];再根据面部灰度分布特征对图像中的眼睛区域进行定位和分割;最后计算分割后的眼睛区域的直方图和图像标准差[6],联合两种特质来判断眼睛是处于睁开还是闭合的状态。当检测到某一帧中眼睛处于闭合状态时,对下一帧眼睛状态的判断则通过帧间差分法来实现。如果帧间差小于阈值,则认为眼睛仍然处于闭合状态,否则,重新进行检测。最后对眼睛闭合帧的数量进行统计,如果连续的闭眼帧超过设定的阈值则发出疲劳驾驶的提醒。

2 驾驶员图像提取

对疲劳驾驶的监测,最终是通过对眼睛闭合的判断来实现的。在此之前,需要对驾驶员的面部进行识别和提取。视频摄像头采集到的视频帧包含驾驶员本身和车辆驾驶舱两个部分。为了减小图像处理的数据量,提高处理速度,减少对后期驾驶员面部提取的干扰,算法设计首先将只包含驾驶员本身的前景图像与背景进行分离。

在分离驾驶员图像前先要获取背景图片,由于摄像头是固定安装,车辆背景相对固定,但是由于环境光线会发生一定的变化,摄像头会因车辆行驶发生微小震动,因此,采用多帧加权平均的方式获取图像背景[7]。如公式(1)所示,其中fi是第i帧图像,N是图像总帧数。

(1)

实验采集了一段无驾驶员状态的视频,用以计算获取图像背景,视频长10秒钟,帧率30帧,共300帧。首先对这300帧彩色图像进行彩色图像灰度化处理,然后再进行叠加,最后除以总帧数,得到背景。如图2所示,算法获取了背景帧图像,结果显示算法能有效地消除局部光照变化的影响,同时,也对噪声进行了均值滤波处理,削弱了噪声的影响。

图2 图像背景获取

在获得背景图像后,需要对前景和背景进行分离以获得驾驶员本身图像,缩小后期人脸区域识别的范围、减小运算量、提高算法运算速度。采用了一种基于边缘方向直方图相关性匹配的方法从图像中匹配到背景,并消除背景保留前景。

图像边缘是灰度发生剧烈变化的区域,它能够有效反映图像中的形状信息,因此,成为人类分辨事物时所依据的重要视感信息,基于边缘方向直方图相关性匹配的算法可用于图像匹配和检索中。在本文研究的视频对象中,由于视频背景图像fb和驾驶员驾驶中的图像fj有大量相似区域,因此通过基于边缘方向直方图相关性匹配的算法从视频帧中去除背景区域图像。

具体算法如下:

(1)利用Sobel算子[8],如公式(2)所示,检测提取图像的边缘。

(2)

(2)计算得到边缘像素梯度幅值,如公式(3)所示,设定梯度阈值T=25。梯度值大于25 时,则该点被视作边缘像素点。

(3)

(3)从图片fb和fj的左上角利用9*9模板从左向右,自上而下地进行遍历,对两幅图片相应位置的9*9像素块进行匹配,利用梯度方向公式计算梯度方向,如公式(4)所示,接着将方向均匀地量化为18个等级,构建特征向量,最后使用斯皮尔曼等级相关公式[9],如公式(5)所示对相对应的图像9*9像素块进行匹配。

(4)

(5)

(4)根据匹配结果来提取驾驶员本身的图像,如果块匹配成功,即ρ≥0.95,则认为该块区域是背景,将其消除,否则,认为是驾驶员图像,予以保留。提取结果如图3所示。

图3 驾驶员图像提取

通过实验对比可知,基于边缘方向直方图相关性匹配的背景提取算法可以较好地分离背景和前景,相比传统的背景差法,提取的前景具有更好的精度,这为后期人脸区域识别奠定了基础。

3 基于肤色聚类的驾驶员面部识别

在获得驾驶员图像后,需要进一步将驾驶员人脸区域从图像中提取出来。人脸区域提取算法的效果将直接影响后期眼睛部位的定位和识别处理。由于人脸的肤色特征在驾驶员图像中显著有别于其他部位颜色,因此采用肤色聚类的方法从图像中提取驾驶员人脸区域的图像。

在对彩色图像颜色空间特征进行分析后,发现RGB色彩空间受亮度影响较大,而YCbCr色彩空间对人类皮肤颜色有良好的聚类效应,因此,算法将图像RGB图像转换为YCbCr图像[10],其转换关系如公式(6)所示。

(6)

然后在YCbCr空间对肤色进行聚类,根据不同年龄、性别、驾驶员的肤色分布情况,综合使用Cb取值范围在130-170之间,作为参考量。将Cr取值范围在(80,120)且Cb取值在(130,170)的像素设置(R,G,B)=(255,255,255),其他取值的像素设置(R,G,B)=(0,0,0)。

人脸区域图像分割结果如图4所示,通过肤色聚类的方式有效地提取驾驶员面部区域。但是,由于驾驶员面部肤色并非均匀分布,分割出的面部区域存在较多的微小黑色孔洞。故而,需要对图像进行进一步的形态学处理[11]。即先对图像进行膨胀处理,再进行腐蚀的操作,由此来消除面部区域的孔洞,恢复完整连通的人脸区域,最终分割的面部区域如图5所示。

图4 人脸图像目标识别与分割

图5 基于形态学处理的人脸分割

4 眼睛部位图像定位分割

在完成人脸区域图像的识别和分割提取后,需要在驾驶员脸部区域图像中对眼睛部位图像进行定位和分割提取,以便后续分析眼睛部位闭合和睁开的特征变化。

在驾驶员面部灰度图像中,眉毛和眼睛瞳孔以黑色居多,在眉毛和瞳孔位置的灰度值较低。如图6所示,对眼睛部位某一行的灰度值进行扫描时会明显地观察到灰度值由高到低、再升高的显著变化趋势,这是由于眼睛处眼白灰度值高,瞳孔灰度值低所引起的灰度值变化。

图6 眼睛处灰度扫描

依据此特征,对驾驶员面部灰度图像进行自上而下的逐行扫描,依据灰度变化特征,首先定位到眉毛上、下边界,然后依次定位到瞳孔上边界、下边界,定位到瞳孔下边界后再向下扩展两倍瞳孔高度的像素宽度,计算当前区域上边界即眉毛上边界位置和区域宽度。最终实现了对眼睛部位的定位和分割,如图7所示。

图7 眼睛区域图像分割

5 眼睛闭合状态的判断

完成对驾驶员眼睛区域图像的分割后,接着要对睁眼、闭眼的状态进行分析判断。首先,对睁眼和闭眼两种状态下图像灰度直方图[12]进行统计分析,如图8所示。

图8 眼睛区域灰度直方图

当眼睛睁开时瞳孔区域黑色像素块较为明显,即该位置像素值较低,其对应的灰度直方图中像素值较低部分存在一定数量的像素;当眼睛闭合时,图像灰度直方图中低灰度值像素明显减少,在上图中方框标记部分能看到明显的差别。因此,可以通过眼睛部位图像灰度直方图中低灰度值区域的分布情况来判断当前眼睛是睁开还是闭合的状态。

为进一步提高判断的准确性,提高算法的鲁棒性,除通过检测直方图变化来判断睁眼、闭眼外,本文还联合使用了图像标准差的方式来进行判断。

图像标准差反映了图像明暗对比度的不同,图像明暗对比度增加,其标准差也相应变大。对于数字图像,其标准差计算可依据公式(7)来实现。

(7)

公式中S为标准差,fi为眼睛区域图像第i个像素点的值,N为图像像素点总数。

对睁眼状态、闭眼状态下眼睛部位图像的标准差计算结果如图9所示。

图9 眼睛图像标准差计算结果

由图9可知,闭眼状态下计算得到的图像标准差为31.1567,明暗对比度较低。睁眼状态下,明暗对比度明显提升,计算得到的标准差为35.5655,高于闭眼时的标准差,符合预期。因此,根据这一特征,设定标准差阈值Ts=32.0000,计算每一帧眼睛部位的标准差后与阈值Ts进行比较,当计算得到的标准差小于阈值时,认为该帧图像里眼睛处于闭眼状态。将由灰度直方图判断的结果和由标准差判断得到的结果相与运算,两者同时满足时,则认为眼睛处于闭眼的状态,通过这种方法可以有效地排除干扰,提高识别的准确率。

6 疲劳驾驶判断

在车辆驾驶的过程中,驾驶员如果处于疲劳驾驶状态时,眼睛会不由自主地闭上,眼睛闭合的时间通常会持续几秒钟甚至更长,因此,可以通过计算驾驶员眼睛闭合的时间长度来判断其是否处于疲劳驾驶状态。由于人类在正常情况下也会眨眼,因此,不能简单地以检测到眼睛闭合作为判断疲劳驾驶的依据。数据统计人类大约每五秒钟眨眼一次,每次眨眼闭合的时间大约是0.1 s。故而,设定如果在连续的0.5 s以上,由于视频帧率30帧/s,即在连续的15帧以上眼睛都处于闭合状态,则认为当前驾驶员处于疲劳驾驶状态。

对于连续闭眼图像帧的监测,通过如下算法实现:经过前期驾驶舱背景获取,驾驶员前景分离,人脸图像定位分割,眼睛部位图像定位分割等一系列预处理工作后,通过联合灰度直方图和标准差特征对视频中眼睛是否闭合进行判断。为了减小运算量、提高检测速度,提出一种简单的帧间差分法来判断是否连续闭眼。连续闭眼的图像帧之间具有很高的相似性,因此,在检测到第一张闭眼图像帧后,对下一帧图像中眼睛是否闭上的检测,采用帧间差分法[13-14]来计算两帧之间的差,并设定阈值Tf,如果前后两帧间差小于阈值Tf则认为第二帧仍然处于闭眼的状态,否则,重新运行闭眼检测算法。

7 实验分析

文章实验环境:处理器:英特尔 Core i7-10750H @ 2.60 GHz六核;内存:16 GB(SK Hynix);硬盘:三星 MZALQ512HALU-000L2(512 GB/固态硬盘 ;主显卡Nvidia GeForce GTX 1650 Ti with Max-Q Design(4 GB/联想 );视频采集设备:HUAWEI JSC-AL50。

为了验证算法的有效性,在安全封闭道路上录制了实际驾驶车辆的视频,车辆行驶速度较慢,车速小于5 km/h,在实际驾驶过程中,分别让两名男性和两名女性驾驶员依次驾驶车辆并模拟了疲劳驾驶状态,即在低速行驶时短暂闭眼数次,每次视频长度约2分钟。对采集到的四段视频,综合使用提出的疲劳驾驶监测算法进行计算分析,实验结果如表1所示。

表1 疲劳驾驶监测算法实验结果统计

实验结果表明,使用基于机器视觉的疲劳驾驶监测算法检测到了多次模拟疲劳驾驶的闭眼状态,多次实验的结果都符合预期的设定。

8 结论

本研究提出的基于机器视觉的疲劳驾驶监测算法能有效地对疲劳驾驶进行预警,具有很强的实际应用价值。使用边缘直方图相关性匹配算法消除图像背景,提取出驾驶员图像,再通过肤色聚类的方法提取出驾驶员面部区域,最后基于面部灰度分布特征完成眼睛部位定位分割,联合直方图特征和图像标准差实现了闭眼状态检测。最终通过对连续多帧内是否闭眼来判定疲劳驾驶状态。实际测试结果表明,算法达到了良好的识别效果。目前,存在的问题是识别的速度仍需提高,在后期的研究中将算法移植到FPGA平台上,拟采用Verilog Hdl语言来编程实现疲劳驾驶监测算法,充分发挥FPGA并行计算的优势,提高算法运行速度,将其集成到车辆的车机系统中,以满足实时性要求。

猜你喜欢

标准差直方图灰度
符合差分隐私的流数据统计直方图发布
采用改进导重法的拓扑结构灰度单元过滤技术
Bp-MRI灰度直方图在鉴别移行带前列腺癌与良性前列腺增生中的应用价值
用直方图控制画面影调
基于最大加权投影求解的彩色图像灰度化对比度保留算法
中考频数分布直方图题型展示
基于空间变换和直方图均衡的彩色图像增强方法
基于像素重排比对的灰度图彩色化算法研究
医学科技论文中有效数字的确定
医学科技论文中有效数字的确定