基于Dlib的面部疲劳检测模型

2023-12-06 11:33宋佳尧安姝洁张涔嘉
软件工程 2023年12期
关键词:嘴部太阳眼镜关键点

宋佳尧, 尉 斌, 安姝洁, 张涔嘉, 杨 玮

(天津商业大学信息工程学院, 天津 300134)

0 引言(Introduction)

目前,对于疲劳状态的主要测量方法分为生理特征、视觉特征和语音特征等类型[1]。其中,基于生理特征[2]的疲劳检测大多情况下会使用侵入式的传感器,高昂的价格及侵入式设备可能引起佩戴者的不适,是影响其普及推广的两大因素;基于语音特征[3]的疲劳检测只适用于采用标准呼叫应答的场景且语音标记样本数据较为稀缺;基于视觉特征[4]的疲劳检测具有非接触性、可直接根据人的面部关键点坐标的变化(如头部位置的偏移、眼睛闭合时长、打哈欠等)反映其疲劳状态等优势,成为目前研究的主流方法。在驾驶环境、云自习室等情境下,基于面部视觉特征的疲劳状态检测,可以帮助人们对驾驶员的疲劳状态、学生注意力不集中的状态发出预警。

1 基于面部特征的疲劳检测(Fatigue detection based on facial features)

目前,应用较为广泛的基于面部特征的疲劳检测度量参数有PERCLOS(眼睛闭合时间占单位时间的百分率)参数和PMOT(张嘴时间占单位时间的百分率)参数。PERCLOS是卡内基梅隆研究所提出的度量疲劳的物理量[5]。美国联邦公路管理局开展了在驾驶情境下,对PERCLOS、眨眼频率、打哈欠等9种疲劳参数进行相关性分析研究,得出PERCLOS参数与疲劳驾驶状态相关性最高的结论[6]。

PERCLOS参数表示闭眼时长在单位时间内所占的百分比,使用闭眼帧数与单位时间内视频总帧数n的比值表示,其计算公式如下:

(1)

根据参考文献[7],将眼睑遮住瞳孔的面积达到80%,判定为闭眼的P80标准对疲劳状态的检测是最准确的。

PMOT参数的计算公式如公式(2)所示,它用来表示张嘴时长在单位时间内所占的百分比,使用张嘴帧数与单位时间内视频总帧数m的比值表示。

(2)

值得注意的是,单独使用PMOT参数,有时会造成打哈欠的张嘴和说话张嘴的误报,实际进行疲劳检测时,可以结合眨眼频率和头部姿态参数进行阈值的确定。

2 模型设计(Design of the model)

Dlib是一种开源的、跨平台的工具包,包含诸如图像处理、机器学习和深度学习等众多模块。对比TensorFlow和PyTorch两大框架,Dlib模型在图像处理和特征点定位方面的通用性更强,具有更大的优越性。因此,Dlib模型在人脸检测领域的应用也非常广泛。本文设计的Dlib面部疲劳状态检测模型,由人脸检测器、关键点定位器、特征计算器和状态预测器四个模块构成,面部疲劳状态检测模型框架如图1所示。其中,人脸检测器的任务是读取视频,并通过dlib.get_forntal_face_detector函数捕获视频流中的人脸,将人脸框发送给关键点定位器。关键点定位器的任务是通过dlib.shape_predictor函数获取人脸的68个关键点的坐标,并将坐标向量传递给特征计算器。特征计算器的任务是分别对眼部特征、嘴部特征和头部姿态进行计算,并将结果实时发送给状态预测器。状态预测器的任务是对疲劳状态进行判定,不依赖于单一参数,而是结合眼部、嘴部和头部姿态进行综合度量。例如,人在打瞌睡时,除了会闭眼,头部也会下垂;打哈欠时,除了嘴部的张开角度比说话时大,还会出现闭眼的情况。

图1 面部疲劳状态检测模型框架Fig.1 Framework of facial fatigue state detection model

Dlib库提供了dlib.get_forntal_face_detector函数,基于这个函数可以构造人脸检测器,人脸检测器采用HOG算法(Histogram of Oriented Gradient,方向梯度直方图)、线性分类器、金字塔图像结构和滑动窗口检测等技术,Dlib模型中的HOG算法主要用于捕获轮廓信息,首先对图像进行灰度化处理,其次进行Gamma压缩和归一化图像,以减少户外光照对图像的影响;其检测效果如图2所示。在本文的模型设计中,人脸检测器可以针对摄像头进行实时的人脸捕获。

图2 人脸检测器效果Fig.2 Face detector effect

面部关键点定位器是基于Dlib库中的dlib.shape_predictor函数构造的,该函数对面部的68个关键点(编号从1~68)进行标注。从图3可以看出,左眼的关键点编号是37~42,右眼的关键点编号是43~48,嘴部的关键点编号是49~68。图2和图3中使用的测试图片来自于WIDER FACE公开数据集。

图3 关键点定位器效果Fig.3 Key locator effect

3 实现原理(Implementation principle)

3.1 对瞌睡状态的判定

是否发生了疲劳状态下的瞌睡行为主要通过“闭眼+头部姿态变化”综合判定。

在Dlib库中,眼睛的位置是通过六个关键点进行标注的(图4)。因此,眼睛纵横比的计算方法如下[8]:

(3)

图4 计算纵横比的眼部关键点Fig.4 Key points for calculating eye aspect ratios

头部姿态估计主要是获得脸部朝向的角度信息,一般可以用旋转矩阵、旋转向量、四元数或欧拉角表示[9]。欧拉角的可读性更好,使用较为广泛,常用的三个欧拉角度是俯仰角Pitch、摇头Yaw和滚转角Roll。

为减少误报,提高模型判定的准确率,要对正常状态下的眨眼和疲劳时的闭眼进行区分,正常状态下眨眼的闭眼时间极短,而疲劳时闭眼时间相对较长。正常状态下眨眼时,眼睛纵横比只在瞬时(1~3帧)处于0值,因此在判断眼睛纵横比的基础上,还要检测闭眼的持续时长[10]。

持续时长可通过计数器统计。在眼睛纵横比小于0.2时,认为当前帧处于闭眼状态,计数器加1。一旦计数器的值大于阈值,则结合头部当前的姿态进行判定。例如,计数器的值大于48且头部俯仰角Pitch大于15°,则判定为瞌睡行为。

3.2 对打哈欠状态的判定

是否发生了疲劳状态下的打哈欠行为,主要通过嘴部的张开角度和持续时间判定。在Dlib库中,嘴部的外部轮廓对应12个关键点,如图3中的编号49~60,内部轮廓对应8个关键点,如图3中的编号61~68。

类似眼睛纵横比的计算方法,选取嘴部外部轮廓的6个关键点(关键点的位置如图5所示),进行嘴部纵横比的计算,具体计算方法如公式(4)所示:

(4)

图5 计算纵横比的嘴部关键点Fig.5 Key points for calculating mouth aspect ratios

一般情况下,人们在安静、说话、唱歌等不同状态时,嘴部的纵横比对应不同的数值。例如,安静时的嘴部是闭合的,正常说话和交谈时嘴部是半张开状态的,而在打哈欠时,会把嘴张大且持续一定的时间。

为减少误报,提高模型判定的准确率,要对正常状态下的说话和疲劳时的张嘴打哈欠行为进行区分,人在正常说话时,他的嘴巴张开和闭合是非常频繁的,而打哈欠时,嘴部纵横比数值大且持续时间长(大于4 s)。持续时间的计算与“3.1”小节的计算方法类似,可通过计数器统计。在嘴部纵横比大于0.3时,认为当前帧处于张嘴状态,计数器加1。当计数器的值大于96,则判定为打哈欠。

4 模型测试(Model testing)

实验环境为OpenCV3.4.9.3+Dlib-19.17.99,开发环境为Python3.7.3,Harr分类器选用haarcascade_frontalface_alt.xml。眼睛纵横比的阈值为0.2,嘴部纵横比的阈值为0.3。

本文使用YawDD数据集作为测试数据集,YawDD数据集是一个公开的视频数据集,共收集了90名汽车驾驶员的驾驶视频,其中女性驾驶员为43名,男性驾驶员为47名。视频总数有351条,其中内后视镜角度的视频合计320条(女性驾驶员为156条,男性驾驶员为164条);仪表板角度的视频合计29条(女性驾驶员为13条,男性驾驶员为16条)。部分视频中,驾驶员佩戴了普通眼镜或太阳眼镜。图6展示了YawDD数据集中有代表性的视频数据,分为男性戴普通眼镜、男性戴太阳眼镜、男性未戴眼镜、女性戴普通眼镜、女性戴太阳眼镜、女性未戴眼镜六种类型。

(a)男性戴普通眼镜

针对上述六种类型的视频数据,模型在测试时均成功捕获到驾驶员打哈欠的状态,并实时预警提示信息,如图7所示。

(a)男性戴普通眼镜

观察模型测试过程,发现佩戴普通眼镜或太阳眼镜,均未影响模型对眼部关键点的定位,但在佩戴太阳眼镜时,有时会因光线照射角度的不同影响对眼部关键点坐标的实时跟踪,进而产生计算延迟,对疲劳状态的检测造成了一定影响。模型在YawDD数据集中测试统计结果如表1所示,平均查全率约为94.2%,平均准确率约为93.3%。

表1 测试统计结果

以下针对查全率低于100%的情况进行分析。从表1的数据来看,存在漏报导致查全率低的情况主要集中在男性戴太阳眼镜、女性戴普通眼镜和女性戴太阳眼镜三种情况。但通过对模型的检测发现,是否佩戴眼镜不是影响测试的重要因素,驾驶员的肢体移动、手势变化才是影响测试的主要因素。如图8所示,女性驾驶员在打哈欠的同时,用右手捂住了嘴巴,导致模型无法跟踪嘴部关键点坐标而产生了漏报。这些情况也为下一步对模型进行优化提供了方向。

图8 漏报举例Fig.8 Misreporting examples

5 结论(Conclusion)

疲劳检测在日常学习、生活的很多方面都有着广泛的应用。例如,随着我国汽车保有量的不断攀升,疲劳驾驶引发的交通事故数量也逐年升高。在疲劳驾驶行为导致交通事故前,驾驶员往往会有明显的先前疲劳特征,因此对疲劳驾驶状态进行检测并做出相应的预警,对于保障交通运输安全至关重要。本文提出的基于Dlib的模型通过人脸检测器、关键点定位器、特征计算器和状态预测器四个模块,能够快速有效地识别出人物打哈欠、瞌睡等疲劳状态。通过实验结果可知,模型能够满足实时性、鲁棒性和准确率的要求。

猜你喜欢
嘴部太阳眼镜关键点
聚焦金属关键点
肉兔育肥抓好七个关键点
此人为何杠得如此嚣张?
圆号教学中嘴部教学的重要性及训练方法研究
高中素描头像教学中提高嘴部刻画能力的策略探究
基于Horn-Schunck光流法的多目标反刍奶牛嘴部自动监测
智能太阳眼镜 Spectacles
医联体要把握三个关键点
政 策 法 规
锁定两个关键点——我这样教《送考》