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

物联网技术  2021年 / 第12期
260 引 言
随着经济的飞速发展,货运行业的发展趋势愈加迅猛,货车驾驶员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 驾驶员疲劳驾驶检测
本系统通过收集人脸朝向、人脸位置、瞳孔朝向、眼睛
王 秀,周枫晓,刘保罗,霍文怡
(洛阳理工学院 计算机与信息工程学院,河南 洛阳 471023)
摘 要:
同类相食据我国交通事故数据可知,疲劳驾驶导致的人员伤亡占事故人数的20%~30%,所以研究疲劳驾驶实时检测系统势在必行。查阅相关文献可知,疲劳在人体面部表情中大致表现为3个类型:眨眼、打哈欠、点头,系统利用Dlib 库提取驾驶员面部68个特征点及坐标,定位驾驶员人脸位置,将通过坐标计算出的眼睛、嘴巴长宽比与阈值进行比较,以统计驾驶员眨眼和打哈欠的次数;同时,通过HPE 算法计算驾驶员头部姿态的欧拉角,以统计驾驶员的点头次数。根据驾驶员眨眼、打哈欠、点头的次数,系统可分析驾驶员是否疲劳驾驶并能够针对驾驶员当前的状态及时作出安全提示。
关键词:
Dlib 开源库;脸部特征点;EAR ;疲劳驾驶;交通事故;疲劳程度测量中图分类号:TP391.41;U463.6      文献标识码:A      文章编号:
2095-1302(2021)12-0026-04收稿日期:2021-03-03  修回日期:2021-04-08
基金项目:国家级大学生创新创业训练计划项目(2020110170005)
2021年 / 第12期  物联网技术
27
特征点计算嘴巴的MAR ,利用其他坐标结合HPE 算法计算头部转动的欧拉角。将这些数据分别与对应的阈值比较,从而统计出驾驶员眨眼、打哈欠和点头的次数。通过对驾驶员眨眼、打哈欠、点头次数的统计,可实时判断驾驶员的注意力集中程度,分析驾驶员是否疲劳驾驶,并及时作出安全提示。2.1 基于Dlib 库的68个关键点采集
Dlib 库是一个开源的工具箱,包括机器学习模块、深度学习模块、图像处理模块等[6]。该系统采用Dlib 库中人脸68个关键点检测shape_predictor_68_face_landmarks.dat 的dat 模型库及视频中的人脸,之后返回人脸特征点坐标、人脸框及人脸角度等。本系统利用这68个关键点对驾驶员的疲劳状态进行检测,算法如下:
(1)初始化Dlib 的人脸检测器(HOG ),然后创建面部标志物预测;
(2)使用_frontal_face_detector () 获得脸部位置检测器;
(3)使用dlib.shape_predictor 获得脸部特征位置检测器;(4)分别获取左、右眼面部标志的索引;(5)打开cv2本地摄像头。算法程序如下所示:
print("[INFO] loading facial ")detector = _frontal_face_detector()
predictor = dlib.shape_predictor(' C:/Users/86178/Desktop/Dilb/fatigue_detecting/model/shape_predictor_68_face_landmarks.dat')
(lStart,IEnd)=face_utils.FACIAL_LANDMARKS_IDXS["left_eye"]
(rStart,rEnd)=face_utils.FACIAL_LANDMARKS_IDXS["right_eye"]
(m S t a r t ,m E n d )=f a c e _u t i l s.FA C I A L _L A N D M A R K S _IDXS["mouth"]
cap = cv2.VideoCapture(0)
对视频流每帧图片进行处理,获取连续3帧内眼睛、嘴巴的长宽比和瞌睡点头时的欧拉角,本系统阈
值初步设为0.2、0.5和0.5。因每个人的眼睛、嘴巴和头部大小比例不同,系统采取平均值计算方法:先采集30次数据,取其平均值作为默认的阈值(为保证数据的准确性,采集数据时应平视摄像头)。分别计算左眼和右眼的眼睛长宽比(EAR ),求平均值后作为最终的EAR ,如果EAR 小于阈值0.2,则计数加1;若连续3次都小于阈值,则表示进行了一次眨眼活动;若连续采集到20次眨眼数据,则说明驾驶员在疲劳驾驶。同理,如果嘴巴长宽比(MAR )连续3次大于0.5,说明驾驶员打
def eye_aspect_ratio(eye):
A = dist.euclidean(eye[1], eye[5])
B = dist.euclidean(eye[2], eye[4])
//计算2个垂直集合之间的欧式距离
C = dist.euclidean(eye[0], eye[3]) //计算水平间的欧几里得距离ear = (A + B) / (2.0 * C)  //眼睛长宽比的计算
return ear
2.2 基于EAR 、MAR 和HPE 算法的疲劳检测2.2.1 基于EAR 算法的眨眼检测
当人眼睁开时,EAR 在某个值域范围内波动,当人眼闭合时,EAR 迅速下降,理论上接近于0。当EAR 低于某个阈值时,眼睛处于闭合状态;当EAR 由某个值迅速下降至小于该阈值,再迅速上升至大于该阈值
,则判断为一次眨眼。为检测眨眼次数,需要设置同一次眨眼的连续帧数。眨眼速度较快,一般1~3帧即可完成眨眼动作。眼部特征点如图2所示。EAR 计算公式[3]见式(1):
图2 眼部特征点
EAR 263514=
−+−−
p p p p p p 2                      (1)
当后帧眼睛宽高比与前一帧差值的绝对值(EAR )大于0.2时,认为驾驶员在疲劳驾驶。Dlib 库68个特征点模型如图3所示。
图3 Dlib 库68个特征点模型
左右眼开合度可通过公式(2)得到:
EyeOpenness =normalize ·+···Right 138p y p y p y p y p x p x 424394037−−−
(2)
眼睛睁开度从大到小为进入闭眼期,从小到大为进入睁眼期,计算最长闭眼时间(可用帧数来代替)。闭眼次数为进入闭眼、进入睁眼的次数。
物联网技术  2021年 / 第12期
28坐标和49、55的横坐标)来计算打哈欠时嘴巴的张开程度。当一个人说话时,点51、59、53、57的纵坐标差值增大,从而使MAR 值迅速增大,反之,当一个人闭上嘴巴时,MAR 值迅速减小。
MAR 5749=−+−−
Y Y Y Y X X 515953552                    (3)
pengyouwang
通过公式(3)计算MAR 来判断是否张嘴及张嘴时间,从而确定驾驶员是否在打哈欠。阈值应经过大量实验,能够与正常说话或哼歌区分开来。为提高判断的准确度,可采用双阈值法进行哈欠检测,即对内轮廓进行检测:结合张口度与张口时间进行判断。Yawn 为打哈欠的帧数,N 为1 min 内总帧数,设双阈值法哈欠检测的阈值为10%,当打哈欠频率Freq>10%时,则认为驾驶员打了1个深度哈欠或者至少连续2个浅哈欠,此时系统进行疲劳提醒。2.2.3 基于HPE 算法的点头检测
HPE (Head Pose Estimation, HPE )算法步骤:2D 人脸关键点检测,3D 人脸模型匹配,求解3D
点和对应2D 点的转换关系,根据旋转矩阵求解欧拉角。检测过程中需要使用
X Y Z R U V W T R T U V W          =          +=[]
,1                    (4)相机坐标系转换到像素坐标系:
s x y f c f c X Y Z x x y y 100001          =
(5)像素坐标系与世界坐标系的关系为:
s x y f c f c R T U V W x x y y 1000011          =
[]
,
(6)图像中心坐标系转换到像素坐标系:
s x y f c f c u v x x y y      =
001                          (7)得到旋转矩阵后,求欧拉角:ℜ=          =+γγγγγγγγγφϕφθ000102101112202122cos cos sin sin si
i n sin cos cos sin sin sin cos sin cos cos sin sin co ϕφθφϕφθϕφϕφθϕ
−+−+s cos sin sin cos sin cos cos sin sin cos cos φθφϕφθϕθϕθ
θϕ+−
(8)
设定参数阈值为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 疲劳驾驶检测结果
视频类别眨眼次
数/次打哈欠 次数/次
点头次 数/次疲劳判定结果1正常驾驶
1630轻度疲劳11轻度疲劳25139轻度疲劳22正常驾驶1250正常驾驶30疲劳驾驶
31
27
15
疲劳驾驶
2021年 / 第12期  物联网技术
纤维素乙醇
颅内高压29
外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, {})
通信程序如下所示:
"id":"445618915", //ID 消息身份标识"method":"thing.event.property.post","params":{"Ear":0.00,"Mar":0.00,"Z":0.00,"DriveWarning":0},
"version":"1.0"
4.2 阿里云平台数据上报
将数据上报到云平台后,在云平台上可以显示如图7所
图7 云平台数据显示
5 结 语
本系统通过Dlib 库中的人脸识别和dat 模型中的68个关键点,结合EAR 、MAR 和HPE 算法,判断驾驶员是否眨眼、打哈欠、点头,不仅实现了检测指标多样化,还实现了实时检测驾驶员疲劳状态的目的,可用于货车、汽车、出租车等机动车辆。本系统与云平台和Web 端通信,可将驾驶员的实时精神状态和实时位置通过APP 告知其家人,为驾驶员的生命安全增加一份保障[9-10]。本系统的不足之处在于当驾驶员面部有部分遮挡时就无法准确判断驾驶员是否处于疲劳驾驶状态,只会发出语音提示,提醒驾驶员“您已脱离摄像范围”。因此,下一步的工作重点是如何解决在有遮挡情况下也能正确识别驾驶员精神状态的问题。
注:本文通讯作者为刘保罗。
参考文献
[1]龚淑娟.基于面部多指标的货运司机疲劳驾驶检测[J].物流技术,2020,39(9):74-81.
[2]孙显彬,唐洪伟,文妍.疲劳驾驶预警系统的研究现状和发展趋势[J].青岛理工大学学报,2007,28(3):91-94.
[3]梁元辉,吴清乐,曹立佳.基于多特征融合的眼睛状态检测算法研究[J].计算机技术与发展,2021,3
1(2):97-100.
[4]宫蓉蓉.基于人眼特征的驾驶员疲劳检测方法[J].长沙民政职业技术学院学报,2020,27(4):126-128.
[5]武昆亮.基于面部特征与头部姿态的疲劳驾驶检测[D].上海:东华大学,2020.
[6]A MODIO A ,ERMIDORO M ,MAGGI D ,et al.Automatic detection of driver impairment based on pupillary light reflex [J]. IEEE transactions on intelligent transportation systems ,2019,20(8):3038-3048.
[7]王欣,吴键,孙涵,等.基于DSP 的疲劳驾驶视觉检测与预警系统设计[J].测试技术学报,2020,34(6):506-513.
[8]沈晨航,周俊.基于ESP8266 WiFi 模块和MQTT 协议的游泳馆水质监测系统设计[J].数字技术与应用,2020,38(5):148-151.[9]韩怀阳,王秀丽.机动车驾驶员疲劳驾驶检测系统研究[J].内燃机与配件,2016,27(10):6-7.
[10]李志成.基于眼部关键点定位的疲劳驾驶检测[J].福建质量管理,
2020,41(9):254-255.
作者简介: 王 秀(1999—),女,河南南阳人,本科在读,主要研究方向为人工智能。
周枫晓(1999—),男,河南登封人,本科在读,主要研究方向为物联网。 刘保罗(1976—),女,河南洛阳人,博士,副教授,主要研究方向为嵌入式开发。 霍文怡(2000—),女,内蒙古赤峰人,本科在读,主要研究方向为软件开发。

本文发布于:2024-09-20 20:29:25,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/532232.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

下一篇:欧拉
标签:驾驶员   检测   驾驶   系统   眨眼   数据   人脸   打哈欠
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议