APP下载

基于计算机视觉的驾驶员疲劳状态检测预警技术

2022-05-19王红君白浩赵辉岳有军

科学技术与工程 2022年12期
关键词:嘴部人脸灰度

王红君, 白浩*, 赵辉,2, 岳有军

(1.天津理工大学电气电子工程学院, 天津 300384; 2.天津农学院工程技术学院, 天津 300392)

基于驾驶员面部特征分析的疲劳检测算法具有非接触、准确、低成本及易实现等优点,因此,基于计算机视觉技术研发汽车驾驶员疲劳驾驶预警系统具有广阔的应用前景。 Isaza等[1]提出了一种利用数字图像处理和机器学习技术的驾驶警报状态动态设定点模型。通过运行Harr描述符的算法控制Python编写的Open CV库来检测人脸部位进而进行疲劳判定;闫保中等[2]通过眼部宽高比检测人眼闭合程度,并提出将人眼视线方向应用于疲劳驾驶检测算法中,判断注意力是否分散,以便在驾驶员陷入深度疲劳之前对其进行预警;潘志庚等[3]利用Adaboost算法进行人脸检测,根据人脸“三庭五眼”的分布特征分割出大致的人眼区域,结合眼睛矩形区域的长宽比、拟合椭圆面积、瞳孔黑色素对眼部特征进行疲劳分析。基于驾驶员面部特征进行疲劳检测有实时、便捷、经济性高等优势,但是在实际驾车过程中仍然存在鲁棒性差、结果受外界因素影响较大、难以适应复杂光线及背景、对佩戴眼镜的驾驶员检测不够准确等问题。

目前,针对驾驶员疲劳检测中存在的不足有:①可供参考的疲劳指标过于单一,由于驾驶环境差别及光照的影响,检测结果的准确性和可靠性难以得到保证;②未能有效解决驾驶员因个体差异所表现的不同疲劳特征所带来的影响;③未能有效解决驾驶员在临界疲劳状态下的判断及疲劳分级预警问题。为此,提出了一种基于计算机视觉的驾驶员面部多特征疲劳检测分级预警算法。截取影视片段视频作为样本,对于不同驾驶员的疲劳特征指标进行采集,再利用数学方法计算出相应阈值,有效减少因驾驶员面部特征的差异给检测结果带来的影响,融合眨眼频率、闭眼次数、perclos[4]以及打哈欠频率4个指标建立疲劳分级判定模型,为提高驾驶员疲劳驾驶状态的智能化检测水平提供科学参考。

1 图像预处理

对视频流目标进行识别与跟踪时,首先需要对采集到的彩色视频流逐帧灰度化,因为相较于彩色图像来说,灰度图像的数据量较小,更容易保证算法的实时性,从图像处理学角度来看,颜色本身容易受光照影响,因此难以提供关键信息,灰度图像则可以完整保留反映物体本质属性的梯度[5]。彩色图像的每个像素至少有R、G、B3个通道,而灰度化处理之后,极大简化了矩阵维度,降低了算法的空间复杂性,提高了运算速率。首先将实时检测的视频转为视频流文件,然后循环读取每一帧图像,并利用Gamma校正将彩色图图像进行灰度化处理,灰度化Gray公式如式(1)所示,图像灰度化效果如图1所示。

(1)

图1 彩色图像和灰度化图像对比Fig.1 Comparison of color image and grayscale image

2 人脸检测

人脸检测分为3个阶段:首先,采用多线程优化后的Dlib人脸检测器实现对驾驶员人脸的追踪与定位;其次,调用Dlib开源库中人脸关键点检测器实时检测并标记出眼部和嘴部在内的68个相应特征点[6];最后利用相似变换对人脸关键点对齐,将非正面人脸旋转成正脸来进行特征提取。

2.1 HOG特征提取

方向梯度直方图(histogram of oriented gradient,HOG)特征是一种在图像处理中进行物体检测的特征描述子,该算法的基本流程如下。

步骤1计算图像梯度。分别计算图像的横坐标和纵坐标方向的梯度,然后再计算出每个像素位置的梯度方向值并对此进行求导,这样一来,不仅可以削弱光照对检测算法的影响,而且可以有效提取人脸轮廓的边缘信息。图像中像素点(x,y)的梯度表达式为

Gx(x,y)=H(x+1,y)-H(x-1,y)

(2)

Gy(x,y)=H(x,y+1)-H(x,y-1)

(3)

式中:Gx(x,y)和Gy(x,y)分别为像素点在水平和垂直方向上的梯度;H(x,y)为像素点(x,y)的像素值。

像素点(x,y)处的梯度幅值和梯度方向的表达式分别为

(4)

(5)

步骤2细胞单元构建梯度方向直方图。将获取的图像分割成若干个单元,在每个单元内进行梯度大小和方向的统计,并将结果做成直方图。

步骤3梯度归一化。由于光照和背景的变化具有多样性,而每次光照或者背景发生较大变化时,梯度强度的变化也会非常大,这会影响到目标检测的准确率。为了增强模型对光照强度的鲁棒性,将相邻的M个单元合并成区块,对区块进行对比度归一化处理,再将区块内单元的特征向量进行组合,形成HOG特征,用于表征获取的整张图象。

2.2 人脸关键点标定与对齐

采用级联回归树(ensemble of regression trees,ERT)算法,即基于梯度提高学习的回归树方法进行面部68个特征点检测并标定[7-8],如图2所示。

为了避免摄像头采集到的图像非正脸情况从而影响疲劳特征的提取,采用相似变换对人脸进行对齐,效果如图3所示。

图2 面部特征提取结果Fig.2 Facial feature extraction results

图3 人脸关键点对齐Fig.3 Alignment of face key points

采用的相似变换可以由平移变换、旋转变换以及各向同性缩放变换复合而成,其变换矩阵为

(6)

式(6)中:左上角2×2矩阵为旋转部分;tx和ty为平移因子;s*为缩放因子。

2.4 人脸检测加速策略

疲劳检测对实时性要求很高,通过调用多线程方式来优化Dlib人脸检测速度,线程是CPU调度和分派的基本单位,主要负责执行当前的应用程序,同属进程的其他线程也可以共享进程的全部资源。在人脸检测阶段,采用多个线程同时调用策略,在调用的过程中适当减小分辨率来提升人脸检测速度,然后,使用回调为后续帧画图,再使用队列保证输出帧的顺序和输入顺序一致,确保每一帧都被处理,在提升检测速度的基础上保证检测的准确率。经过实验验证,所提出的人脸检测加速策略可以达到52.58 帧/s,较改进前的模型提升了23.75 帧/s,本文策略可以实时定位跟踪驾驶员人脸位置,可以满足后文针对驾驶员疲劳检测的要求。

2.5 系统硬件环境配置

基于TMS320DM642芯片进行驾驶员疲劳检测设计,系统包括图像采集模块、CPU处理模块、电源模块以及语音报警模块组成。

硬件结构如图4所示,系统工作原理是:首先图像采集模块利用摄像头采集驾驶员面部图像,经过A/D转换后,将数字图像传入CPU处理模块进行人脸检测、人脸关键点定位以及疲劳状态的判定。电源模块通过转换电路给片内资源供电,当系统判定驾驶员处于疲劳状态时,会通过音频输出接口MCASP使语音预警模块工作,对驾驶员发出警告。

EMIF为外部存储器连接接口;MCASP为多通道音频串行端口图4 硬件结构Fig.4 Hardware structure

具体配置如下:采用MT9V034的CMOS摄像头,Inter Core i7-8565U@1.80 GHz 四核CPU,运行内存为64 GB,512 GB固态硬盘;编程语言Python采用3.8版本。

3 疲劳指标

3.1 眼睛纵横比

驾驶员眼部的运动和眨眼信息被认为是反映疲劳状态的重要信息[9-10],眼部疲劳检测算法是实时计算眼睛纵横比EAR,即眼睛纵向界标与横向界标之间的欧式距离比值[11]。在3.2节中获取了人脸关键特征点,对于每只眼睛都有6个对应的特征点,以右眼为例,如图5所示。EAR计算公式为

(7)

当驾驶员眼睛睁开时,EAR值通常保持动态平衡,但是当驾驶员眼睛闭和时,EAR值会迅速下降;当眼睛再次睁开时EAR值又恢复到相对稳定状态,因此,可以将复杂的图像处理问题转变为眼睛特征点之间的欧氏距离比值。分别计算驾驶员左眼和右眼的EAR值并求出均值如图6所示。

P1~P6为对应的6个特征点图5 人眼特征点提取Fig.5 Extraction of human eye feature points

图6 左右眼EAR值Fig.6 EAR value of left and right eyes

3.2 嘴巴长宽比

嘴部疲劳特征同样也是检测驾驶员疲劳程度的重要参考依据[12-13],与EAR定义相似,提出嘴巴长宽比MAR指标,相比于嘴部外部轮廓,由于嘴部内部轮廓更能直观反映嘴部张开程度,因此,选用内轮廓8个特征点M1~M8对嘴部进行张度计算,嘴部特征如图7所示,MAR计算公式为

(8)

图7 嘴部特征点提取Fig.7 Extraction of feature points of the mouth

由于打哈欠和平时说话、大笑、吃东西或者惊讶一样,嘴部都有明显的张度变化,所以,需要设定阈值区分打哈欠和其他情况下嘴部张度变化以避免预警的误判,图8为检测者正常说话、打哈欠的MAR值折线图。

3.3 EAR值和MAR值确定

为了确定驾驶员在清醒情况下EAR值以及MAR值的波动范围,参考DFEW(dynamic facial expression in the wild)数据集,其采集方式是截取超过1 500部的影视片段,选取其中300部不同背景下的影视片段作为样本视频,样本视频中涵盖了不同年龄、不同性别以及不同种族的人群,为了提高检测人眼特征时的鲁棒性,样本视频中还选取了大量佩戴眼镜的人群用来增加眼睛特征区域的多样性。通过实时检测视频流中EAR的最大值EAR,max和最小值EAR,min,以及MAR的最大值MAR,max和最小值MAR,min,再参考perclos中P80标准确定EAR和MAR的阈值,计算公式为

MAR=(MAR,max-MAR,min)(1-X1)+MAR,min

(9)

EAR=(EAR,max-EAR,min)(1-X2)+EAR,min

(10)

取X1为0.2,即嘴部张度为最大张度的80%视为打哈欠一次,同理,取X2为0.8,即眼睛闭合程度达到眼睑覆盖瞳孔80%视为闭眼,经过反复实验,确定相应阈值如表1所示。

图8 正常说话及打哈欠的MAR折线图Fig.8 MAR line chart of normal speaking and yawning

表1 EAR和MAR阈值确定Table 1 EAR and MAR threshold determination

通过增加样本的类别和数量,可以有效减少因为驾驶员面部特征的差异给检测结果带来的影响,提高了疲劳检测系统的鲁棒性和普适性。

3.4 疲劳指标值计算

通过3.3节计算出的EAR和MAR的阈值,可以针对输入的视频流对驾驶员眨眼频率、闭眼次数、打哈欠频率及perclos这4个指标进行实时检测[14-15],当EAR值小于阈值时可以记作驾驶员眨眼一次,如果EAR值连续10帧都小于阈值时可视为闭眼一次,记作N,当EAR值连续10帧都大于阈值时可视为打哈欠一次。

眨眼频率的计算公式为

(11)

式(11)中:n为单位时间内检测到的驾驶员累计眨眼次数,即EAR值小于阈值时的次数;NP为单位时间内视频的总帧数。

打哈欠频率计算公式为

(12)

perclos是卡内基梅隆研究所提出的可以度量疲劳的物理量,经过反复实验和认证,perclos值被认为是最可靠最有效的驾驶员警觉性水平的测定指标。perclos定义为眼睑闭合的百分比,是指单位时间内测得的眼睛闭合时长占总时长的比值[16-17]。研究表明,P80指标与疲劳驾驶的相关性最高,因此,采用P80标准对驾驶员眼部疲劳特征进行判定,如图9所示。

t0~t5表示一个完整眨眼周期图9 perclos值Fig.9 The value of perclos

具体来说,如果瞳孔的整体面积被眼睑覆盖超过80%,则认为眼睛是闭合的,可知在一个周期内perclos的表达式为

(13)

由于摄像头采集图像的频率是固定的,因此,计算单位时间内的perclos值可以转化为计算单位时间内所采集到的图像中眼睛闭合的连续帧数NK占该时间内视频图像总帧数NP的比值,其表达式为

(14)

3.5 指标融合

根据3.4节计算可得出眨眼频率、闭眼次数N、眼睑闭合时间百分比perclos以及打哈欠频率[18-20],鉴于得到的疲劳评判指标所属的量纲单位不同,若将疲劳指标进行综合评价,则需要对数据进行标准化处理,利用最大最小标准化(min-max normalization)实现数据归一化处理,其转换公式为

(15)

式(15)中:x′为指标融合数值;xi为实时检测到的疲劳指标数值;xmin、xmax分别为该疲劳指标在检测过程中的最小值和最大值,如表2所示。

表2 疲劳指标最值

归一化处理之后的数据都是无量纲化的小数,并且集中在[0,1]区间内。因此,不同单位的数据对目标函数的影响程度是一致的,各指标之间可以进行比较或加权。根据各指标表现驾驶员疲劳的可靠性程度设置不同权重,计算公式为

1.0X3+0.8X4]

(16)

式(16)中:X为综合疲劳指标。

综合疲劳指标X的取值同样也在[0,1]区间内,根据不同情景对应的综合疲劳指标的取值,可以将疲劳分为5个等级,综合疲劳指标越高,代表越疲劳,如表3所示。

图10 疲劳驾驶检测算法流程Fig.10 Fatigue driving detection algorithm flow

4 系统整体设计方案

机动车驾驶员疲劳检测系统的主要目标是快速准确的识别疲劳状态并作出相应地预警措施,具体步骤如下。

步骤1图像预处理,对采集到的视频流逐帧进行灰度化。

步骤2利用多线程优化后的Dlib开源库人脸检测模型检测出摄像头实时获取视频流中驾驶员的人脸图像并定位。

步骤3基于人脸图像,使用Dlib开源库中的人脸关键点检测器对驾驶员的面部特征进行提取,从而定位出驾驶员的眼部和嘴部并标记对应的特征点。

步骤4根据人脸关键点计算出驾驶员的眼睛纵横比EAR和嘴部长宽比MAR,实现对驾驶员眨眼频率、闭眼次数、perclos值以及打哈欠频率这四个疲劳指标的检测。

步骤5采用多特征融合策略,对实时检测到的疲劳指标进行归一化处理,根据对应疲劳场景将驾驶员的疲劳状态进行分级,实现对疲劳驾驶的预警。本文算法总体流程如图10所示,整体功能通过Python代码实现。

表3 疲劳分级

5 实验验证和结果分析

选择YAWDD数据集作为实验验证样本,YAWDD数据集是由渥太华大学在真实驾驶环境下利用自然光采集的不同年龄不同种族的视频数据集,记录了驾驶员在驾车过程中正常说话、打哈欠、眨眼等驾驶状态。通过输入视频流对样本视频中的驾驶员进行眼部、嘴部疲劳特征指标的检测并记录,如表4~表6所示。以实际检测到的指标数值为基础将该视频流中的驾驶员疲劳状态分级,并分析结果,测试者检测结果如图11所示。

blink frequency表示实时检测到的眨眼频率;closed number和yawn number分别表示闭眼次数和打哈欠次数图11 检测视频实验结果Fig.11 Experimental results of detection video

表4 眼部特征指标

表5 嘴部特征指标

表6 综合疲劳指标分级

6 结论

针对Dlib采用多线程方式进行优化,有效的提高了人脸检测速度,然后在人脸关键点标定的基础上进行关键点对齐处理,提高了检测疲劳指标的准确率,截取大量影视剧视频作为数据集,结合数学方法求取相关阈值,降低了因为驾驶员个体差异给检测结果带来的影响,融合眨眼频率、闭眼次数、perclos值以打哈欠频率4个疲劳判定指标建立疲劳分级模型,不仅解决了疲劳指标单一的问题,而且弥补了驾驶员临界疲劳状态下检测的不足。实验验证表明,在疲劳驾驶检测中,本文算法的准确性、实时性都表现良好,对研发驾驶员疲劳驾驶检测与预警设备具有重要价值。

猜你喜欢

嘴部人脸灰度
采用改进导重法的拓扑结构灰度单元过滤技术
有特点的人脸
一起学画人脸
Bp-MRI灰度直方图在鉴别移行带前列腺癌与良性前列腺增生中的应用价值
此人为何杠得如此嚣张?
圆号教学中嘴部教学的重要性及训练方法研究
高中素描头像教学中提高嘴部刻画能力的策略探究
三国漫——人脸解锁
基于Horn-Schunck光流法的多目标反刍奶牛嘴部自动监测
基于最大加权投影求解的彩色图像灰度化对比度保留算法