摘要:为了准确、快速地检测驾驶员疲劳状态,设计一种基于深度学习和ERT算法的车载疲劳检测系统。该系统采用MTCNN算法进行人脸定位,使用KCF算法进行人脸追踪,应用ERT算法进行人脸特征点检测。获得特征点后,测定了眨眼动作的EAR阈值与哈欠动作的MAR阈值,在YawDD数据集上眨眼识别的准确率达到88.07%,哈欠识别的[F1-measure]达到了92.31。通过计算眨眼时的PERCLOS值与检测嘴巴张度MAR的大小来判断眼部与嘴部状态,使用决策树进行多特征融合疲劳判断,进而决定是否进行预警。
关键词:疲劳检测;PERCLOS;人脸特征点;ERT算法;人脸检测
中图分类号:TP391.41 文献标识码:A
文章编号:1009-3044(2022)04-0066-04
1 引言
2020年共发生244671起交通事故,其中机动车事故211074起,造成55950人死亡[1]。复杂交通环境与极端天气是交通事故发生的客观因素,驾驶员的危险驾驶行为是交通事故发生的主观因素,疲劳驾驶就属于危险驾驶行为的一种。驾驶员在连续长时间行车后,由于长期保持固定姿势,血液循环不畅引起肢体疲劳,长时间观察路况,缺少放松时间引起注意力涣散。生理与心理状态的恶化导致驾驶员在遭遇紧急情况时反应能力下降,进而造成交通事故。在中国,疲劳驾驶为主要诱因的交通事故占总数的20%,占特大交通事故的40%以上[2]。
针对疲劳状态的检测,国内外研究人员提出了三种基于不同技术的解决方案:基于驾驶员生理特征的疲劳检测,通过检测肌电波、脑电波和心电波等来判断疲劳状态;基于驾驶行为特征的疲劳检测,通过安置在车辆上的传感器,检测车辆加速度、方向盘偏转角度和航道偏移角度等来判断驾驶员疲劳状态;基于驾驶员生理反应特征的疲劳检测,通过检测眼部动作、哈欠动作和头部姿态等数据来判断疲劳状态。如文献[3]中研究发现疲劳时中央区和额叶的脑电疲劳信号复杂度下降。文献[4]使用长途客车的驾驶员反应能力参数、车辆转向速度参数以及方向盘参数建立了长途客车的疲劳驾驶检测模型。文献[5]使用HOG特征和SVM分类器提取人脸区域,使用人脸特征點检测算法得到驾驶员面部信息,判断驾驶员疲劳程度。
以上方法虽然能够得到驾驶员疲劳信息,但都有各自的局限性。基于驾驶员的生理特征检测得到的结果最精确,但生理特征如脑电波测量所需的设备会对驾驶员产生影响,使其本身成为造成危险的因素;基于驾驶行为特征的疲劳检测不会干扰驾驶人员,但其易受到车载量、道路情况及天气等因素影响,难以保证检测精度;HOG特征对噪点敏感,在成像质量不佳时容易出错。本文采取鲁棒性更好的深度学习算法来检测人脸,同时为了弥补深度学习算法速度慢的缺点,获得人脸区域后采取KCF跟踪算法进行人脸追踪以获得实时脸部区域,使用人脸特征点检测算法得到眼部与嘴部信息,计算PERCLOS值与判断哈欠动作,最终使用这两种特征得到疲劳检测结果。
2 系统主要算法介绍
2.1 人脸检测
进行人脸关键点检测之前需要得到人脸区域,本系统采取文献[6]中提出的MTCNN(多任务卷积神经网络)算法进行人脸检测。MTCNN算法是一种使用卷积网络的人脸检测与对齐的方法。算法采用级联CNN结构,将三个卷积神经网络P-Net、R-Net与O-Net级联到一起构成强分类器。该算法先使用输入图像构建图像金字塔,将不同尺寸的图像输入P-Net以对不同大小的人脸进行预测,P-Net将快速产生大量人脸候选框,将这些人脸候选框送入R-Net,R-Net将去除大部分低可信度的人脸候选框,O-Net最为复杂,会对R-Net筛选后的人脸框进行更严格的识别,输出最终人脸区域。MTCNN通过设计精巧的三级网络结构,实现了检测准确率与运算速度之间的平衡,在FDDB、WIDER FACE和AFLW数据集上取得了当时最好的成绩,性能表现提高明显,是目前在人脸检测方面性能最好的算法之一。
MTCNN算法输出如图1所示。
2.2 人脸跟踪
基于卷积神经网络的MTCNN算法消耗的算力资源较大,对硬件要求较高,难以做到跟随摄像头输入进行实时检测。机动车正常行驶途中驾驶员不会发生变更且头部姿态变化不大,人脸在每帧之间的移动幅度小,在获取人脸区域后,采用文献[7]中提出的KCF跟踪算法对人脸区域进行追踪,从而减少算力消耗。
KCF是一种差分追踪方法,初始帧使用指定的目标得到一个检测器,在每一帧上,在上一帧目标的坐标附近搜寻目标现坐标,使检测器置信度最大的区域即被标记为目标,之后使用当前目标信息更新检测器,从而得到连续的目标位置。若KCF算法得到的区域置信度过低,则采取MTCNN算法重新进行人脸定位。
对一段自制的包含单一人脸的视频使用MTCNN和MTCNN+KCF进行人脸定位操作,并记录数据。视频时长91s,两种方法花费时间对比如表1所示。
由表1可知,使用KCF算法进行人脸追踪可以节省一半以上时间,同时也小于视频时间,可以做到实时检测。
2.3 人脸特征点检测
使用MTCNN与KCF相结合后,可以得到实时稳定的人脸图像区域。为了能够快速计算PERCLOS值与MAR值,在此区域上使用文献[8]提出的ERT算法(基于回归树集合的人脸特征点检测算法)得到人脸关键点。该算法检测效果如图2所示,在眼部与嘴部边缘得到一圈特征点以表示其形状。
3 疲劳特征检测
日常生活中,人们可以通过观察他人的行为,尤其是面部行为判断其疲劳状态。驾驶员进入疲劳状态后,一次闭眼动作花费的时间相比正常状态有所增加,睁眼时眼睛睁开的程度也有一定减小[9]。若进入深度疲劳状态,可能出现驾驶员眼睛长时间闭合的严重情况,并伴随哈欠动作。据此,可以通过检测驾驶员的闭眼时间、哈欠动作来判断其疲劳程度。
3.1 基于 PERCLOS 的人眼疲劳检测
PERCLOS(Percentage of Eyelid Closure over the Pupil Over Time)指的是在一段时间内眼睛闭合时间占总时间的比值,是在疲劳检测中被广泛使用的判断指标。其计算公式(1)如下。
其中:tclsoe为单位时间内闭眼的时间, t为单位时间。一般认为当PERCLOS大于0.4时认为驾驶员处于疲劳状态。
判断当前图像驾驶员是否闭眼可以使用EAR(眼睛纵横比)值来判断。EAR能够直观地反映人眼的睁闭状态,使用比例而非绝对距离可以避免人眼大小对判断结果的影响,结合人脸特征点,可以快速、精准的反应人眼状态。如图3所示,通过人脸特征点检测算法得到右眼周围的6个二维坐标位置,在ERT算法中被标记为37~42,同理,左眼周围被标记为43~48,将这些点按从小到大的顺序记为p1~p6。由此可得到EAR计算公式(2)。
如图4所示,在一定时间内,EAR值相对变化不大,表明此时驾驶员处于睁眼状态,在某一时刻 EAR 值迅速下降,然后又再次返回到之前持续稳定的范围,表明此时驾驶员进行了眨眼动作。
获得眨眼信息后,计算PERCLOS值还要确定眼睛闭合的EAR阈值。[p80]指标规定眼睑遮住瞳孔面积的80%时眼睛处于完全闭合状态。大多数研究认为[p80]指标能够较好地反映驾驶员疲劳程度。将[p80]指标与EAR值相结合,PERCLOS的计算公式在本系统中被转化为公式(3)。
其中Fclsoe表示眨眼过程中EAR值低于阈值的帧数,F表示眨眼过程总帧数。
3.2 MAR检测哈欠时长
MAR即为嘴部纵横比,仿照EAR的原理,通过对嘴部纵横比的检测来判断嘴张开的大小。如图5所示,通过人脸特征点检测算法得到嘴部外侧的8个二维坐标位置,在ERT中被标记为49、51、52、53、55、57、58、59,将这些点按从小到大顺序标记为p1~p8,由此可得到MAR计算公式(4)。
考虑到当张嘴时内部特征点标注容易受牙齿、舌头的影响出现偏移,选取外部特征点作为检测对象。
选取了一名测试人员录制了一段视频,其中测试人员按时间顺序分别进行说话、唱歌和哈欠動作,其MAR变化如图6所示。由图6可知,当测试人员说话或唱歌时MAR快速上下波动,打哈欠时MAR峰值明显高于前两者,且会维持一段时间。故可测定哈欠动作与非打哈欠动作分界的MAR阈值,当MAR高于阈值并维持几秒时认为驾驶员打哈欠,处于疲劳状态。
4 实验与分析
4.1 EAR阈值确定实验
本文使用YawDD进行眨眼检测实验。YawDD共包含29段正面拍摄的车载驾驶员正面短视频,选取其中佩戴眼镜与未佩戴眼镜的男女视频各一份,总计318s,眨眼109次。实验结果如表2所示。由表2可知,取EAR阈值为0.205的眨眼检测效果较好。
本文实验结果与Hough变换圆检测在YawDD上的对比结果如表3所示。
由指标可以得到眼睛闭合时EAR阈值的计算公式(5)。
取θ=0.8、EARmin=0.1及EARopen=0.205,可以计算出EARopen=0.184。即当检测到EAR低于0.205时开始眨眼,低于0.184是认为眼睛闭合。
4.2 MAR阈值确定实验
哈欠行为的MAR均值与说话、唱歌行为的MAR均值区别较大,可以确定一个阈值来区分哈欠行为与其他行为。此外,哈欠行为通常持续2~3s,因此低于1s的高MAR值区间应被视为检测失误或说话、唱歌行为的特异点。本文使用YawDD来测定哈欠行为的MAR阈值,YawDD包含不同性别、不同人种以及佩戴眼镜的驾驶员在不同光照下模拟驾驶的视频。选取其中8段视频,共计哈欠26次。
为更好地描述检测效果,引入精确率(precision) 、召回率(recall)和F1-measure来对检测结果进行评估,其计算公式如下。
其中P表示精确率,R表示召回率,F1表示F1-measure。F1是对精确率和召回率的加权平均,能更好地反映整体效果,越高,说明整体效果越好。TP表示哈欠行为被检测为哈欠的次数;FP表示非哈欠行为被检测为哈欠的次数;FN表示哈欠行为被检测为非哈欠行为的次数,即漏检次数。
实验结果如表4所示。分析实验数据:阈值设定过[F1]高会导致部分哈欠无法被检测到,使得漏检次数过多;设置在0.8左右会在一次哈欠行为进行中出现MAR低于阈值的情况,从而导致系统将一次哈欠判定为两次,误检次数明显上升;设置在0.75可以获得较高的F1值,即获得较好的效果。
4.3 疲劳检测
通过前文的方法,系统已经获得了PERCLOS值与哈欠状态。传统方法给PERCLOS和哈欠次数一定的权值,形成一个线性公式得到疲劳值,再根据疲劳值判断疲劳结果容易出现一方权重过高直接决定判断结果的情况。本文采取特征融合的方式来综合判断疲劳状态,使用决策树取代线性公式。在本文的检测方法中,使用可随时获取的PERCLOS值作为优先判断条件,再查询是否有哈欠行为。该判断的决策树如图7所示。
本文从YawDD数据集中选取戴眼镜与不戴眼镜的男女驾车视频各一份进行疲劳检测实验,实验结果如表5所示。由表5可以看出本系统能在驾驶员进入疲劳状态时进行预警,且对光照、性别及眼镜遮挡有较好的鲁棒性。
5 结束语
本文通过MTCNN算法检测人脸,再通过KCF算法跟踪人脸区域,最后通过人脸特征点检测算法ERT得到EAR与MAR值,由此计算PERCLOS值与判断是否哈欠,最后通过多特征融合判断方法得到驾驶员疲劳信息。在通过实验表明,本系统在YawDD数据集上对眨眼动作进行检测的准确度达到89.91%,对哈欠动作进行检测的[F1-measure]指标为92.31,能够准确地在检测到哈欠动作与PERCLOS值大于0.4的时候进行预警,且对光照、性别及眼镜遮挡有较好的鲁棒性。
参考文献:
[1] 中华人民共和國国家统计局.中国统计年鉴.2004[M].北京:中国统计出版社,2004.
[2] 刘梦佳.基于卷积神经网络的疲劳驾驶检测系统设计[D].郑州:郑州大学,2020.
[3] Azarnoosh M,Nasrabadi A M,Mohammadi M R,et al.Investigation of mental fatigue through EEG signal processing based on nonlinear analysis:symbolic dynamics[J].Chaos,Solitons & Fractals,2011,44(12):1054-1062.
[4] 柴萌.长途客车驾驶员疲劳状态辨识与预警[D].长春:吉林大学,2019.
[5] 朱名流,李顶根.基于人脸特征点的疲劳检测方法研究[J].计算机应用研究,2020,37(S2):305-307.
[6] Zhang K P,Zhang Z P,Li Z F,et al.Joint face detection and alignment using multitask cascaded convolutional networks[J].IEEE Signal Processing Letters,2016,23(10):1499-1503.
[7] Henriques J F,Caseiro R,Martins P,et al.High-speed tracking with kernelized correlation filters[J].IEEE Transactions on Pattern Analysis and Machine Intelligence,2015,37(3):583-596.
[8] Kazemi V,Sullivan J.One millisecond face alignment with an ensemble of regression trees[C]//2014 IEEE Conference on Computer Vision and Pattern Recognition.June 23-28,2014,Columbus,OH,USA.IEEE,2014:1867-1874.
[9] 王迪.基于人眼状态的疲劳检测算法研究与应用[D].成都:电子科技大学,2020.
收稿日期:2021-10-25
作者简介:叶华洲(1999—),男,安徽芜湖人,硕士,主要研究方向为图像处理。