基于MediaPipe-MeshFace模型的面部多特征疲劳驾驶检测算法
作者: 刘畅 阿合特列克·别克扎提 王奥阳 张永琪 葛贝宁 邓洪莉 叶尔江·哈力木
摘要:针对当前疲劳检测技术在精确评估驾驶员疲劳程度、建立监测指标关联性,以及在处理极端头部运动时面部追踪方面的不足,提出了一种创新的解决方案,该方案依托于MediaPiPe-MeshFace模型,旨在实现更精细的疲劳驾驶识别。该模型通过精准定位面部468个关键点,特别强调了眼睑作为眼部疲劳判断的关键要素,以此捕获更为微妙的疲劳迹象,增强检测准确性。此外,引入欧拉角分析头部的空间姿态变化,提高了在头部快速大幅度移动情况下的稳定追踪能力。通过整合眼睑活动性、口部形态变化以及头部姿态的动态信息,构建了一套多维度面部特征融合的疲劳检测机制。实验验证了该方法不仅能够有效辨识驾驶员的疲劳状态,还成功实现了疲劳级别的划分,并在面对特定挑战如剧烈头部动作时,显著改善了面部疲劳特征的提取效能。
关键词:疲劳驾驶;多特征融合;MediaPiPe-MeshFace模型;眼睑;欧拉角分析;头部姿态追踪
中图分类号:TP391 文献标识码:A
文章编号:1009-3044(2024)22-0014-05
开放科学(资源服务)标识码(OSID) :<E:\飞翔打包文件目录001\电脑2024年8月上第二十二期打包文件\9.01xs202422\Image\image39.jpeg>
0 引言
根据数据统计显示,疲劳驾驶是导致交通事故的主要原因之一[1]。疲劳驾驶引发交通事故的概率是正常驾驶的4~6倍[2]。每年约有20%的交通事故由疲劳驾驶所致,而特大交通事故中,有40%以上与疲劳驾驶有关[3]。若能及早发出警示以避免交通事故的发生[4],对交通安全具有重要意义[5]。
随着科学技术的发展,疲劳驾驶检测方法不断完善,尤其是计算机视觉技术和深度卷积神经网络技术[6]。许多学者利用视觉传感器提取面部特征,并使用人脸检测技术和面部特征关键点定位方法来判断驾驶员的疲劳状态[7]。2019年,刘敏等首次提出了Adaboost+ASM+肤色检测+瞳孔定位的算法,该算法通过点头率、头部异常率和眨眼率等指标,为疲劳监测问题提供了解决思路和方案[8]。2012年,李昌智等人提出了一种方案,该方案优化了传统眼部和嘴部检测方法的局限性。他们使用肤色模型快速检测并确定人脸区域,并结合二值化和水平灰度方法准确定位眼睛位置,通过分析PERCLOS、眼睛闭合时间、眼睛眨眼频率、嘴巴张开程度和头部运动等综合因素对驾驶员的疲劳程度进行判定[9]。尽管早期相关研究在疲劳驾驶检测方面取得了一定进展,但现有的一些检测方法尚未能很好地量化驾驶员的疲劳程度和监测指标之间的关系,且疲劳的分级不够准确,以及在头部晃动幅度过大过快时无法跟踪面部等问题。因此,设计一种能够对疲劳状态进行分级,且稳定性好、识别率高的算法非常重要。
因此,本文提出了一种基于 MediaPipe-MeshFace 框架的面部多特征疲劳驾驶检测算法 FMFDD-3M (Facial Multi-feature Fatigue Driving Detection Algorithm Based on MediaPipe-MeshFace Modeling)。首先,采用 Google 的 MediaPipe-MeshFace 面网模型,能够精确定位面部的468个关键点。首次将眼睑作为眼部疲劳检测的重要参数之一,获取更细微的特征,以提高疲劳检测的识别率。然后,用欧拉角的变换来检测头部空间姿态[10],以增加头部晃动时目标检测的稳定性。最后,将眼睑动态与嘴部长宽比和头部空间姿态变化融合,得到一种面部多特征疲劳检测方法。该方法能够有效识别疲劳驾驶状态,实现疲劳状态分级,在头部晃动幅度过大过快时具有很高的稳定性。
1 眼部疲劳状态判断
1.1 眼睑信息提取与定位
眼部的变化能够很好地反映驾驶员的疲劳状态。在疲劳时,眼睛闭眼是其主要表现特征之一[11]。在闭眼的过程中,眼睑也会发生变化。因此,通过测量眼睑相关数据,可以更准确地获取眼睛的当前状况,从而识别驾驶员更细微的疲劳状态。观察发现,当眼睛闭合时,眼睑宽度增大,上下眼皮的距离减小。眼睑宽度与上下眼皮距离的比值的变化更为明显。因此,通过观察这些变化,可以更明显地判断驾驶员是否疲劳。眼睑宽度与上下眼皮距离的具体分布如下:
在眼睑定位方面,传统的 Dlib 模型仅包含68个标记点[12],仅检测眼部的上下眼皮和眼角的6个点。而 Google 的 MediaPipe-MeshFace 面网标记的468个关键点模型提供了更细微的面部检测,包括眉骨和上下眼皮的15个点。如图2所示,其中表示眉骨的5个选定点,表示上眼皮的5个选定点,表示下眼皮的5个选定点。利用眉骨和上眼皮各点之间的距离可以很好地描述眼睑的变化。
1.2 眼部疲劳状态识别
眨眼是人眼快速闭合和重新打开的过程[14]。每个人的眨眼过程略有差异,包括眼睛闭合和打开速度、眼睑宽度的变化以及眨眼持续时间等方面。通常情况下,眨眼持续时间约为100 ms到400 ms[15]。可以通过分析眼睑的闭合程度、眨眼频率以及眼睑宽度等参数来评估驾驶员的疲劳程度和注意力状态[16]。如果发现驾驶员的眼睑宽度长时间保持较大值或者频繁眨眼,这可能表示驾驶员处于疲劳状态或者注意力不集中[17],需要及时发出警告以减少交通事故的风险。此外,国际上公认的疲劳状态判定准则之一是 PERCLOS(Percent of Eye Closure over Time) 指标[18]。该指标综合考虑了驾驶员眼睛闭合的帧数所占比例 ECR(Eye Closure Rate) 、最长持续闭眼时间 MECT(Max Eye Closure Time) 以及眨眼频率 BF(Blink Frequency) 等因素,使疲劳状态的判断更加准确。因此,本文使用眼睑宽度与上下眼皮的距离比值,并结合眼睛闭合程度、眨眼频率以及 PERCLOS 指标,来识别出眼部的疲劳状态。
眼睑宽度与上下眼皮的距离的比值的计算过程如下:
任意两个三维坐标点 V1、V2 之间的空间距离计算公式:
[V1-V2x,y,z=x1-x22+y1-y22+z1-z22] (1)
首先,需要明确的是,人的眼睛形状并非完美的椭圆形,而更接近于一个扁平的球体。然而,为了简化计算和理解,本文将其近似为椭圆形。这些权重代表了眼睛不同部位对疲劳检测的影响程度。具体来说,0.05、0.20、0.50、0.20、0.05这五个权值分别代表了眼睛上下眼皮对应点的视觉重要性。在这个权值设置中,最大的权值是0.50,代表的是眼睛的中间部分,也就是瞳孔所在的区域。其次,0.20的权值代表的是眼睛的上半部分和下半部分。这两部分虽然不如瞳孔区域重要,但仍然对疲劳检测有一定的影响。最后,0.05的权值代表的是眼睛的最上方和最下方。这两部分对疲劳检测的影响最小。
[rations=0.05,0.20,0.50,0.20,0.05]
眼睑宽度与上下眼皮的距离的比值([eye_value]) 的计算公式:
[eye_value=n=05Pn-QnQn-Rn×rationsn] (2)
式(2) 中,当[n(n=1,2…5)]为1时[P1-Q1Q1-R1]表示第一组数据值,从睁眼到闭眼的过程中,第一组眼睑宽度[P1-Q1]增大,第一组上下眼皮的距离[P1-Q1]减小,[eye_value]值变大,因此,通过分析[eye_value]值,便可判断眼睛的闭合状态。
通过多次实验分析数据发现,在正常情况下,眼睛的[eye_value]值大约在范围内。而闭眼状态下,[eye_value]值在[0.2±0.03]范围内。因此,本文将阈值设定为0.3作为判断眼部状态的主要依据。当眼睛的[eye_value]值低于0.3时,可以判断为闭眼行为的发生。据调查,普通人在清醒状态下,眨眼频率为15~20次/分钟,眨眼间隔时间为3~4 s,每次眨眼的持续时间平均为100~400 ms[19]。在疲劳状态下,人的注意力更难集中,闭眼的持续时间也会明显延长。因此,闭眼持续时间是判断疲劳状态的主要指标之一。基于以上数据和多次实验证明,本文可以设定参数来判断疲劳状态。例如,设定一个判断周期为50帧,当闭眼持续时间超过判断周期的60%时,本文初步判断该驾驶员处于疲劳状态。
如图3所示,0~100帧内发生了两次眨眼,而100~350帧内发生了两次长时间闭眼和长时间睁眼。此外,大于400帧的区间发生了快速眨眼。图中清楚地展示了根据eye_value值眼部状态的时间序列变化。通过设定特定的阈值和图中的变化,可以了解眼部状态的变化,包括眨眼、长时间闭眼和长时间睁眼,以及快速眨眼的情况。
2 嘴部疲劳状态判断
在疲劳驾驶检测中,嘴部也是主要的检测指标之一[20]。在Dlib提出的68个关键点标记中,嘴唇只有8个标记点,无法精确测量嘴部变化。然而,在MediaPiPe-MeshFace面网模型中,嘴唇的特征点多达80个。通过多次实验,本文选取了16个具有代表性的特征点,这些特征点可以很好地衡量嘴唇的各种变化,同时提高了精度和结果的可靠性。常见的嘴部状态可分为闭合、张开和打哈欠等3种情况[21]。其中,打哈欠是最明显的瞌睡迹象[22],因此可以通过分析打哈欠的过程来判断驾驶员是否疲劳。根据嘴部闭合帧数所占比例MCR (Mouth Closure Rate)、嘴巴最长持续闭合时间MMCT (Max Mouth Closure Time)以及嘴巴张开频率MOF (Mouth Opening Frequency)等相关参数来分析驾驶员是否疲劳。
在上嘴唇和下嘴唇各选取7个点,左右嘴角分别选取1个点。其中,上嘴唇选取的7个点分别标记为[H1-H7],下嘴唇选取的7个点分别标记为[L1~L7],左嘴角选取点标记为W1,右嘴角选取点标记为W2。嘴部各点的具体位置如图4所示。为判断驾驶员疲劳状态的数据值([mouth_value]) ,使用上下嘴唇距离与两嘴角距离的比值。具体计算过程如下:
上下嘴唇距离([distance]) 的计算公式:
[distance=n=07Hn-Ln] (3)
两嘴角距离([corner]) 计算公式:
[corner=W1-W2] (4)
上下嘴唇距离与两嘴角距离的比值([mouth_value]) 计算公式:
[mouth_value=distance7corner] (5)
在嘴巴从闭合到张开的过程中,[distance]增大,[corner]减小,[mouth_value]值将会增大,因此,通过分析[mouth_value]值可初步判断驾驶员的疲劳状态。
3 头部姿态估计
在真实的驾驶环境中,驾驶员的头部姿态估计主要用于判断驾驶员是否疲劳,以确保安全并减少事故[23]。因此,头部姿态是评估驾驶员疲劳程度中的一个重要指标。本文利用 Google 的 MediaPipe-MeshFace 面网模型标记的468个关键点,对驾驶员头部姿态进行估计。具体方法是将以世界坐标系表示的3D人脸坐标映射到以图像坐标系表示的2D关键点坐标。转换原理如图5所示。
在图5中,从左到右依次为相机坐标系、图像坐标系、成像平面坐标系和世界坐标系。由于系统是通过相机提取人脸图像,因此首先需要将世界坐标系映射到相机坐标系,也就是将坐标系与摄像机对齐[25]。其中,世界坐标系中的x轴和y轴与图像的x轴和y轴对齐,正 z轴与摄像机的光轴对齐。坐标系转换的公式如下。
[XCYCZC1=RT01XWYWZW1] (6)