APP下载

基于Dlib库的驾驶员疲劳驾驶检测系统

2021-12-14周枫晓刘保罗霍文怡

物联网技术 2021年12期
关键词:欧拉角人脸驾驶员

王 秀,周枫晓,刘保罗,霍文怡

(洛阳理工学院 计算机与信息工程学院,河南 洛阳 471023)

0 引 言

随着经济的飞速发展,货运行业的发展趋势愈加迅猛,货车驾驶员24 h都留在车上的现象已成为行业常态。据国家统计局数据显示,近几年的特大事故中,有超40%的事故是由于驾驶员疲劳驾驶造成的[1]。为了减少疲劳驾驶导致的交通安全问题,本项目旨在设计一款可以自动实时检测驾驶员是否疲劳驾驶并发出警报的系统。

20世纪60年代,世界各地已开始对疲劳驾驶进行初步研究,到20世纪90年代,疲劳程度测量方法已有较大进展,具有代表性的是美国的DDDS(The Drowsy Driver Detection System)系统、日本的DAS2000型路面警报系统(The DAS2000 Road Alert System)等[2],但目前仍缺少被广泛认可并普遍适用的系统,究其原因,可能在于系统检测指标单一且无法实时检测驾驶员的状态。

经查阅资料[1,3-5],疲劳在人体面部表情中表现出大致3个类型:眨眼、打哈欠、点头,本系统通过树莓派调用摄像头统计驾驶员眨眼、打哈欠、点头的次数,当任意一项超过设定值时,即发出警报,同时将统计的数据通过MQTT协议上传到云平台和Web端,再利用APP实时获取Web端的数据,便于驾驶员的家人通过APP实时掌握驾驶员的开车状态,并获取车辆的准确位置。一旦驾驶员处于疲劳状态,APP可通过控制移动端振动、响铃等方式通知驾驶员,以便及时采取措施应对突发状况。

1 系统框架

本系统主要由树莓派SCI摄像头模块、GPRS模块、语音报警模块和博通BCM2711芯片组成,系统框架如图1所示。由于本系统对人脸识别算法要求较高,且需要在短时间内处理大量的图像数据,所以在经过分析比较之后,最终选用博通BCM2711芯片作为系统的核心处理器。

图1 系统框架

本系统的主要功能如下:

(1)信息采集。通过摄像头采集视频流与驾驶员眨眼、打哈欠、点头等信息。

(2)GPRS定位。定位该系统所在车辆的实时位置。

(3)通信功能。将采集到的信息和实时位置通过MQTT协议上传到云平台和Web端,再通过MQTT协议传输给手机APP端。

(4)语音报警。当判断驾驶员疲劳驾驶时,控制语音模块提示驾驶员停车休息,同时警报信息也将上传云平台。

2 驾驶员疲劳驾驶检测

本系统通过收集人脸朝向、人脸位置、瞳孔朝向、眼睛开合度、眨眼频率、瞳孔收缩率等数据,提取驾驶员面部68个特征点及其坐标,准确定位驾驶员人脸的位置,并利用眼部的12个特征点计算眼部长宽比EAR,根据嘴部的6个特征点计算嘴巴的MAR,利用其他坐标结合HPE算法计算头部转动的欧拉角。将这些数据分别与对应的阈值比较,从而统计出驾驶员眨眼、打哈欠和点头的次数。通过对驾驶员眨眼、打哈欠、点头次数的统计,可实时判断驾驶员的注意力集中程度,分析驾驶员是否疲劳驾驶,并及时作出安全提示。

2.1 基于Dlib库的68个关键点采集

Dlib库是一个开源的工具箱,包括机器学习模块、深度学习模块、图像处理模块等[6]。该系统采用Dlib库中人脸68个关键点检测shape_predictor_68_face_landmarks.dat的dat模型库及视频中的人脸,之后返回人脸特征点坐标、人脸框及人脸角度等。本系统利用这68个关键点对驾驶员的疲劳状态进行检测,算法如下:

(1)初始化Dlib的人脸检测器(HOG),然后创建面部标志物预测;

(2)使用dlib.get_frontal_face_detector() 获得脸部位置检测器;

(3)使用dlib.shape_predictor获得脸部特征位置检测器;

(4)分别获取左、右眼面部标志的索引;

(5)打开cv2本地摄像头。

算法程序如下所示:

对视频流每帧图片进行处理,获取连续3帧内眼睛、嘴巴的长宽比和瞌睡点头时的欧拉角,本系统阈值初步设为0.2、0.5和0.5。因每个人的眼睛、嘴巴和头部大小比例不同,系统采取平均值计算方法:先采集30次数据,取其平均值作为默认的阈值(为保证数据的准确性,采集数据时应平视摄像头)。分别计算左眼和右眼的眼睛长宽比(EAR),求平均值后作为最终的EAR,如果EAR小于阈值0.2,则计数加1;若连续3次都小于阈值,则表示进行了一次眨眼活动;若连续采集到20次眨眼数据,则说明驾驶员在疲劳驾驶。同理,如果嘴巴长宽比(MAR)连续3次大于0.5,说明驾驶员打哈欠;若连续采集到20次打哈欠数据,则说明驾驶员在疲劳驾驶。

计算程序如下所示:

2.2 基于EAR、MAR和HPE算法的疲劳检测

2.2.1 基于EAR算法的眨眼检测

当人眼睁开时,EAR在某个值域范围内波动,当人眼闭合时,EAR迅速下降,理论上接近于0。当EAR低于某个阈值时,眼睛处于闭合状态;当EAR由某个值迅速下降至小于该阈值,再迅速上升至大于该阈值,则判断为一次眨眼。为检测眨眼次数,需要设置同一次眨眼的连续帧数。眨眼速度较快,一般1~3帧即可完成眨眼动作。眼部特征点如图2所示。EAR计算公式[3]见式(1):

图2 眼部特征点

当后帧眼睛宽高比与前一帧差值的绝对值(EAR)大于0.2时,认为驾驶员在疲劳驾驶。Dlib库68个特征点模型如图3所示。

图3 Dlib库68个特征点模型

左右眼开合度可通过公式(2)得到:

眼睛睁开度从大到小为进入闭眼期,从小到大为进入睁眼期,计算最长闭眼时间(可用帧数来代替)。闭眼次数为进入闭眼、进入睁眼的次数。

2.2.2 基于MAR算法的哈欠检测

基于MAR算法的哈欠检测,利用Dlib提取嘴部的6个特征点,通过这6个特征点的坐标(51、59、53、57的纵坐标和49、55的横坐标)来计算打哈欠时嘴巴的张开程度。当一个人说话时,点51、59、53、57的纵坐标差值增大,从而使MAR值迅速增大,反之,当一个人闭上嘴巴时,MAR值迅速减小。

通过公式(3)计算MAR来判断是否张嘴及张嘴时间,从而确定驾驶员是否在打哈欠。阈值应经过大量实验,能够与正常说话或哼歌区分开来。为提高判断的准确度,可采用双阈值法进行哈欠检测,即对内轮廓进行检测:结合张口度与张口时间进行判断。Yawn为打哈欠的帧数,N为1 min内总帧数,设双阈值法哈欠检测的阈值为10%,当打哈欠频率Freq>10%时,则认为驾驶员打了1个深度哈欠或者至少连续2个浅哈欠,此时系统进行疲劳提醒。

2.2.3 基于HPE算法的点头检测

HPE(Head Pose Estimation, HPE)算法步骤:2D人脸关键点检测,3D人脸模型匹配,求解3D点和对应2D点的转换关系,根据旋转矩阵求解欧拉角。检测过程中需要使用世界坐标系(UVW)、相机坐标系(XYZ)、图像中心坐标系(uv)和像素坐标系(xy)。

世界坐标系转换到相机坐标系:

相机坐标系转换到像素坐标系:

像素坐标系与世界坐标系的关系为:

图像中心坐标系转换到像素坐标系:

得到旋转矩阵后,求欧拉角:

设定参数阈值为0.3,在一个时间段,如10 s内,当低头欧拉角|Pitch|≥20°或者头部倾斜欧拉角|Roll|≥20°的时间比例超过0.3时,则认为驾驶员处于瞌睡状态,发出预警。

3 系统检测结果

检测视频截图如图4所示,图中显示的数据有EAR、MAR、Z、Blinks、Yowning、Nod,分别表示眼睛长宽比、嘴巴长宽比、头部倾斜角度、眨眼、打哈欠、点头的统计次数。SLEEP表示瞌睡警告,当判断驾驶员处于瞌睡状态时,系统屏幕会显示SLEEP。

图4 检测视频截图

3.1 人脸检测结果

由于驾驶员在驾驶过程中经常会受到光照和外力干扰等因素的影响,所以在实验中使用了一定数量不同环境下的图像数据来测试系统的人脸检测性能[7]。测试结果如图5所示。

图5 人脸检测结果

3.2 疲劳驾驶检测结果

随机选取实验视频中的30段视频,每段视频的时长为1 min,检测结果见表1所列。

表1 疲劳驾驶检测结果

以上是30组数据中的4组,综合所有数据,有27组数据判断结果基本准确。剩下的4组中,有1组因驾驶员面部有遮挡,导致一些数据不准确,有1组将正常驾驶误判,另外1组将疲劳驾驶判断为轻度疲劳。

4 通信协议

为了实现实时远程监测与控制,本系统通过WiFi通信模块[8]将采集的数据上传至阿里云平台,采用MQTT协议与阿里云平台通信,通信协议如图6所示。

图6 通信协议

4.1 阿里云平台数据上报与通信格式

本系统对疲劳驾驶的判定依靠3项指标,分别是眼睛长宽比、嘴巴长宽比和头部的变化角度,标识符分别为EAR、MAR、Z,数据类型为浮点型float。EAR、MAR的取值范围为0.00~1.00,Z的取值范围为-90°~90°。疲劳驾驶语音警报的标识符为DriveWarning,数据类型为int,取值为0、1,其中0代表未达到疲劳标准,无需语音提醒;1代表达到疲劳标准,开启语音提醒。

通过三元组实现与云平台的连接,采用Python语言开发,利用MQTT协议、Json格式将数据发布到云平台。数据上报程序如下所示:

self.__linkkit.thing_answer_service("attack", self.__call_service_request_id, 200, {})

通信程序如下所示:

4.2 阿里云平台数据上报

将数据上报到云平台后,在云平台上可以显示如图7所示的采集和计算后数据。

图7 云平台数据显示

5 结 语

本系统通过Dlib库中的人脸识别和dat模型中的68个关键点,结合EAR、MAR和HPE算法,判断驾驶员是否眨眼、打哈欠、点头,不仅实现了检测指标多样化,还实现了实时检测驾驶员疲劳状态的目的,可用于货车、汽车、出租车等机动车辆。本系统与云平台和Web端通信,可将驾驶员的实时精神状态和实时位置通过APP告知其家人,为驾驶员的生命安全增加一份保障[9-10]。本系统的不足之处在于当驾驶员面部有部分遮挡时就无法准确判断驾驶员是否处于疲劳驾驶状态,只会发出语音提示,提醒驾驶员“您已脱离摄像范围”。因此,下一步的工作重点是如何解决在有遮挡情况下也能正确识别驾驶员精神状态的问题。

注:本文通讯作者为刘保罗。

猜你喜欢

欧拉角人脸驾驶员
基于高速公路的驾驶员换道意图识别
驾驶员安全带识别方法综述
有特点的人脸
三国漫——人脸解锁
从CATIA位置矩阵求解欧拉角的计算方法分析
一种基于EGI和标准人脸模板的三维人脸点云拼合算法
起步前环顾四周是车辆驾驶员的义务
马面部与人脸相似度惊人
大姿态角入水时的鱼雷半实物仿真方法研究
四元数与欧拉角刚体动力学数值积分算法及其比较