多特征因素的疲劳驾驶检测方法

2022-04-21 03:01李建良郭秋蕊刘晓静
天津科技大学学报 2022年2期
关键词:哈欠关键点人脸

田 垚,李建良,郭秋蕊,刘晓静

(天津科技大学电子信息与自动化学院,天津 300222)

近几年来,随着人民生活水平的不断提升以及交通运输行业的持续发展,机动车总量逐渐增加.与此同时,我国交通事故的发生率随着机动车数量的增加也不断上升,交通事故已经严重威胁到人们的生命财产安全[1].导致交通事故发生的主要原因之一就是驾驶员的疲劳驾驶,因此需要高效精确的疲劳驾驶预警系统,以减少交通事故的发生.

疲劳驾驶的检测方法大致可分为两类:接触式疲劳检测、非接触式疲劳检测.接触式疲劳检测主要是通过驾驶员穿戴物理设备检测驾驶员的心率、脑电波、呼吸频率等生理状态,判断驾驶员是否处于疲劳状态.这种方法非常有效并且准确率高,但是驾驶员需要长时间穿戴检测装置,会影响驾驶员的正常驾驶[2-3].非接触式疲劳检测则是利用非接触式传感器检测出驾驶员的肌电信号和心电信号的特征参数判定驾驶员的疲劳状态,但是由于驾驶员的情绪波动和驾驶舱内温度的变化会导致特征参数不稳定,影响检测的准确性.计算机视觉技术在人脸识别领域有广泛的应用,如人脸支付、人脸考勤等.而利用计算机视觉技术进行人脸识别疲劳检测可以避免外界因素的影响,在驾驶员长时间驾驶汽车过程中,驾驶员注意力不集中会眨眼,困倦会导致驾驶员打哈欠,长时间久坐导致颈部疲劳会出现瞌睡点头的状态.因此,可以通过眨眼、哈欠、点头等疲劳特征综合判断驾驶员的疲劳状态[4-5].

1 疲劳检测系统的流程与算法

疲劳检测系统的人脸检测采用分层梯度方向直方图(pyramid histogram of oriented gradients,PHOG)算法,在梯度方向直方图(histogram of oriented gradients,HOG)算法的基础上进行改进,加入分层金字塔结构,比局部二值模式(local binary pattern,LBP)、HOG算法更加稳定,具有更强的抗干扰能力,能适应强光、弱光等极端环境.系统主要采集面部眼、嘴以及头部的疲劳特征,综合判断驾驶员是否为疲劳状态.

1.1 疲劳检测系统的流程

本文采用PHOG算法结合OpenCV进行人脸识别检测.OpenCV是一个开源的计算机视觉库[6].使用OpenCV从摄像头或本地视频中提取视频帧,降噪及灰度处理后进行人脸检测和人脸68个关键点定位.根据眼、嘴以及头部等关键点坐标设定疲劳阈值,判断驾驶员面部及头部的疲劳状态[7-8].综合以上疲劳驾驶因素判断驾驶员的疲劳状态,疲劳检测系统的流程图如图1所示.

图1 疲劳检测流程图Fig. 1 Flow chart of fatigue detection

1.2 改进的PHOG算法

PHOG算法是由HOG算法改进而来,HOG算法广泛应用于计算机视觉领域,常常用来描述图像局部纹理特征.HOG算法是通过计算和统计图像局部区域的梯度方向直方图构成特征.首先将输入的图像分成小的连通区域,然后采集区域内各像素点的梯度方向直方图,最后把这些直方图组合,构成了这一区域的特征描述器,输入到分类器中进行识别分类[9].HOG算法步骤如下:

(1)采用伽马(gamma)校正法对输入图像进行颜色空间的归一化,有效减小阴影和光照强度的影响,抑制噪声的影响,通过调整gamma值处理图像.gamma压缩公式为

(2)根据图像中(x,y)处像素点的像素值H(x,y)计算图像梯度.水平方向梯度和垂直方向梯度的计算公式分别为

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

(3)将图像划分成若干个小区域细胞单元(例如每个细胞单元的像素为6×6),统计每个区域的梯度直方图即可形成每个区域的描述器.

(4)将每几个细胞单元组成一个大区域块block,将block内所有细胞单元的HOG特征串联,得到该block的HOG特征描述器.

(5)将HOG与Pyramid相结合即PHOG,将输入的一张图片进行不同尺度的分割,例如将图片分割成3×3、6×6不同尺度.计算出每个尺度的HOG值,将这些HOG值相加得到一维向量,归一化处理后,将一维向量特征描述器送入分类器中完成图像识别分类等功能[10-11].

人脸的68个关键点坐标如图2所示.

图2 人脸的68个关键点坐标Fig. 2 68 key point coordinates of human face

本文采用PHOG算法,其优点是表达能力强,具有较强的稳定性和抗干扰能力,而且在各种复杂情况下能准确检测出人脸,并检测出人脸的68个关键点(图3).

图3 检测出人脸和68个关键点Fig. 3 Detected face and 68 key points

2 人眼检测及疲劳判定

眼睛的行为特征是疲劳检测的主要因素之一,当驾驶员长时间驾驶时,由于疲劳导致注意力下降,就会产生眨眼生理行为.

眼睛疲劳判别原理:基于PHOG算法已经检测出了人脸,并且标记出人脸68个关键点坐标,提取出人的左右眼坐标.眼睛坐标示意图如图4所示.图4中36~41数字代表左眼坐标.通过眼睛坐标设定眼睛长宽比的眨眼阈值EAR,眼睛睁开时阈值会随着眼睛的抖动而上下波动变化不明显,当阈值急剧下降时,将认为其是眨眼或闭眼行为.根据PERCLOS准则,通过统计单位时间内眨眼次数设定眼睛疲劳阈值[12-13],为

图4 眼睛坐标示意图Fig. 4 Schematic diagram eye coordinate

眼睛部位检测示意图如图5所示,在获得人脸68个关键点坐标的前提下,图像中也检测出了人眼的特征点坐标,为了更明显表现出人眼部位,将人的左右眼坐标用绿色曲线连接.

图5 眼睛部位检测示意图Fig. 5 Schematic diagram of eye detection

3 人的嘴部检测及疲劳判定

嘴部行为特征是疲劳检测的第二个重要因素,驾驶员在疲劳的情况下会因为缺氧产生打哈欠的动作.基于PHOG算法识别人脸并标注出人脸的68个关键点,进而获取嘴部的坐标索引.嘴部坐标示意图如图6所示.图6中嘴部内轮廓坐标点为60~67,嘴部外轮廓坐标点为48~59.根据嘴部的开度设定阈值判定是否处于打哈欠状态,人说话或哼歌时也处于张开状态,阈值会在一定范围内上下波动.当打哈欠时嘴部阈值会持续下降,并会持续一定的时间.采取内轮廓疲劳阈值K1与外轮廓疲劳阈值K2的均值MAR判别哈欠状态,通过统计单位时间内哈欠的次数设定嘴部疲劳阈值公式:

图6 嘴部坐标示意图Fig. 6 Schematic diagram of mouth coordinate

嘴部检测效果图如图7所示,为了更加方便地观察嘴部效果,将嘴部的坐标点用绿色曲线连接.

图7 嘴部检测效果图Fig. 7 Effect picture of mouth detection

4 人的头部检测及疲劳判定

头部行为特征是疲劳检测的第三个重要因素,当人处于疲劳状态时,颈部肌肉会出现间歇性放松,产生瞌睡点头的生理状态.检测人的头部状态需要将2D转换到3D模型状态,在3D模型状态下能更加容易计算头部的运动角度[14].如图8所示,人的头部会出现Pitch、Roll、Yaw这3个运动方向.当人处于疲劳状态时会出现Pitch和Roll的两个运动方向,不会出现Yaw的运动方向,根据头部运动的欧拉角设定瞌睡阈值.

图8 头部经常运动的角度Fig. 8 Angle of human head movement

人的头部检测效果图如图9所示,用红色立方体框住人的头部范围,用x,y,z空间坐标系定位头部位置,获得Roll和Pitch两个方向的活动角度.

图9 人的头部检测效果图Fig. 9 Effect picture of human head detection

5 朴素贝叶斯算法

通过眼、嘴、头部这些单一因素不能准确地判断驾驶员的疲劳状态,为了提高疲劳检测的准确率,综合3种疲劳特征因素进行疲劳检测[15-16].因为眨眼、哈欠和点头都属于独立条件属性,本文采用朴素贝叶斯算法进行疲劳分类判别,朴素贝叶斯算法以贝叶斯理论为基础[17-18].给定的条件特征集为,x1为眨眼的样本属性,x2为哈欠的样本属性,3x为瞌睡点头的样本属性.Y为类别集,c1代表正常驾驶状态,c2代表疲劳驾驶状态.由贝叶斯定理得

由于疲劳因素的条件相互独立,所以

由式(12)和式(13)得

根据式(14)建立朴素贝叶斯分类器

由贝叶斯分类器可知,输入疲劳驾驶的疲劳因素,得出概率最大的类别就是预测出的结果[19-20].根据这个原理,通过多个疲劳因素判别驾驶员的疲劳状态.

6 实验测试与分析

本次实验使用惠普笔记本自带摄像头完成视频数据采集,使用Python 3.7编程语言和Tensorflow 2.4框架,在Pycharm编程环境下使用OpenCV进行人脸检测和面部关键点定位以及头部三维空间的确定.为了证明算法的稳定性,分别在理想状态、戴眼镜状态、戴帽子状态、强光状态、弱光状态下进行多组实验测试.经过多次实验得出眨眼、哈欠、瞌睡点头不同疲劳特征的准确率,见表1.

表1 不同环境下疲劳特征测试准确率Tab. 1 Accuracy of fatigue characteristic test indifferent environments

在理想环境中且无穿戴状态下眼、嘴、头部疲劳因素测试平均准确率均很高,分别为96.83%、96.80%、97.50%.在理想实验条件下,疲劳检测系统具有良好的检测效果.

在驾驶员戴眼镜的状态下,虽然眨眼的准确率相较于理想状态下的准确率有所波动,但是准确率仍然处于95%以上.由此得出结论:驾驶员在戴眼镜时,疲劳检测系统仍然具有较高的稳定性.

在驾驶员戴帽子的状态下,虽然瞌睡测试的准确率有所波动,但是其准确率仍处于95%以上.由此可以得出结论:驾驶员在戴帽子时,疲劳检测系统仍然具有较高稳定性和抗干扰能力.

当驾驶汽车面向太阳或背对着太阳时,会出现强光或弱光的环境,疲劳检测系统处于强光和弱光的环境下检测到的眨眼、哈欠、瞌睡点头的准确率虽然有所波动,但均在95%以上.由此可以得出结论:驾驶汽车处于强光或弱光的环境下,疲劳检测系统仍然具有较高的稳定性和抗干扰能力.

综上所述,无论驾驶员在穿戴配饰还是在强光或弱光的情况下,疲劳因素测试实验的准确率虽有波动但都在95%以上,由此说明PHOG算法具有很好的稳定性和抗干扰能力.

当驾驶员在戴眼镜状态下,系统可以检测出人脸,标定出人脸的68个关键点,检测出眨眼阈值EAR、眨眼次数Blinks和哈欠阈值MAR、哈欠次数Yawns及头部的空间坐标,并检测出驾驶员的疲劳状态,运行效果如图10(a)所示.

当驾驶员在戴帽子状态下,系统依然可以检测出人脸,标定出人脸的68个关键点,检测出眨眼阈值EAR、眨眼次数Blinks和哈欠阈值EAR、哈欠次数Yawns及头部的空间坐标,并检测出驾驶员的疲劳状态,运行效果如图10(b)所示.

当驾驶员处于强光环境下,系统具有较强的稳定性和抗干扰能力,仍然可以检测出驾驶员的各项疲劳特征参数并检测出驾驶员的疲劳状态,运行效果如图10(c)所示.

当驾驶员处于弱光环境下,检测系统并不受影响,可以准确地检测出眼、嘴及头部的疲劳特征参数并检测出驾驶员的疲劳状态,运行效果如图10(d)所示.

图10 不同环境下驾驶员疲劳状态检测结果Fig. 10 Test results of driver fatigue in different environments

本文又收集了多人人脸数据,对不同人脸进行疲劳检测,测试结果如图11所示.

图11 疲劳检测结果Fig. 11 Fatigue test results

实验中采集了不同人脸进行测试,系统依然能检测出面部眼、嘴和头部的空间位置,而且可以统计视频中眨眼次数、哈欠次数、瞌睡点头的次数,由此可以证明系统的有效性.

为了证明系统的持续稳定性,在图11(b)中增多测试者眨眼次数、哈欠次数、瞌睡点头次数,系统依然可以实时检测出疲劳状态.在图11(c)中减少嘴部疲劳特征哈欠的次数,可以看出在其中一种疲劳特征不足的情况下也依然可以检测出人脸的疲劳状态,由此可以证明系统的稳定性.

综上所述,经过不同的人脸疲劳检测结果可知,疲劳检测系统可以准确地检测和识别出图像中的人脸,并检测出人脸的68个关键点和头部的空间坐标,最终检测出疲劳状态,表明算法具有较高的有效性和稳定性.

7 结 语

本文采用PHOG算法,结合OpenCV进行人脸检测和关键点定位,标注出人脸68个关键点,再通过关键点坐标计算出嘴、眼、头部的开合度阈值.根据PERCLOS准则,结合单位时间内眼、嘴以及头部视频帧的变化,确定驾驶员疲劳的阈值.通过实验数据表明,在上述复杂环境下对眨眼、哈欠、瞌睡点头的识别准确率均达到了95%以上.由此可以得出结论,PHOG算法在疲劳检测方面效果良好,且检测驾驶员人脸具有较强的稳定性和抗干扰能力.

猜你喜欢
哈欠关键点人脸
论建筑工程管理关键点
水利水电工程施工质量控制的关键点
有特点的人脸
如果哈欠是有颜色的
玻璃窗上的人脸
如果哈欠是有颜色的
止不住的哈欠
制服一个哈欠
利用定义法破解关键点
“领家系”可爱脸VS“高冷系”美人脸