APP下载

基于深度学习和面部多特征融合的驾驶员疲劳检测研究

2022-12-26朱天军李学民

计算机测量与控制 2022年12期
关键词:曲线图嘴巴驾驶员

张 闯,朱天军,2,李学民

(1.河北工程大学 机械与装备工程学院,河北 邯郸 056038;2.肇庆学院 机械与汽车工程学院,广东 肇庆 526061;3.清华大学 苏州汽车研究院,江苏 苏州 215200)

0 引言

随着全球经济的迅速发展,车辆数量与日俱增,造成了大量的人员伤亡。根据世界卫生组织(WHO,world health organization)报道,交通事故是人类死亡的十大原因之一[1],驾驶员嗜睡或疲劳驾驶成为了交通事故的诱因之一。根据美国国家高速公路交通安全管理局(NHTSA, national highway traffic safety administration)依赖于警方和医院的报告,确定昏昏欲睡的驾驶员撞车事故的发生率,NHTSA估计在2017年涉及昏昏欲睡的司机多达9.1万人,导致5万多人受伤,近800人死亡。

驾驶员疲劳驾驶检测在交通运输中占据着十分重要的位置,预防疲劳驾驶的安全性也受到国内外研究学者的充分关注。对于疲劳驾驶检测方法:基于驾驶员的生理特征信号进行检测,例如基于脑电信号、心电信、眼电信号、呼吸信号检测等;基于车辆行为特征检测,检测车辆状态和参数,包括车道位置、方向盘转角、行驶速度、加速度、制动等[2-5];基于驾驶员面部特征检测,基于眼睛纵横比(EAR),眼睛闭合百分比(PECLORS)、嘴巴高宽比(MAR)的值对驾驶员的状态进行判断。

国外的研究现状如下:

1)基于驾驶员生理特征的疲劳检测。对于昏昏欲睡驾驶员生物电信号的早期研究主要依赖于脑电信号。Yeo等[6]建立了支持向量机(SVM, support vector machines)根据驾驶员的脑电信号(EEG)进行建模,识别了95%的睡意驾驶状态。Lin等[7-8]基于无线脑电图的实时脑计算机接口系统和基于脑电图的自组织模糊神经系统来预测疲劳驾驶。Dong等人通过嵌入人脑的电极获得脑电信号(EEG),并对这些信号进行分析,以确定驾驶员是否处于疲劳状态[9]。Sang-Joong Jung等[10]利用嵌入在方向盘上的心电传感器来采集受试者的心电信号,并利用HRV(心率变异性)时频域指数来提高信号的准确性。J.Leideng等[11]基于一种面向短周期心电信号的方法,提高了心电信号可识别性和频率分辨率的预处理方案,能够在仅5 s间隔的心电信号下有效识别疲劳。Hu等[12]根据眼电图(EOG)中提取与眼睑相关的参数作为数据输入,并利用SVM将驾驶员的状态分为清醒、疲劳和重度疲劳。研究者还结合EEG、ECG、EOG来提取相应的特征参数来检测疲劳驾驶。Ahn等[13]收集了EEG、ECG、EOG等多个模态和功能性近红外光谱仪镜数据,对驾驶员心理的神经生理相关性的状态进行识别。Wang等[14]结合EOG和EEG信号分析融合熵,检测驾驶员的疲劳状态。

2)基于车辆行为特征的疲劳检测。当驾驶员疲劳驾驶时,车辆的行驶状态也会发生相应的变化,利用车道偏置量、方向盘转向角度、车加速度等检测疲劳。车道偏移量是指车辆行驶过程中偏离车道的位移量,主要是利用计算机视觉技术识别车道,以监测车辆的行驶路径。Dingus等[15]在车道偏离与PERCLOS两者之间发现它们相关性,也可以作为驾驶疲劳检测指标之一。方向盘的转向角大小是判断疲劳驾驶的常用指标之一,方向盘长时间保持不变或有微小的变化、以及瞬间变化激增是判断疲劳驾驶的重要参数。Takei 等[16]通过方向盘传递信号判断驾驶员的疲劳程度,利用快速傅立叶变换和小波变换对方向盘转角信号进行预处理,提取相关特征。车辆的行驶速度以及加速度可以用车载传感器传递出数据,其速度快速下降的参数可以作为驾驶员疲劳状态的判断依据。D.Sandberg 等[17]通过测量汽车速度、车辆横向位移量、方向盘转向角度、气动角度,利用前馈神经网络对疲劳数据进行分类,作为判断疲劳驾驶的参数。

3)基于驾驶员面部特征的疲劳检测。随着计算机视觉和人工智能技术的快速发展,计算机计算能力有了很大的提高。基于深度学习驾驶员面部特征融合的疲劳检测算法日益受到人们的关注。X.Zhao等[18]基于卷积神经网络(CNN)的疲劳检测算法,该算法通过训练第一网络对人眼和非人眼进行分类,利用第二网络检测人眼特征点的位置,根据特征点的位置计算开眼度,并通过PERCLOS判断驾驶员的疲劳状态。F.Zhang 等[19]基于面部行为分析的检测方法,结合Adaboost和相关滤波器(KCF,kernel correlation filter)对红外采集设备采集到的面部图像进行面部检测和跟踪,利用级联回归定位特征点提取眼睛和嘴巴区域对卷积神经网络(CNN)对眼睛和嘴巴的状态进行识别。为了提高驾驶员疲劳检测的准确性和及时性,Liu, Z等[20]提出了一种基于深度学习面部表情分析的疲劳检测算法。利用训练好的模型检测眼睛和嘴的状态,对24个面部特征进行检测,利用模糊推理系统对驾驶员的疲劳状态进行推理。

国内研究现状如下:

1)基于驾驶员生理特征的疲劳检测。张朋[21]等针对EEG信号的非平稳性,设计的8层db4小波变换结构,有效分解出了δ、θ、α、β脑节律波。张春翠等[22]通过非线性复杂度参数对疲劳状态下的顶叶、额叶、颞叶与认知运动相关脑区的脑电信号进行特征描述。李增勇等[23]对驾驶员疲劳驾驶过程中心率变异性(HRV)功率频谱的变化,结合主观评价分析驾驶员的心脏自主神经功能状态。王琳等[24]通过传感器采集到汽车行驶过程中驾驶员的股二头肌的生理信号,经快速独立成分分析分离出肌电信号和心电信号,综合这3个特征参数能明显区分驾驶员的正常和疲劳两种状态。

2)基于车辆行为特征检测。蔡素贤等[25]基于CAN(controller area network)总线采集的车辆运行状态数据,提取了18项与驾驶行为相关的特征,并采用随机森林算法对疲劳驾驶进行识别。屈肖蕾[26]分析了驾驶人不同疲劳状态下的转向操作和车辆状态变量的波动幅度、速度、频度的变化特性,采用统计学方法对疲劳判别指标的差异显著性进行了检验。黄皓[27]使用驾驶模拟器搭建了模拟驾驶场景,并根据需要确定要获取的数据,包括方向盘转向角、车辆横摆角、车辆横向位置等,通过SSS自主评估法,确定实验过程中驾驶员的状态,建立疲劳样本的数据库。

3)基于驾驶员面部特征检测。廖明明等[28]对采集的驾驶员图像进行预处理,然后采用多任务级联神经网络进行面部检测并提取眼部和嘴部特征;设计了眼部状态识别网络和嘴部状态识别网络分别对眼部和嘴部的状态进行识别。苏锦瑾等[29]通过计算人眼长宽比EAR阈值来检测眨眼次数,计算嘴部的欧式距离MAR判断打哈欠次数,判断驾驶员睁闭眼、打哈欠和点头次数是否超过单位时间阈值判断其疲劳状态。刘炜煌等[30]使用多任务级联卷积网络定位驾驶员的嘴部、左眼,从驾驶员嘴部、左眼图像中提取静态特征,结合CNN从嘴部、左眼光流图中提取动态特征进行训练分类,使用静态图像进行驾驶员疲劳检测。周云鹏等[31]基于眼睛、嘴部的状态、头部的位置描述驾驶员状态,利用模糊系统推理得出驾驶员最终的疲劳状态。

通过阅读对国内外与驾驶员疲劳检测的相关文献发现,驾驶员疲劳检测的方法主要有基于驾驶员生理特征、车辆行为特征、驾驶员面部特征等检测方法。驾驶员生理特征检测主要采用EEG、ECG、EOG、呼吸信号等作为疲劳判断的参数,其优点准确率较高,缺点成本较高、需要驾驶员穿戴复杂的检测设备,影响驾驶员的驾驶状态。车辆行为特征检测主要采用车辆的运行轨迹、方向盘转角、车速等参数判断驾驶员的疲劳状态,不能够直观地反映出驾驶员的驾驶状态,受外界影响因素较大。驾驶员面部特征检测主要根据眨眼、打哈欠、点头的频率等来判断驾驶员的驾驶状态,相对于以上两种检测方法,其能够较为直观地检测到驾驶员的驾驶状态,不需要复杂的检测设备,只需要一颗高清摄像头就能够判断驾驶员的驾驶状态,但是基于驾驶员面部单独特征检测很难保证检测效果的准确率。给予以上的检测方法,本文将采用基于驾驶员面部多特征融合的方法对驾驶员的驾驶状态进行判断,将眼睛和嘴巴的特征进行融合,提高了检测的准确率。

1 研究方法

在本文中,基于深度学习和面部多特征融合来检测驾驶员的睡意,考虑驾驶员个体的差异性,设置面部检测模块。基于MTCNN检测驾驶员的面部区域,对检测得到的面部区域再通过Dlib工具包的应用程序进行区域标定,提取眼睛和嘴巴的感兴趣区域(ROI, region of interest),通过计算获得3个新的参数,分别为:1)EAR眼睛的纵横比,表示眼睛睁开或闭合;2)PERCLOS眼睛闭合百分比,反映驾驶员的瞳孔被眼睑覆盖的面积;3)MAR嘴巴高宽比,判断驾驶员是否打哈欠。

该系统的检测过程包括3个部分:1)首先通过MTCNN对驾驶员的面部进行识别,筛选出含有面部的图像或删除无法标定的图像;2)再利用Dlib工具包的68个点标定驾驶员的面部、眼睛和嘴巴区域;3)最后通过计算得到的EAR、PERCLOS和MAR的值,按其不同的权值相加得到M值,累加M>0.605的帧数记为N,通过比较N的值来判断驾驶员是否疲劳驾驶。

1.1 MTCNN面部检测和ROI提取

1.1.1 面部检测

基于深度学习和面部多特征融合检测驾驶员驾驶疲劳中,面部检测是关键的一步。由于驾驶员头部的姿势不停的变化以及黑暗环境因素的影响,在实际的驾驶中能够快速准确的检测出面部的全部特征有很大的难度。面部检测时,需要提取面部特征数目较多、且检测速度较慢,面部检测效率较低[32]。本文采用MTCNN深度级联多任务框架利用面部检测和对齐之间的相关性采用从粗到细的方式快速检测面部和地标位置[33],能够快速且准确的提取面部的全局特征。MTCNN的网络结构由3个级联子网络构成,分别为P-Net(proposal network)、R-Net(refine network)和O-Net(output network)。P-Net网络构造一个全连接网络,通过全卷积网络(FCN, fully convolutional networks)对图像金字塔进行初步的特征提取和标定边框;R-Net网络构造一个卷积神经网络,相对于P-Net增加了一个全连接层,滤除大量效果比较差的候选框;O-Net网络构造一个较为复杂的卷积神经网络,相对于R-Net多了一个卷积层,筛选出最优的候选框,并对人的面部特征点进行回归,最终输出5个面部特征点。

MTCNN对FDDB(face detection data set and benchmark)数据集进行了检测,FDDB数据集中共有2 845张图片,其中包含5 171张面部。MTCNN对2 845张图片进行检测,共检测出4 986张面部,结果显示MTCNN面部检测的准确率为96.4%,MTCNN算法充分利用任务之间潜在的联系,将面部检测和面部关键点检测同时进行,其实时检测运行速度为0.029 s,满足实际疲劳检测的要求。

1.1.2 提取ROI

感兴趣区域(ROI)是对MTCNN识别出来的面部进行区域提取,分别提取出来驾驶员的眼睛和嘴巴区域,只处理图像面部提取出来的区域,对其他区域不做处理,加快了EAR、PERCLOS、MAR的计算速度,从而提高了检测系统的判断速度。ROI的作用:1)加快程序处理速度,程序处理只需要处理被提取的区域,其他区域直接跳过;2)图像匹配中,可以定义模板。利用ROI提取眼睛和嘴巴的区域,程序只对提取的区域进行处理,加快图像处理速度。

1.2 基于dlib68个地标及面部特征标定

Dlib[34]是一个包含机器学习算法的开源工具包,其可以创建很多复杂的机器学习方面的软件来帮助解决实际问题。在Dlib工具包中,由面部68个地标对获得的检测面部标志进行对齐如图1所示。人脸对齐就是在已经检测到的面部基础上,自动找到人脸上的眼睛鼻子和脸轮廓等标志性特征位置。例如点37-40、43-46、49-68分别为左眼、右眼、嘴巴的基准关键点,获取当前检测图像的对应位置的关键点。总之,dlib的68个地标标记是基于左眼、右眼、嘴巴的相似变化,在不改变面部重点五官形状的基础上将人脸对齐到基准人脸。

图1 Dlib68个面部标志

1.2.1 眼睛标定

据统计,正常人的每分钟眨眼15次左右,每次眨眼的时间间隔为4 s左右,嗜睡时眨眼的频率会加快。眨眼频率是单位时间内眨眼次数,其计算公式为:

(1)

其中:NB为时间段T内发生眨眼的次数,由EAR来确定,NP为T时间段内视频的帧数。基于Dlib工具包获取的面部标志,采用6个定位点对每只眼睛进行标定如图2所示。可以根据眼睛的坐标位置计算出EAR的值为:

图2 眼睛标定

(2)

其中:P2、P3、P5、P6关键点为纵坐标的值,P1、P4关键点为横坐标的坐标值。EAR值取左眼EAR值和右眼EAR值得的平均值。该方程式分子计算垂直眼睛标志之间的距离,分母是计算水平眼睛标志之间的距离,由于水平点只有一组,而垂直点有两组,所以分母乘以2,以保证两组特征点的权重相同,依靠眼睛地标距离的比例来确定驾驶员是否眨眼。

卡内基梅隆研究所经过反复的实验与论证,提出了度量疲劳的物理量PERCLOS,并得到了NHTSA的认可[35]。PERCLOS定义为一定时间内眼睛的闭合度,是度量疲劳状态的一种有效的方法,一定时间间隔内眼睛闭合所占的时间比例超过15%时即认为是疲劳状态。由于眼睛的大小因人而异,眼睛的面积因受所在场景和头部运动的影响成动态变化的,眼睛的睁开程度是相对于自身的最大睁开状态而言的,可以将时间转换为视频帧数进行计算[36]。

目前,PERCLOS方法有3种判断眼睛闭合的不同准则,分别EM准则、P70准则、P80准则。其具体含义如下:

EM准则:瞳孔被眼睑覆盖超50%的面积,则认为眼睛是闭合的;

P70准则:瞳孔被眼睑覆盖超70%的面积,则认为眼睛是闭合的;

P80准则:瞳孔被眼睑覆盖超过80%的面积,则认为眼睛是闭合的。

PERCLOS原理曲线如图3所示。

图3 PERCLOS原理图

t0~t5为一个闭眼周期,t0~t1为完全睁眼到睁眼80%的时间,t1~t2为睁眼80%到睁眼20%的时间,t3~t4为睁眼20%到睁眼80%所需要的时间,t4~t5为睁眼80%到完全睁开眼所需要的时间。

一周期的闭眼百分比为:

(3)

闭眼时长:

T(t0~t5)=t3-t2

(4)

同样,可以推导出在一定时间内的PERCLOS值及平均闭眼时长,设在一定时间T内有n个周期,且k个闭眼周期内眼睛覆盖瞳孔的比例超过80%的时间为Tk,当k

(5)

平均闭眼时长:

(6)

1.2.2 嘴巴标定

驾驶员嘴巴状态通常有3种情况,分别为闭合、说话和打哈欠,在疲劳状态下,人会频繁地打哈欠。提取面部的嘴部区域的关键点类似于眼部疲劳特征的提取,面部嘴部区域的关键点分布如图4所示。

图4 嘴巴标定

嘴巴的高度H和宽度W计算为:

(7)

H与M的比值MAR为:

(8)

其中:xmax、xmin分别为第54个和第48个面部关键点的横坐标,ymax为第56个、第58个关键点纵坐标的平均值,ymin为第50个,第52个关键点纵坐标的平均值。

打哈欠的频率fyawn为:

(9)

NY为T时间段内打哈欠的次数,NT为T时间段内视频的帧数。

1.2.3 系统检测流程

通过摄像头采集驾驶员驾驶车辆时的实时图像,通过MTCNN筛选出含有面部的图像,对含有的面部的图像提取眼睛和嘴巴的ROI区域,并计算EAR、PERCLOS和MAR的值。SVM本质模型是特征空间中最大化间隔的线性分类器,是一种而分类器模型。通过SVM对EAR、MAR、PERCLOS值进行分类,将其分离为EAR大于0.20、MAR大于0.6、PERCLOS大于0.8的点和EAR小于等于0.20、MAR小于等于0.6、PERCLOS小于等于0.8的点,将这些大于各自其值的点进行筛选加快EAR、PERCLOS、MAR值得计算速度,提高检测效率。

图5 系统工作流程图

2 实验数据及结果

在本节中,对实验环境的搭建进行介绍,依据实验得出EAR、PERCLOS、MAR和M的曲线图,对驾驶员清醒状态下和疲劳状态下的曲线图进行对比。

2.1 实验环境配置

基于Ubuntu18.04系统在Visual Studio Code中对Python语言进行实验环境搭建及配置,计算机显卡采用NVIDIA GeForce GTX1650、内存16GB DDR4和安装模块的相应版本号如表1所示。

表1 实验环境配置

2.2 实验对象及样本

本文通过实车进行采集检测图像样本,对检测系统进行验证。图像采集途径例如公交车、短途货车、长途货车等司机在不同环境及不同时间段下的驾驶状况。通过采样数据显示,司机在长时间驾驶车辆以及凌晨左右容易犯困,对疲劳、严重疲劳区段进行不同的标记,为检测系统实际检测结果作对比分析。采集样本如图6所示。

图6 采集样本

2.3 眼睛检测

2.3.1 EAR

一次完整的闭眼过程的EAR曲线如图7所示,横坐标为视频的帧数,纵坐标分别为EAR值,设置EAR的阈值为0.2,通过支持SVM分类器将EAR<0.2的值进行权值计算,权值比重为0.2。EAR值取左眼的EAR值(leftEAR)和右眼的EAR值(rightEAR)的平均值,模拟了一组驾驶员眨眼或闭眼计算EAR的曲线如图8所示。

图7 闭眼过程的EAR曲线图

图8 EAR曲线图

从图8中可以看出有两次眨眼和三次闭眼过程,与模式过程中眨眼和闭眼的次数相同,分析结果如表2所示。从模拟驾驶员眨眼或闭眼的过程得到的EAR曲线图,从中得到的结论:系统在检测驾驶员眨眼或闭眼过程中,几乎不存在漏检或者误检,检测的实时性和计算的准确度达到了较高的水平。

表2 EAR曲线分析结果

2.3.2 PERCLOS

在图8的EAR值曲线图的基础上计算得到闭眼时刻的PERCLOS值曲线如图9所示,横坐标为视频的帧数,纵坐标为眼睛闭合的百分比,虚线代表的值为0.8。PERCLOS的计算过程是依次取EAR值的每一帧,每连续五帧循环一次计算,步长为1得出PERCLOS值。

图9 PERCLOS曲线图

依据P80准则,PERCLOS大于或等于0.8时,眼睑覆盖眼球的面积超过了80%,判定为闭眼状态。通过支持SVM分类器将PERCLOS大于或等于0.8的值进行权值计算,权值比重为0.7。

2.4 嘴巴检测

嘴部状态的检测如图10所示,横坐标为视频的帧数,纵坐标为MAR值。图10(a)为驾驶员嘴巴闭合状态,MAR值在0.350到0.375之间;图10(b)为驾驶员嘴巴说话状态,MAR值在0.375到0.60之间;图10(c)为驾驶员嘴巴打哈欠状态,MAR值在0.60以上。通过支持SVM分类器将MAR大于0.60的值进行权值计算,权值比重为0.1。

图10 MAR曲线图

2.5 权值计算

通过在闭眼时刻得到的EAR值、PERCLOS值和MAR值分别按0.2、0.7和0.1的比重进行权值计算得到参数M的曲线图如图11和图12所示横坐标为视频的帧数,纵坐标分别为EAR、MAR、PERCLOS和M的值。图11为未打哈欠状态下的曲线图,图12为打哈欠状态下的曲线图。图12中右下角图中的虚线代表的值为0.605,作为判断驾驶员是否疲劳驾驶的依据。

图11 未打哈欠状态下的曲线图

图12 打哈欠状态下的曲线图

对图11和图12分析,驾驶员未打哈欠的情况下M大于0.605值的帧数相对较少;驾驶员在打哈欠的情况下往往伴随着长时间闭眼,使M大于0.605的帧数相对增加。驾驶员开始打哈欠时一般境况下是身体出现疲劳出现犯困的情况,从图13可以看出驾驶员长时间打哈欠时M大于0.605值的帧数在25~50之间,可以给予驾驶员一次疲劳警告。

2.6 实验结果

为了验证本文提出的驾驶员疲劳状态检测方法的有效性,通过两段视频进行驾驶员疲劳状态检测正确性评估。第一段为疲劳状态下的驾驶员疲劳检测结果,如图13所示,第二段为清醒状态下的驾驶员疲劳状态检测结果,如图14所示。分别得到EAR、MAR、PERCLOS和M的曲线图,横坐标为视频的帧数,纵坐标分别为EAR、PERCLOS、MAR和M的值。通过M曲线可知,M大于0.605为红色曲线部分。通过多次实验验证得出N大于25或小于等于50认为是疲劳状态,N大于50为重度疲劳状态,N为M大于0.605依次累加的帧数。

图13 疲劳状态下的驾驶员疲劳检测结果

图14 清醒状态下的驾驶员疲劳检测结果

图13的M曲线中有5段疲劳状态曲线和2段重度疲劳曲线,其余部分为清醒状态下的曲线,分析结果如表3所示。图14中M曲线的部分没有出现N大于25的部分,则表明没有出现疲劳状态,与检测样本保持一致。通过图13和图14中M曲线得出的结果以及大量的实车测试结果显示,采用DirCare系统[37]的一种新的面部区域检测方法对同样的实验数据进行测试,计算得出的准确率、灵敏度的均值为92.3%和89.6%,本文采用的检测系统计算得出的准确率、灵敏度为93.1%和90.2%。通过比较可知,本文采用的检测系统无论是检测的准确率还是检测的灵敏度都有明显的优势。本文采用的检测系统没有出现误检情况,满足实际检测要求。

表3 驾驶员状态分析

3 结束语

基于深度学习和面部多特征融合的疲劳检测研究,得出以下结论:

1)对MTCNN进行了面部检测测试,该网络在面部检测的准确率达到了96.4%,面部检测速度为0.029 s,满足实际要求。

2)为了提高程序的计算速度以及实时性,将各个参数按不同权重进行融合计算,即保证了检测的准确度和避免漏检或误检情况,也防止了视频卡帧或丢帧的现象。

3)本文提出了新的参数M和N,依据N值的大小来判断驾驶员的疲劳状态。该检测系统的准确率达到了93.1%,灵敏度达到了90.2%,满足了实际情况下的疲劳检测系统的要求。

猜你喜欢

曲线图嘴巴驾驶员
基于高速公路的驾驶员换道意图识别
基于眼动的驾驶员危险认知
驾驶员安全带识别方法综述
秦皇岛煤价周曲线图
秦皇岛煤价周曲线图
嘴巴嘟嘟
秦皇岛煤价周曲线图
秦皇岛煤价周曲线图
嘴巴不见了
好好的嘴巴