CN113920491A - 基于面部骨架模型的疲劳检测***、方法、介质、检测设备 - Google Patents
基于面部骨架模型的疲劳检测***、方法、介质、检测设备 Download PDFInfo
- Publication number
- CN113920491A CN113920491A CN202111043280.0A CN202111043280A CN113920491A CN 113920491 A CN113920491 A CN 113920491A CN 202111043280 A CN202111043280 A CN 202111043280A CN 113920491 A CN113920491 A CN 113920491A
- Authority
- CN
- China
- Prior art keywords
- fatigue
- model
- detection
- data
- image
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/24—Classification techniques
- G06F18/241—Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches
Landscapes
- Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Theoretical Computer Science (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Artificial Intelligence (AREA)
- Evolutionary Biology (AREA)
- Evolutionary Computation (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Image Analysis (AREA)
Abstract
本发明公开一种基于面部骨架模型的驾驶疲劳检测***、方法、介质、检测设备,涉及图象识别技术领域利用人体姿态检测模型对获得的图像进行识别;通过针孔相机模型对获得的识别图像进行3D骨骼化,利用人脸检测模型进行头部姿态特征的提取、脸部特征的提取,利用提取到的头部和脸部的姿态特征,计算出疲劳特征;利用分类器对得到的疲劳特征进行检测,获取疲劳检测模型,利用所述疲劳检测模型对疲劳进行分级判定,并利用APP与用户进行交互。本发明对疲劳行为进行分析,提取疲劳识别的特征,利用随机森林算法,得到了融合多疲劳特征的疲劳检测模型。在树莓派上实现了整个***,完成了后端和APP端的开发,整个疲劳检测***有较高的完整性。
Description
技术领域
本发明属于图象识别技术领域,尤其涉及一种基于面部骨架模型的疲劳检测***、方法、 介质、检测设备。
背景技术
目前,随着汽车行业的不断发展,开车已经成为出行最主要的方式之一,我国家庭的 汽车保有率不断上升,拥有驾驶证的人也越来越多,所带来的是交通拥挤加重,交通事故频 发等问题,交通安全问题的重要性不断上升,成为国民生命安全的重大威胁之一。根据查阅 相关的资料,从2010年至今,交通事故率,特别是重大交通事故发生的概率每年都有所提 升,而且上涨的幅度每年均有所增加,这给人们的交通安全带来了严重的挑战。根据我国交 通局的统计数据显示,每年都会有将近3万人会因交通事故丧生,这其中有将近两成的交通 事故是由于或者间接由于疲劳驾驶引起的。而且据调查显示,疲劳驾驶在重大交通事故的发 生原因中占比更加高。
在疲劳驾驶成因有关的因素中,持续驾驶时间过长是最为常见的。因为当轻度疲劳来 临时,驾驶员很大程度上并不会注意到自己已经开始注意力下降,往往只会感觉腰酸背痛。 这种轻微的疲劳往往会被驾驶员认为是坐姿不正确或其他原因所致,而忽略了自身的疲劳, 这也是疲劳驾驶难以检测,难以认定的原因之一。当驾驶员进入轻微疲劳后,如果继续驾车 而不进行休息,很容易进入更深一层的疲劳状态,久而久之,驾驶员会出现犯困、精神恍惚、 反应迟钝等问题,这些问题极易引起交通事故的发生。而且疲劳驾驶的常出现地点是在高速 公路,常出现的时间是在夜晚,在高速行驶的条件下,加上夜晚本来能见度就低,疲倦驾驶 对于夜晚高速驾车更是增加了一层风险,所以疲劳驾驶极易引发重大交通事故。
通过上述分析,现有技术存在的问题及缺陷为:
(1)在重大交通事故发生的原因里,因疲劳驾驶或间接因疲劳驾驶导致的交通事故 所占的比例最大。要解决这个问题,就需要一个能对驾驶员进行实时疲劳检测的***,在事 故发生前及时对驾驶员进行提醒,停车休息。然而,目前的疲劳检测***仍然有便捷性、实 时性、准确性差等诸多问题。
(2)现有技术基于穿戴式的疲劳检测***佩戴不便捷。
(3)目前已有的疲劳驾驶检测存在诸驶员要穿戴好专门的检测设备,过程繁琐,疲劳检测***设备过于庞大不易安装,疲劳检测的识别度不高等诸多的问题。
解决以上问题及缺陷的意义为:
本发明以实现基于面部骨架的疲劳检测***为目的,以树莓派作为开发和部署的平台, 通过IntelD435深度摄像头获取深度图像和RGB图像,利用OpenPose人体姿态识别模型 进行了人体的骨架化识别,利用获得的深度信息,结合相机内参得到了人体关键点的3D坐 标,利用3D坐标完成了对于姿态特征的提取,利用OpenFace模型完成了对于人脸特征点的识别,提取了脸部的嘴巴和眼睛的特征。在完成了特征提取之后,对疲劳行为进行分析,完成了对于疲劳识别特征的提取,在比较了几种机器学习算法之后,利用随机森林训练出了 基于多疲劳特征融合的随机森林疲劳检测模型,最后为***进行了后端的设计和前端APP 的开发,完成了整个疲劳检测***的实现。
发明内容
为克服相关技术中存在的问题,本发明公开实施例提供了一种基于面部骨架模型的疲劳 检测***、方法、介质、检测设备。
本发明的目的就是实现一个基于面部骨架模型的疲劳驾驶检测***,用来检测驾驶人的 实时情况。当驾驶人在行驶过程中,若***发现驾驶人有疲劳驾驶的行为,***会经过判断 发出预警,给予驾驶人提醒。这样做的目的是可以防止交通事故的发生,有效降低交通事故 的发生率,保护驾驶人以及路人的交通安全。若事故一旦发生,交警可以利用此***判断事 故的发生原因,有效的解决疲劳驾驶难以认定的问题,有助于通过法律的手段减少疲劳驾驶。
本发明目的还在于:(1)建立人体骨架模型。对人体的深度信息和关键点信息进行提取 结合,通过相机的内参和坐标转化公式,得到人体骨架模型,对人体骨架模型进行调整,完 成人体骨架模型的建立。
(2)对人体和脸部特征进行提取。头部的行为动作和脸部的眼睛、嘴巴的行为都是检测 疲劳驾驶的重要特征,对他们的特征进行提取,可以很好的反应一个人的疲劳程度,通过对 眼睛和嘴巴纵横比,以及头部前倾角、肩部角等特征的计算,可以将驾驶人的驾驶状态很好 的展示出来,对于疲劳检测有着重要的意义。
(3)随机森林疲劳检测模型的训练。利用得到的面部和头部的特征,对点头频率、最长 低头时间等疲劳特征进一步提取,用于疲劳检测模型的训练,再对模型和选取的特征不断的 调整,得到准确度良好的随机森林疲劳检测模型。
(4)疲劳检测***的实现。此次的疲劳驾驶检测***的应用场景在汽车上,整个***完 全在树莓派完成搭建和部署,可以实时的进行疲劳的检测,检测的数据上传到云平台上,设 计了***的后端和前端APP的交互界面,当***检测到驾驶员的疲劳后,会通过接口将检 测结果传递给APP,手机APP会根据疲劳的等级对驾驶员进行不同的提醒。
所述技术方案如下:
根据本发明公开实施例的第一方面,提供一种基于面部骨架模型的驾驶疲劳检测方法, 包括:
步骤一,通过摄像设备获取驾驶员实时的RGB图像和深度图像,利用OpenPose人体姿态检测模型对获得的图像进行识别;
步骤二,通过针孔相机模型对获得的识别图像进行3D骨骼化,利用OpenFace人脸检 测模型进行头部姿态特征的提取、脸部特征的提取,利用提取到的头部和脸部的姿态特征, 计算出疲劳特征;
步骤三,利用分类器对得到的疲劳特征进行检测,获取疲劳检测模型,利用所述疲劳检 测模型对疲劳进行分级判定,并利用APP与用户进行交互、提醒。
根据本发明公开实施例的第二方面,提供一种基于面部骨架模型的疲劳检测***,包括:
视频流处理模块,用于通过Intel realsense D435深度摄像头读取实时的RGB和深度图 像,利用人体姿态和脸部特征点模型进行检测,得到人体的关键点和面部关键点坐标,利用 Intel神经加速计算棒对模型进行加速,将caffe框架的cnn模型转化为IR的模型中间形式 (.xml和.bin文件),利用推理引擎完成对其的部署。通过D435相机的内参,利用针孔相机模 型将2D的坐标点转化为3D的坐标点,利用得到的18个身体关键点和68个面部的关键点进行 身体和面部姿态特征的提取;
疲劳检测模块,用于对疲劳状态进行分类,将疲劳分为轻度疲劳和严重疲劳两种状态, 统计一定时间段内的眼睛、嘴部状态以及头部的位置,进行疲劳行为特征的确认,生成表征 疲劳状态的8维特征向量,利用随机森林模型训练出对驾驶员状态进行分类的模型,完成系 统的疲劳检测;
交互模块,用于通过Flask后端框架完成了后端接口的编写,将检测的结果传到手机 APP上;手机APP包括疲劳度展示和疲劳提醒两个模块,疲劳度展示模块将驾驶员实时的疲劳度通过表盘的方式直观的进行展示,疲劳提醒模块根据检测轻度疲劳或者重度疲劳结果 对驾驶员进行提醒或者报警处理,对疲劳驾驶进行预警。
根据本发明公开实施例的第三方面,提供一种接收用户输入程序存储介质,所存储的计 算机程序使电子设备执行所述基于面部骨架模型的驾驶疲劳检测方法。
根据本发明公开实施例的第四方面,提供一种车载基于面部骨架模型的疲劳检测设备, 所述车载基于面部骨架模型的疲劳检测设备执行所述基于面部骨架模型的驾驶疲劳检测方 法。
本发明公开的实施例提供的技术方案可以包括以下有益效果:
本发明提供一种基于面部骨架的疲劳检测***及方法。用树莓派进行开发和 部署,解决了传统穿戴性设备的便捷性问题,通过Intel realsense摄像头获取到 实时的RGB图像和深度图像,利用OpenPose姿态识别模型对驾驶员的姿态进 行检测,通过针孔相机模型完成人体的3D骨骼化,利用OpenFace模型完成脸 部特征的提取,利用提取到的头部和脸部的姿态特征,计算出疲劳检测的特征, 利用分类器得到疲劳检测的模型,对疲劳进行分级判定,利用APP完成与用户 的交互,对用户进行提醒。
本发明解决了基于穿戴式的疲劳检测***佩戴不便捷的问题,利用树莓派进 行***的开发和部署,与车内空间较小的特点非常契合,利用面部骨架模型对驾 驶员进行识别,并对其疲劳进行分级检测。
相比于现有技术,本发明的优点进一步包括:
利用OpenPose姿态识别模型得到的2D关键点坐标结合深度信息,完成了 对于人体的3D骨骼化,并完成了姿态特征的提取。
通过人脸特征点模型完成了对于人脸嘴巴和眼睛特征的提取。
对疲劳行为进行分析,提取疲劳识别的特征,利用随机森林算法,得到了融 合多疲劳特征的疲劳检测模型。
在树莓派上实现了整个***,完成了后端和APP端的开发,整个疲劳检测***有较高 的完整性。
当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本 发明公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并 与说明书一起用于解释本公开的原理。
图1是本发明实施例提供的基于面部骨架模型的驾驶疲劳检测方法流程图。
图2是本发明实施例提供的基于面部骨架模型的疲劳检测***示意图。
图2中:1、视频流处理模块;2、疲劳检测模块;3、交互模块。
图3是本发明实施例提供的3D人体骨架图.
图4是本发明实施例提供的人脸特征点识别图。
图5是本发明实施例提供的人脸特征点模型检测到的眼睛位置的特征坐标,人脸特征点 模型对于眼睛的检测,可以得到6个坐标点图。
图6是本发明实施例提供的求得的height1,height2,以及length界面图。
图7是本发明实施例提供的用EAR值记录的一次眨眼动作图。
图8是本发明实施例提供的随机森林模型的准确率示意图。
图9是本发明实施例提供的基于面部骨架模型的疲劳检测***架构原理图。
图10是本发明实施例提供的接口返回结果图。其中,图10a)正常驾驶;图10b)轻度疲 劳;图10c)重度疲劳。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时, 除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述 的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书 中所详述的、本公开的一些方面相一致的装置和方法的例子。
1.下面结合具体实施例对本发明技术方案作进一步描述。
实施例
如图1所示,根据本发明公开实施例提供一种基于面部骨架模型的驾驶疲劳检测方法, 包括:
S101,通过摄像设备获取驾驶员实时的RGB图像和深度图像,利用OpenPose人体姿态检测模型对获得的图像进行识别;
S102,通过针孔相机模型对获得的识别图像进行3D骨骼化,利用OpenFace人脸检测 模型进行头部姿态特征的提取、脸部特征的提取,利用提取到的头部和脸部的姿态特征,计 算出疲劳特征;
S103,利用分类器对得到的疲劳特征进行检测,获取疲劳检测模型,利用所述疲劳检 测模型对疲劳进行分级判定,并利用APP与用户进行交互、提醒。
如图2所示,根据本发明公开实施例的提供一种基于面部骨架模型的疲劳检测***,包 括:
视频流处理模块1,用于通过Intel realsense D435深度摄像头读取实时的RGB和深度图 像,利用人体姿态和脸部特征点模型进行检测,得到人体的关键点和面部关键点坐标,利用 Intel神经加速计算棒对模型进行加速,将caffe框架的cnn模型转化为IR的模型中间形式 (.xml和.bin文件),利用推理引擎完成对其的部署。通过D435相机的内参,利用针孔相机模 型将2D的坐标点转化为3D的坐标点,利用得到的18个身体关键点和68个面部的关键点进行 身体和面部姿态特征的提取;
疲劳检测模块2,用于对疲劳状态进行分类,将疲劳分为轻度疲劳和严重疲劳两种状态, 统计一定时间段内的眼睛、嘴部状态以及头部的位置,进行疲劳行为特征的确认,生成表征 疲劳状态的8维特征向量,利用随机森林模型训练出对驾驶员状态进行分类的模型,完成系 统的疲劳检测;
交互模块3,用于通过Flask后端框架完成了后端接口的编写,将检测的结果传到手机 APP上;手机APP包括疲劳度展示和疲劳提醒两个模块,疲劳度展示模块将驾驶员实时的 疲劳度通过表盘的方式直观的进行展示,疲劳提醒模块根据检测轻度疲劳或者重度疲劳结果 对驾驶员进行提醒或者报警处理,对疲劳驾驶进行预警。
2.下面结合骨架模型的获取分析对本发明技术方案作进一步描述。
通过Intel realsense D435深度摄像头获得图像的深度信息,与OpenPose模型得到的人 体关键点坐标进行结合,利用D435的相机内参,通过针孔相机模型得到人体的3D关键点 坐标,完成了人体的三维骨架化,并对人体的姿态特征进行了计算。
2.1深度图像的获取
深度图像与RGB图像不同,它包含的是摄像头和物体之间的距离信息,是单通道的图 像,而RGB的像素值表示的是某个像素点的亮度,是三通道的图像,是通过Intel D435获得的深度图像。通过深度图像可以实现场景的重构,还原物体的表面形状、三维结构信息以及进行物体识别等诸多功能。获取深度图像比较知名的kinect和Intel realsense系列都是基 于结构光进行深度图像的识别,3D结构光的基础是红外光,它装配了点阵发射器,通过发 射红外线来判断距离物体的远近情况,由于利用的原理是红外线,所以深度图像受到光照的 影响并不大,在黑暗情况下,依然会有不错的效果。
本发明利用Intel的D435摄像头完成了RGB图像和深度图像的获取,通过时间戳将深 度图像和RGB图像进行对齐,得到实时的数据。Intel的D415和D435都是专业的深度摄像头,它们都能实现在采集RGB图象的同时,获得深度图像,进行3d重建。根据前期的测试 证明,相比与D415来说,D435获取图片的深度点更全,缺失的深度点更少,故本发明采用 D435深度摄像头完成深度数据的采集。使用realsense系列的摄像头需要安装其对应的sdk 并且进行相应的配置工作,配置好config并通过pipe进行流式传输获得采集到的深度图像和彩色图像,设置获得的图像像素比为480*640,fps为30,通过时间戳将深度图像和彩色图像进行对齐,对于丢失深度信息的帧进行补全和丢弃,完成数据的实时采集工作。
2.2获取人体关键点坐标
OpenPose是这次基于面部骨架的疲劳检测***的基础,也是非常具有意义的一个项目, 它是由CMU开发的一个用于姿态识别的成熟模型。部署OpenPose后,本发明可以轻松的 进行对人体动作,手势动作等姿态行为进行识别。它基于caffe框架搭建的cnn卷积神经网 络,可以输入图片、视频,还可以对摄像头的视频流进行实时的检测得到人体的二维骨架化 结果,具有极高的准确性和鲁棒性。
OpenPose进行姿态识别的具体实现过程:
(1)OpenPose先识别出图像中可能存在的所有关键点,输出方式是通过featuremap,然 后在输出各个关键点之间可能的连接情况,输出方式是PAFS,被称为关节亲和场。这些操 作是在同时进行的,也就是说OpenPose同时完成关键点的检测和连接。
(2)利用VGGNet前10层进行特征的提取,经过heatmap和pafs预测网络,该网络总共 有上下两个层次,每个层次都是6个阶段进行不断的微调,且每个阶段都会将featuremaps 进行生成和融合。
(3)在完成融合之后,confidence map将会是一个2D形式,如果是理想的状态,图中 只有一个人,那么confidence map中应该只会出现一个峰值,而当图像中有多个人时,对 于每一个人的每一个可见关键点在对应的confidence map都会有一个峰值。特别是进行多 人姿态估计的时候,上图中关键点之间存在的关系可能存在很多种可能,检测到的所有人体 骨骼之间都存在着估计两个关节部位连接可能的PAFS。
(4)这样对于关键点就会有众多种连接的情况,OpenPose利用PAFS的亲和场部件,结 合人体的姿态形式,维持各个躯干之间的相对关系,保证连接出的二维骨架化结果符合人的 姿态特征。
2.3三维人体骨架化
利用OpenPose人体姿态检测模型可以识别出人体的18个关节点,每一个id对应了一个 身体的关节点,包括:应鼻子,脖子,右肩,右肘,右手腕,左肩,左肘,左手腕,右臀, 右膝,右脚,左臀,左膝,左脚,右眼,左眼,右耳,左耳。由于疲劳检测***的应用场景 是在车里,驾驶室空间太小,驾驶员距离摄像头的距离太近,摄像头采集到的图像中失去了 对于下半身特征点的检测,只保留了左耳、右耳、鼻子、脖子、左眼、右眼、左肩、右肩这 些特征点。本发明可以利用驾驶员上半身的特征点对其进行姿态的识别。
利用D435深度摄像头进行检测时,可以同时得到一帧对齐的RGB和深度图像,利用深度摄像头检测到的深度信息,将OpenPose识别出的人体关键点2D坐标和对应位置的深度信息进行结合,得到人体关键点的三元组,每一个三元组前两个元素代表人体关键点的x和y坐标,第三个元素代表此位置对应的深度信息。如果这个三元组的每个值均为-1.00,则代表OpenPose检测这帧图像时,失去了对于此个关键点的检测,故将其全部设为-1.00进行表示。
将利用姿态识别模型得到的2D关键点坐标和深度摄像头采集到的深度信息进行保存, 通过D435的相机内参,可以将数据转换成三维的坐标点,这样可以获得更为真实的人体姿 态信息,相机的变化内参有:camera_factor、camera_cx、camera_cy、camera_fx以及camera_fy, 变换主要用到了针孔相机模型,通过深度和2D坐标将拍摄到的物体进行3D还原。
将转化后的人体3D关键点坐标进行保存,相比与2D坐标来说3D坐标对于姿态识别更 加精准,能识别到的特征更多。可获得转化后得到的18个人体3D关键点坐标信息。
为了让人体骨架图的3d骨架图更加方便查看,要对骨架图进行一定的旋转,将3D骨 架化的图形旋转到正面来,这样的旋转并不会改变人体关键点的相对位置,因此对本发明姿 态特征的求解并没有影响,不会影响到骨骼之间的角度和人体的姿态。首先从人体的臀部和 脖子之间的中心点开始,将中心点平移到原点上,在这个原点的基础上围绕着x、y、z三条 轴进行旋转,绕轴旋转的旋转矩阵公式如下所示,公式(2-1)、公式(2-2)、公式(2-3)分别是绕 x轴、y轴、z轴逆时针旋转的公式。
通过对骨架图进行相对的平移和旋转操作得到摆正后的3D人体骨架图。3D人体骨架图 如图3所示。
2.4头部姿态特征的提取
在得到人体的3D骨架化坐标之后,根据本发明姿态识别的需要,提取人体的姿态特征, 作为后面进行随机森林疲劳检测模型训练的准备。主要求得的特征及其定义如下所示:
定义1:前屈角α1定义为脖子和鼻子组成的向量与y轴法线组成的夹角,这个特征用来 检测当疲劳时常常出现的频繁点头和长时间的低头动作,计算公式如公式(2-4)所示:
定义2:肩部角α2定义为脖子和左右肩部两个向量的夹角,当重度疲劳时常常会伴随着 大幅度的左右歪头,这个特征用来检测疲劳时人的歪头的动作,计算公式如公式(2-5)所示:
定义3:肩脖比RATE定义为肩膀的宽度与脖子长度的比值,检测到的肩膀的宽度不会 发生较大的变化,而脖子的长度会由于低头动作发生较大的浮动,用这个比值来表示驾驶员 在疲劳时的低头动作,计算公式如公式(2-6)所示:
Faming主要对深度图像以及OpenPose人体姿态识别模型进行了分析,,通过D435摄 像头完成了对深度信息的提取,与OpenPose模型得到的人体关键点坐标进行结合,利用相 机的内参和针孔相机模型完成了由人体2D关键点坐标到3D关键点坐标的转化,生成了人体 的三维骨架图,并对三维骨架图进行了旋转,使骨架图更加直观清晰,并利用得到的3D坐 标,根据本发明姿态识别的需要,提取人体的姿态特征,包括人的前倾角、肩部角等,作为 后面进行随机森林疲劳检测模型训练的准备。
3.下面结合面部特征的提取分析对本发明技术方案作进一步描述。
本发明采用了多种人脸检测的模型后,经过对比选用OpenFace模型进行人脸识别,利 用OpenVINO对模型进行了转化和加速,并将模型部署到树莓派上,通过检测得到人脸68 个特征点的相对坐标,利用面部特征点的坐标对人眼和嘴巴的特征进行提取。
3.1面部特征点的提取
现在算法的识别率比较高,但是还需要解决这一些情况:在任意给出的一张图像里面, 人脸出现的地方是不确定的,可以在任何一个位置,这样给检测带来了很大的难度。主流的 处理方法有两种,一种改变滑动窗口,另外一种是通过像素的相似性对这一块区域进行归类。 第一种方法有点像是暴力求解,第二种方法是有一定的优化,那么会不会有更好的解决方法 来处理这个问题呢,可以还是比较期待的,也会持续来关注这一方面的主题。在正常的人脸 检测里面,可以默认人脸是正对着设备的,那么其实实际的应用上,可能是倾斜,或者有的 图像是用手,帽子等东西遮挡,这个也是不好检测,现在是有一个人脸对齐来解决图像视角 问题,但是一旦超出一定的视角,它是解决很难去解决,红外线也只能说是解决戴墨镜遮挡 的问题。
面部特征点的提取尝试选择了基于卷积神经网络的OpenFace模型和基于SVM+Hog的 人脸特征点两种模型。两种模型相比之下各有所优势,基于SVM的人脸特征点模型fps可以达到20帧每秒,实时性好,但是对于环境比较复杂的驾驶场景中,会由于光线等因素对人脸的识别造成影响,准确性欠佳,而基于卷积神经网络的OpenFace模型表现的效果更好,但实时性相较于前者更差。人脸特征点识别图如图4所示。
人脸特征点模型对于人脸的关键位置的68个特征点进行了标注,包括眼睛、鼻子和嘴巴 等关键部位。在疲劳检测***中,本发明主要利用对左眼和右眼的12个关键点和对于嘴巴的 20个关键点进行特征的提取,对眼睛和嘴巴的张开闭合进行检测。
3.2模型的转化和推理
由于此次的疲劳检测***的应用环境是在汽车上,所以不能用电脑进行***的部署和开 发,而要用树莓派进行代替,树莓派类似于单片机,虽然体积小,但可以完成功能却很多。 本发明使用的树莓派4B是32位ARM架构的,存储空间大小为32GB,它没有GPU等图 像处理加速器,因此无法仅仅使用树莓派自己完成的图像处理,需要进行模型的加速和转化。
英特尔NCS2神经计算加速棒,简称VPU,是英特尔公司专门推出的用于在边缘设备上部署深度学习模型和进行AI算法实现的加速设备,它的外形小巧,类似于一个u盘,使 用USB接口进行供电,可以非常方便的插在树莓派上进行使用,而且他目前仅仅支持Linux ***,与树莓派非常契合,利用VPU本发明可极大的提高神经网络的处理性能,减少用于 部署模型的时间,使本发明的AI开发更为便捷。
在使用Intel神经计算棒进行模型的加速之前,需要先用神经计算棒专属的OpenVINO 组件完成模型的转化和推理。OpenVINO是Intel公司开发的一个Pipeline工具集合,用于进 行深度学习的配置工作,其可以对于常见的cnn网络进行转化和加速,其中还包括了OpenCV 等常见的工具包可以兼容各种开源框架训练好的模型,OpenVINO拥有算法模型上线部署的 各种能力,只要掌握了该工具,可以轻松的将预训练模型在Intel的CPU上快速部署起来。
本发明需要将人体和面部的caffe骨架模型部署到树莓派上,需要先用OpenVINO的模 型优化器将其转化为IR(xml和bin文件)的中间形式,在利用OpenVINO的推理引擎提供的 C++接口,读取网络结构和权重,配置输入和输出参数,完成对于整个模型的加速,模型就 可以在神经计算棒上进行加速计算了。在神经计算棒的加速之下,成功的完成了模型在树莓 派上的部署,虽然利用模型在树莓派上进行实时图像处理的fps依然比电脑低很多,但已经 可以达到特征提取的需要。
3.3脸部特征的提取
根据OpenFace人脸检测模型得到人脸68个特征点,进行眼部和嘴部特征的提取。
EAR(眼睛纵横比),它是在2016年提出的一个针对眨眼检测的概念模型。基于实际数据 集使用面部关键点检测器作为输入,提出了有效的眨眼检测算法,通过定位眼睛的轮廓得出 眼睛的纵横比,用于估计眼部的状态。它是一种简单、高效的眼部识别方法,通过人脸68 关键点模型对人眼的闭合进行检测,利用眼睛各个位置的相对坐标,完成对于眼部纵横比的 计算.通过大量的实验和测试发现通过眼睛纵横比可以实现对于眼睛的睁眼和闭眼检测。在 睁眼时,EAR值稳定在0.2到0.3的区间,当眼睛闭合时,这一帧的EAR值会突然下降到0.1 之下,再次睁开眼睛时,EAR值再次回到0.2左右,因此本发明可以通过EAR值的一次变化 过程,来进行眨眼的检测。
如图5所示,为人脸特征点模型检测到的眼睛位置的特征坐标,人脸特征点模型对于眼 睛的检测,可以得到6个坐标点,分别为P1到P6,上眼皮的坐标点是P2和P3,下眼皮对称 的坐标点是P6和P5。通过上图本发明可以知道眼睛的张开的两个高度为heigth1=P6–P2, height2=P5–P3,眼睛张开的宽度为length=P4–P1,如图6所示,为求得的height1,height2, 以及length。
EAR代表眼睛的纵横比,EAR的公式如(3-1)所示,公式中的p1到p6对应眼睛的六个坐标,在公式中本发明需要把六个坐标都用上,这样的数据处理方式可以避免由于一组的length误差较大时,对最终的检测结果产生影响,尽可能的提高EAR计算的准确性。
MAR代表嘴部的纵横比,与眼睛纵横比计算类似,都是利用检测出来的嘴部坐标点计 算高度和长度,求得两者的比值,用来估计嘴部的张合程度。MAR的公式如公式(3-2)所示。
与EAR不同的是,由于脸部特征点模型对于嘴部的特征点检测可以检测到20个特征点, 对于上嘴唇的检测分为嘴唇的上部和下部分,在开始时对于嘴唇高度的计算取得是上嘴唇下 部和下嘴唇上部特征点的坐标,导致两个特征点坐标的高度差过为接近,使得求出的MAR 值常常出现接近于0的情况甚至为负数,不利于对数据进行处理。在查阅了相关MAR进行 嘴部检测的资料之后,选择用上嘴唇的上部和下嘴唇的下部的特征点进行替换。经过测试, 当嘴部闭合时height值稳定在了15左右,MAR的值趋近于0.1到0.2之间,嘴部张开时MAR 的值稳定在0.6到0.7之间,两种状态下MAR的取值有着较大的差别。
本发明完成了面部特征的提取,将人脸特征点模型运用OpenVINO进行模型的转化和 部署,将模型部署在树莓派上,利用Intel神经计算棒实现了对模型的加速,使本发明的面 部骨架模型可以运行在树莓派上。利用人脸特征点的坐标完成了对于嘴部和眼睛特征的提 取,提取到了EAR和MAR两个主要的特征,用于对眼睛和嘴部的行为进行识别,为后期疲劳特征的提取以及疲劳检测模型的训练作了铺垫。
4.下面结合疲劳行为的识别对本发明的技术方案作进一步描述。
在完成对头部和面部特征的提取之后,通过查阅大量资料对疲劳时人的状态进行分析, 得到人疲劳时的行为特点,从设定好的固定时间窗口中提取出进行疲劳识别的特征,对采集 到的带标签的疲劳数据进行训练,尝试了两种主流的分类算法,SVM和随机森林,经过对 比和调整最终得到了准确度较高的随机森林疲劳检测模型。
4.1疲劳特征的提取
疲劳是一种逐渐加深的连续过程,根据对现在主流疲劳检测方法的调查,疲劳的分类主 要包括轻度疲劳状态和重度疲劳状态两种状态。对于普遍的疲劳检测算法来说,常常将疲劳 行为的检测视为一个分类的问题。通过查阅相关的论文和资料并对疲劳行为进行总结,当驾 驶员在清醒时,由于需要系上安全带,身体姿态和位置相对固定,不会出现大幅度的变化, 驾驶员的头部长时间保持着正视前方的动作,偶尔会有歪头观察四周情况,张嘴说话等动作, 驾驶员整体的姿态较为固定。当驾驶员出现轻微疲劳时,会出现眯眼的情况,眼睛的张合度 变小,开始出现打哈欠的动作。当驾驶员进入重度疲劳时,驾驶员出现频繁、持久的哈欠动 作,持续的眯眼甚至闭眼,头部出现大幅度低头和歪头。
基于驾驶员的正常、轻度疲劳、重度疲劳三种状态,加上本发明所查阅的大量论文和资 料,发现眼睛、嘴巴和头部的情况都对疲劳识别有着关键的作用。最后通过分析对疲劳行为 特征进行了确认,生成了表征疲劳状态的8维特征向量,其每个值的物理意义如表1所示。
表1疲劳行为特征
表1中的PERCLOS是由美国***梅隆大学提出的,被业内认知最为广泛的、接受度 最高的疲劳检测指标。通过美国公路局的调查和模拟疲劳驾驶进行测试,完成了对于主流疲 劳特征的对比,虽然这些疲劳特征都能在一定程度上对疲劳进行预测,但是PERCLOS的表 现是这些疲劳特征中最好的。PERCLOS的物理意义是在某一时间窗口内,眼睛闭合的时间 与时间窗口时间的比值,这个眼睛闭合程度可以进行人为的设定,通常有几种常用的标准, 比如眼睛闭合60%,眼睛闭合50%等标准。如图7用EAR值记录的一次眨眼动作图所示,该 图展现了进行一次眨眼动作的EAR值变化幅度。从图中本发明可以得到当眼睛闭合时,这 一帧的EAR值会突然下降,由0.2左右下降到0.1之下,然后迅速升高到0.2之上,完成一次 眨眼的动作。故本发明选取当EAR值小于0.1时,确定此帧代表着眼睛闭合。
PERCLOS的计算公式,如公式(4-1)所示,本发明统计这个时间窗口下,EAR小于0.1的帧数,将它除以这个时间窗口的大小,就得到了这个时间间隔下的PERCLOS值。
最长闭眼时间EAR_Time、最长低头时间Nod_Time、最长哈切持续时间Yawn_Time、最长歪头持续时间Left_Time的计算都类似,都是通过设定一个阈值,测定超过这个阈值的最长连续帧数。比如最长哈切持续时间Yawn_Time,是通过MAR(嘴部纵横比)进行计算的,通过实验和测试本发明可以得到,当嘴部正常闭合时MAR的值稳定在了0.1到0.2之间,当说话时,MAR的值在0.25到0.3范围内,当打哈欠时,MAR的值稳定在了0.6到0.7之间,从 在睁眼张嘴时和在闭眼闭嘴时MAR和EAR的情况中可以看到,当闭眼闭嘴时,左右眼的 EAR在0.1附近,嘴部的MAR在0.1附近,当睁眼张嘴时,左右眼的EAR在0.3到0.4之间, 而MAR在0.5到0.6之间。根据以上的数据可以说明MAR可以很好的代表嘴部的动作,对 嘴部的行为作出判断。
对于Nod_Count(点头计数)、Yawn_Count(哈切计数)、Left_Count(歪头计数),本发明通 过对这个连续动作进行解析,了解这个连续动作的幅度范围以及变化过程从而设定阈值对这 些疲劳特征进行计算。举哈切计数的例子,一个哈欠动作的完成,包含着MAR平稳到MAR 上升再到MAR下降的过程,本发明根据测试和分析设定当在前后的两帧中当MAR发生大 幅度的上升超过了0.4的阈值时,记为一个哈欠动作。Nod_Count的计算方式与Left_Count 类似,记录上一帧的前倾角的cos值,在与当前帧前倾角的cos值的绝对值相差超过0.3时, 认为发生了一次点头的动作,Nod_Count加1。
由于要在一个时间间隔内,对疲劳行为进行一次检测,通过对于模型检测速度进行估计, 以及本发明实际应用要达到的效果,保证在5秒钟左右可以得到一次疲劳检测的结果,因此 本发明设置疲劳检测的时间窗口大小为10帧,当每得到10帧的人体关键点坐标和深度信息 后,将他们转化成为人体姿态3D坐标,同时取得脸部的关键点坐标,计算每一帧身体和脸 部的特征,上传到实验室的云平台上进行保存,同时进行数据处理,用来提取本发明的疲劳 驾驶行为特征。为了防止某个疲劳动作,贯穿于两个时间窗口中间,造成疲劳检测的误差, 尽可能的提升本发明***的准确性,采用一种滑动窗口的方法,经过反复的测试,选择三帧 作为一次滑动的间隔,每当对十帧的数据进行完检测之后,将队列的前三帧数据进行出队, 将来到的三帧数据入队,继续输入本发明的疲劳检测模型进行检测,持续的得到本发明的疲 劳检测结果。
4.2随机森林
随机森林,是一种集成学习的思想,将众多的决策树结合起来一起作为训练的模型。对 于一个输入的新数据,随机森林模型的预测结果指的是将这个新数据放到所有的决策树中进 行判断,依次输出预测的类别,然后对所有的类别进行统计,利用一种投票的方式,将得票 最多的类别作为随机森林的预测结果。
若随机森林忽略掉其随机的话,就和一般的决策树模型一样。随机指的是随机森林中的 每颗决策树的训练集组成都是任意的,而且对于每颗决策树的训练集,都采用了随机抽样, 并且在训练结束之后会将样本重新放回。其次随机性指的是他的每个决策树的特征选择随机, 在训练每一个决策树的时候,都可以有选择的选择一部分特征进行训练,而不用对所有特征 都进行训练,从特征列表中随机选k个特征值(共有m个特征值,m大于k),开始反复 的建立决策树,获得多个不同的决策树,在进行测试时要将测试集放入每个决策树中输出 其预测的结果,每棵树得到一个预测结果,将结果中比例最高的一个作为整个随机森林的最 终结果。这使得随机森林具有较高的抗过拟合能力,也可以针对本发明的想法,对随机森林 训练所希望重视的特征增加其重要性,方便对模型进行调整。
随机森林具有稳定性和抗过拟合性等众多的优点,其稳定性在于只有当超过一半的决策 树出现差错,最终随机森林预测的结果才会出错。在其中新的数据点的出现,仅仅只会影响 到一棵决策树,对于整个随机森林模型影响很小。抗过拟合能力强指的是随机森林中的决策 树即使发生了过拟合的情况,由于最终的结果由所有的决策树进行投票决定,故对最终的结 果影响不大,降低了过拟合的风险。
随机森林算法的准确度和鲁棒性都比较高,且随机森林算法能够适应样本较小的训练环 境,具有较高的效率。
4.2.1模型训练
对于随机森林疲劳检测模型的训练,要预先安装sklearn(Scikit-Learn)库,它是一个基于 Python的算法学习库,它其中的算法接口设计简单,利用它本发明可以很方便的对数据进 行预处理、模型训练、对模型进行评分以及保存。在安装它之前需要先预先安装numpy、scipy 等库。
在安装好环境之后,开始进行训练模型的代码编写,首先要对训练的疲劳数据进行加载, 采集好的数据分别对应着正常驾驶状态,轻微疲劳驾驶状态和重度疲劳驾驶状态,第一步要 对数据进行预处理,因为疲劳模型的训练是监督学习,所以要在采集的疲劳数据上人为的作 上疲劳状态的标记,其中,0表示正常,1表示轻度疲劳,2表示重度疲劳。在对数据进行 完标记之后,因为保存的数据前面带有数据名称的标签,利用正则表达式将数据分离出单独 的数值存储在数组中,并转化为numpy的格式,按照每十条数据提取一次疲劳的特征,作 为新的训练数据集存储起来。此时,训练集中的每条数据都是一个9维的特征向量,其中前 面八个是本发明从十帧图像提取的疲劳检测的特征,而最后一个数据表示的是疲劳的状态。
在准备好数据之后,就可以利用sklearn库中的算法进行本发明的疲劳检测模型的训练。
首先本发明利用train_test_split函数从数据集中选取73%的数据用作本发明随机森林疲 劳检测模型的训练,剩下27%的数据保留起来,用作本发明模型生成之后进行测试,对本 发明训练出的模型准确性进行验证。
接着调用sklearn库中的随机森林分类器,加载本发明之前划分好的训练数据对模型进 行训练,在生成随机森林分类器时,本发明可以设置随机森林的参数进行预剪枝。设置生成 决策树的个数为2000棵,决策树叶节点含有的最少样本数量为20,决策树最大深度设置为7, 生成决策树考虑的最大特征数量为5。通过不断的调整这些参数,使本发明的随机森林模型 具有更高的准确性。
4.2.2模型测试
本发明用之前划分出的27%的测试集对本发明的随机森林疲劳检测模型进行测试,利用 accuracy_score()方法,得到这个随机森林疲劳检测模型的准确度,如图8随机森林模型的准 确率所示,可以看到这个正常状态、轻度疲劳、重度疲劳三分类模型的准确度为82%。调用 feature_importances_方法,输出对于模型分类最重要的前五个特征,观察哪些特征对于这个 模型的训练影响最大,方便本发明在特征选取时进行调整.
把得到的随机森林模型导出并保存起来,将实时得到的疲劳特征输入到模型中去,在得 到预测结果的同时,输出对于正常驾驶、轻度疲劳、重度疲劳三个类别的预测概率,为后续 的使用铺垫。
4.3SVM分类器
SVM是一种传统且高效的小样本机器学习方法,使用SVM算法可以很方便的实现推理,极大的简化了分类和回归问题。它的预测结果所依靠的是小部分的支持向量,运算的难易受支持向量的个数所影响,几乎不受到维数的影响。这使得SVM即使在面对训练集数据量小的情况小,依然可以得到不错的结果,具有很好的鲁棒性。
4.3.1模型训练
SVM支持向量机疲劳检测模型的训练与随机森林类似,Python的sklearn库也包括了 SVM的实现,本发明与随机森林的训练相同,同样的将73%的数据用作本发明随机森林疲 劳检测模型进行训练,剩余27%的数据用于对模型的准确性进行验证,在训练之前还需要 先将数据加载到pandas的DataFrame中去,将标签的索引重新设置一下,加载训练数据,调用SVM的svc模型,进行随机森林疲劳检测模型的训练。训练结束后将模型进行保存。
4.3.2模型测试
利用之前分割出的27%数据作为测试集,对模型直接进行测试,输出准确率。可知, svm训练的模型准确度只有67%。
重新对测试集进行分割,通过对随机数种子进行设置,控制对训练集和测试集的划分操 作。如果将随机数种子设置为0,则每次得到包含数据不同的训练和测试集,可以利用不同 的训练集,对模型重复多次进行训练,得到一个平均的模型准确率。若将其设置为1,则每 次得到包含相同数据的训练集和测试集,这使得本发明每次用作模型训练的都是一组数据, 方便比较不同算法对于随机森林疲劳检测模型的准确度差异。通过在数据分割时对于随机数 种子的设置,在同样的条件下,运用上面提到的两种模型分别进行训练,随机森林的准确率 在78%到85之间,而SVM的准确率在67%到73%之间。发现SVM准确率还是比随机森林的 准确率低。经过分析随机森林算法相比与支持向量机更加适合用于多元分类,随机森林算法 能够处理维度高的数据,由于随机森林可以通过生成多棵决策树,并利用投票的方式产生最 终的结果,众多的决策树决定了对于高维度的每个数据,都会进行考虑,并且随机森林可以 输出对于模型分类重要的特征,观察每个特征对于这个模型的训练重要性。随机森林在特征 遗失时依然保持着较好的准确度,处理的更为优秀。
针对前面提取到的头部和面部姿态特征,基于疲劳的正常、轻度疲劳、重度疲劳的三种 状态,统计一定时间段内的眼睛、嘴部以及头部的状态,进行了疲劳行为特征的确认,生成 了表征疲劳状态的8维特征向量。对于随机森林疲劳检测模型的训练,选择了随机森林和 SVM支持向量机两种分类器,对两种机器学习方法进行了介绍,针对同样的训练集和测试 集,多次进行训练和测试,对两种不同的分类算法进行比较,最终得出在当前的数据集中, 随机森林的表现要更好一点,能有接近80%的准确率。
5.下面结合疲劳检测***实现对本发明技术方案作进一步描述。
整个疲劳检测***完全部署在树莓派上,利用树莓派做图像处理以及算法的实现,检测 到的数据上传到搭建的云平台进行存储,完成了***后端的搭建,利用手机APP完成与用 户的交互并且对于疲劳检测结果进行实时的反馈。
5.1***总体结构,如图9所示。
此次的基于面部骨架的疲劳检测***用树莓派4B进行***的开发和部署,树莓派(RaspberryPi)是一款32位的Linux微型电脑,树莓派的体积和身份证大小类似,体积轻盈,用SD卡进行存储,但其功能确十分的齐全,其小巧的体积非常适合疲劳驾驶检测的应用场景,但其由于本身计算和运行能力的问题,以及ARM架构的设计,对于程序的开发和应用 产生了巨大的限制.
基于面部骨架的疲劳检测***大体上可以分为三个部分,分别是视频流处理层,疲劳检 测层,以及用于交互的UI层,***首先通过Intel realsense D435深度摄像头读取实时的RGB 和深度图像,利用人体姿态和脸部特征点模型进行检测,得到人体的关键点和面部关键点坐 标,利用Intel神经加速计算棒对模型进行加速,将caffe框架的cnn模型转化为IR的模型 中间形式(.xml和.bin文件),利用推理引擎完成对其的部署。通过D435相机的内参,利用针 孔相机模型将2D的坐标点转化为3D的坐标点,利用得到的18个身体关键点和68个面部的关 键点进行身体和面部姿态特征的提取。通过查阅大量资料和论文,对疲劳状态进行分类,将 疲劳分为轻度疲劳和严重疲劳两种状态,统计一定时间段内的眼睛、嘴部状态以及头部的位 置,进行了疲劳行为特征的确认,生成了表征疲劳状态的8维特征向量,利用随机森林模型 训练出了对驾驶员状态进行分类的模型,经过大量的测试,模型的准确率在80%左右,完成 了***的疲劳检测模块,通过Flask后端框架完成了后端接口的编写,将检测的结果传到手 机的APP上,手机APP包括疲劳度展示和疲劳提醒两个模块,疲劳度展示模块将驾驶员实 时的疲劳度通过表盘的方式直观的进行展示,疲劳提醒模块根据检测轻度疲劳或者重度疲劳 结果对驾驶员进行提醒或者报警处理,对疲劳驾驶进行预警。
5.2***相关信息
机器:树莓派(RaspberryPi)4B
***:Ubuntu 20.04
摄像头:Intel realsense D435深度摄像头
加速棒:Intel compute stick2神经计算棒
编程语言:C++、Python 3.6.1。
5.3***后端搭建
5.3.1后端接口的实现
因为前面疲劳特征的提取以及疲劳模型训练使用的都是Python,所以为了后端的简洁 以及编写的方便,后端的框架选用了Python的Flask框架,使得整个***整合起来更加的简 单,缩短开发的时间。
Flask是一款开源的web框架,他有很好的社区氛围,与Flask相关的常见配置、使用 问题几乎都能找到答案,为后端的开发提供了极大的便利。它与其它主流的框架相比,具有 灵活、轻巧、上手简单等特点,具有很强的定制性,可以根据需求,随心的增加新功能。它 与重量级的框架Django不同,没有提供用作功能拓展的模块比如:orm模型、用户认证机制、admin后台管理等工具和组件,而是保留了web框架的核心功能,能够实现轻量、自由、灵活的个性化定制,通过丰富的插件库来进行功能的拓展,进行开发多元的网站。
本次疲劳检测***的后端接口设计,要进行交互的数据不多因此设计过程比较简单,只 需要实现两个接口用来进行数据的传递。由于前面姿态识别模型的部署和特征的提取使用的 是c++代码进行实现的,而对疲劳特征进行提取和数据处理以及随机森林疲劳检测模型的训 练都是依靠python进行编程,所以需要设计一个接口将C++模块检测到的特征信息传递到 Python进行处理,另一个接口用来实现树莓派和手机的交互,手机APP请求疲劳检测*** 的后端接口,后端将实时检测到的疲劳状态结果返回给APP端进行与用户的交互。
(1)接口名:getdata
作用:APP请求接口,返回检测的疲劳结果
请求URL:/getdata
请求方式:POST或GET
接口的返回参数表,如表2所示.
表2 getdata接口返回的参数
(2)接口名:redirect
作用:用于将姿态识别模块的检测结果传递到Python模块
请求URL:/redirect
请求方式:POST或GET
redirect接口的请求参数表和返回参数表分别由表3和表4所示.
表3 redirect接口请求的参数
表4 redirect接口返回的参数
5.3.2后端接口的测试
(1)获取结果测试
获取结果测试用例采用GET请求返回检测的结果,该接口的前置条件是疲劳检测*** 已经启动,***已经识别到了驾驶员,并通过疲劳检测模型得到了检测的结果,该用例用来 测试可能会出现的返回错误情况,如表5所示。
表5 getdata接口测试用例
获取结果测试用例描述是对获取结果用例的详细补充,如表6所示,在实际的应用中:
在疲劳检测***的后端,由于担心疲劳检测的速度和APP请求的速度不匹配,导致在 APP端返回结果时,造成误差,所以声明了一个长度为5的全局队列,对结果进行存储。本次测试用例,主要针对当检测的疲劳结果不同以及队列的长度不同时,进行测试。
表6 getdata接口测试用例描述
(2)数据传递测试
数据传递测试用例采用GET请求将处理好的数据传递到Python的疲劳检测模块中去, 该接口的前置条件是疲劳检测***开启,检测到了驾驶员,并且获得了对应时间窗口大小的 数据,该用例用来测试可能会出现的数据传递错误情况,如表7所示。
表7 redirect接口测试用例
数据传递测试用例描述是对数据传递用例的详细补充,如表8所示,在实际的应用中:
该测试用例主要针对,由于疲劳检测设置的时间窗口大小为10,每当得到10个数据时, 需要将数据传递给疲劳检测模块,因此需要对传递的数据类型和长度进行检查。
表8 redirect接口测试用例描述
5.4APP端的实现
此次做的基于面部骨架的疲劳检测***的应用场景是在车上,利用摄像头进行实时图像 的获取,并通过骨架模型提取出特征,放入随机森林疲劳检测模型进行检测,根据检测出疲 劳的不同等级,对驾驶员进行不同的反馈,实现与用户的交互,用来对疲劳驾驶进行预警和 提醒功能,尽可能的消除疲劳驾驶的安全隐患,保障驾驶人的安全驾驶。基于上述的目的, 为了更够更好的与驾驶员进行交互,更加便捷的向用户给予疲劳提醒,考虑到车上的应用场 景,不适合用web端进行反馈,所以用手机APP作为此次疲劳检测***的前端,与用户进 行交互,反馈实时的疲劳状态。
疲劳检测***的APP界面中,APP总体上有三部分进行组成。包括界面正中央的疲劳 度显示模块,它采用仪表盘的方式,可以根据后端返回的疲劳度,对驾驶员的疲劳值进行实 时的反馈,驾驶员在驾驶过程中可以直观的看到自己的疲劳度和状态。APP下方是开始和 关闭两个按钮,当用户点击开始时,APP开始不断向后端发送请求,获取后端检测到的疲 劳数据,经过测试,发送请求的速度与后端检测结果产生的速度基本保持一致,当用户点击 关闭时,APP停止对于驾驶员疲劳度的反馈,不在进行发送请求和疲劳预警功能。
APP右上方的WIFI信号,用户点击之后会出现弹窗,让用户输入用来返回检测到疲劳数据的请求地 址以及端口号,设计这个功能的原因,主要是由于为了对***进行调试的时候方便,由于测试的场景和情 况常常发生变化,树莓派有时通过网线连接,有时通过WIFI连接,树莓派和手机所在的局域网常常改变, 为了对***测试的时候方便配置,将每次请求的后端地址和端口设置为手动输入,这样可以就解决了每次 局域网更换IP发生变化的繁琐问题,使本发明对***开发和测试时更加便捷。
同时,为了对***测试的时候更加方便,将***的后端分别在树莓派和阿里云服务器都 完成了部署,这样树莓派检测到疲劳特征,传递到服务器上,由服务器作出疲劳行为的检测, 手机APP可以直接请求服务器的公网IP和接口,不用再将树莓派和手机放到一个局域网下, 所有的手机都可以直接的请求服务器,不需要再进行WIFI的连接,都可以使用本发明的 APP。同时,树莓派也可以做热点,作一个无线发射信号,将后端部署到树莓派上,手机连 接到树莓派的热点上,同样可以达到在一个局域网的效果,适合后期将设备转移到车里,汽 车开过网络不佳的路段时或者当网络信号不好时,服务器的使用必定会受到极大的影响,而 树莓派做热点就能很好的解决这个问题,应对网络不佳的情况。
5.5***的展示和测试
5.5.1***的展示
由于树莓派进行面部骨架识别的命令过于的繁琐,需要同时输入运行的程序、使用的模 型位置、摄像头的id、以及加速棒的名称进行启动,同时为了方便以后部署到车上,应对在 车上不能够对树莓派进行命令操作或者方便对于***不了解的人使用,所以编写了shell脚 本,可以实现树莓派开机自动启动树莓派的疲劳检测,取代了原来繁琐的命令输入启动方式, 当驾驶员准备驾驶汽车时,只需打开树莓派的电源,用手机连接上树莓派的WiFi即可实现 疲劳检测***的启动,不需要其他多余的操作,也不需要对***有所了解,对用户及其的友 好,整个疲劳驾驶检测***的实际应用性得到了极大的提升。
当用户将树莓派开机启动后,打开手机端APP并且连接上树莓派的WiFi,点击屏幕的 开始按钮即可开始疲劳识别检测了。
当驾驶员处于正常的状态时,疲劳检测***对驾驶员的驾驶行为进行检测,手机APP 通过请求后端的接口不断得到检测的结果,当检测到驾驶员正常驾驶,轻度疲劳,重度疲劳 时,如图10接口返回结果所示,其中,图10a)正常驾驶;图10b)轻度疲劳;图10c)重度疲 劳。
为用postman调用后端的getdata接口得到的返回结果,返回结果用json格式表示,包 括疲劳度(rate)、疲劳结果(result)、以及status三种返回结果。
5.5.2***的总体测试
由于时间的限制,在实验室完成了对于***的总体测试,通过模拟驾驶时的正常、轻度 疲劳、重度疲劳的状态,测试***检测的准确率、检测的实时性以及APP的的提醒功能, 对***的整体功能完成度有一个全面了解,了解疲劳检测***可能存在的问题,方便在今后 对***进行进一步的完善,提高疲劳检测***的用户满意度。
当手机APP端得到了后端接口返回的正常驾驶结果,此时疲劳仪表盘上显示此时司机 的正常疲劳度(为29%),APP无其他的反应,司机没有出现疲劳驾驶,可以继续驾车。
手机APP得到了后端接口返回的轻度疲劳结果时,此时疲劳仪表盘上显示此时的司机 轻度疲劳度(为61%),APP发出“叮咚”的声音,同时显示“轻度疲劳状态”的橘黄色字样, 对司机进行提醒。当轻度疲劳时,疲劳有很大的概率会继续加剧,这时候给予适度的提醒, 使得司机重新提高驾车注意力,引起警惕,进行及时的休息,可以起到很好的效果。
手机APP端得到了后端接口返回的重度疲劳结果时,此时疲劳仪表盘上显示此时的司 机重度疲劳度(为88%),APP发出“请注意,您已进入疲劳驾驶,请及时休息”的报警,同 时显示“重度疲劳状态”的红色字样,对司机进行警告。当司机处于重度疲劳时,视线已经完 全不在道路的前方,这时如果在继续驾驶车辆,很容易发生交通事故,造成严重的后果。这 时候要给予司机严重的警告,告知司机其已经处于重度疲劳状态,必须要停止驾驶行为,进 行休息。
疲劳检测***完成了整体上的功能实现,但是由于树莓派这种边缘设备计算能力的限 制,当驾驶员的身体出现大幅度的偏移时,面部骨架模型将失去对于面部特征点的检测。虽 然此时失去了脸部的特征,但由于头部的姿态特征,依然可以对此姿态下的重度疲劳状态进 行识别,发出疲劳驾驶的警报。
同时由于面部骨架模型的输入为三通道的RGB图像,在黑天时,摄像头无法采集到有 效的图像信息,所以很难对驾驶员的姿态进行检测。可使用红外摄像头获得单通道的驾驶员 图像,实现在黑天时对疲劳的检测。
本发明完成了对整个疲劳检测***实现的介绍,整个疲劳检测***部署在树莓派上,实 现了开机自动启动的功能,运用Flask框架完成了后端接口的编写,利用手机APP实现了与 用户的交互,能够针对检测到的不同驾驶疲劳状态,对用户进行语音以及文字的提醒,完成 了与用户的合理交互。运用服务器以及树莓派做热点两种方式解决了IP变化的问题,使整 个***的使用更加便捷,在***完成之后,对后端接口和***进行了测试,保证了***的流 畅运行。
本领域技术人员在考虑说明书及实践这里公开的公开后,将容易想到本公开的其它实施 方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应 性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技 术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由所附的权利要求指 出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以 在不脱离其范围进行各种修改和改变。本公开的范围应由所附的权利要求来限制。
Claims (10)
1.一种基于面部骨架模型的驾驶疲劳检测方法,其特征在于,所述基于面部骨架模型的驾驶疲劳检测方法包括:
步骤一,通过摄像设备获取驾驶员实时的RGB图像和深度图像,利用OpenPose人体姿态检测模型对获得的图像进行识别;
步骤二,通过针孔相机模型对获得的识别图像进行3D骨骼化,利用OpenFace人脸检测模型进行头部姿态特征的提取、脸部特征的提取,利用提取到的头部和脸部的姿态特征,计算出疲劳特征;
步骤三,利用分类器对得到的疲劳特征进行检测,获取疲劳检测模型,利用所述疲劳检测模型对疲劳进行分级判定,并利用APP与用户进行交互、提醒。
2.根据权利要求1所述基于面部骨架模型的驾驶疲劳检测方法,其特征在于,所述步骤一深度图像的获取包括:
采用D435深度摄像头完成深度数据的采集,将配置好config并通过pipe进行流式传输获得采集到的深度图像和彩色图像,设置获得的图像像素比为480*640,fps为30,通过时间戳将深度图像和彩色图像进行对齐,对于丢失深度信息的帧进行补全和丢弃,完成数据的实时采集;
利用OpenPose人体姿态检测模型对获得的图像进行识别包括:
第一步,获取人体关键点坐标:
基于caffe框架搭建的cnn卷积神经网络,对摄像头的视频流进行实时的检测得到人体的二维骨架化图象;
第二步,对第一步得到人体的二维骨架化图象进行识别:
(1)先识别出图像中可能存在的所有关键点,输出方式通过feature map,然后在输出各个关键点之间可能的连接情况,输出方式为关节亲和场PAFS;
(2)利用VGGNet前10层进行特征的提取,经过heatmap和pafs预测网络,该网络总共有上下两个层次,每个层次都是6个阶段进行不断的微调,且每个阶段都会将feature maps进行生成和融合;
(3)在完成融合后,confidence map为一个2D形式,如果图中只有一个人,confidencemap只出现一个峰值,当图像中有多个人时,对于每一个人的每一个可见关键点在对应的confidence map都有一个峰值;进行多人姿态估计时,图中关键点之间存在的关系可能存在很多种可能,检测到的所有人体骨骼之间都存在着估计两个关节部位连接PAFS;
(4)对于关键点,用PAFS的亲和场部件,结合人体的姿态形式,维持各个躯干之间的相对关系。
3.根据权利要求1所述基于面部骨架模型的驾驶疲劳检测方法,其特征在于,所述步骤二所述3D骨骼化包括:
利用OpenPose人体姿态检测模型识别出驾驶员上半身的特征点进行姿态的识别;
利用D435深度摄像头进行检测时,同时得到一帧对齐的RGB和深度图像,利用深度摄像头检测到的深度信息,将OpenPose人体姿态检测模型识别出的人体关键点2D坐标和对应位置的深度信息进行结合,得到人体关键点的三元组,每一个三元组前两个元素代表人体关键点的x和y坐标,第三个元素代表此位置对应的深度信息;如果这个三元组的每个值均为-1.00,则代表OpenPose检测这帧图像时,失去了对于此个关键点的检测,全部设为-1.00进行表示;
将利用姿态识别模型得到的2D关键点坐标和深度摄像头采集到的深度信息进行保存,通过D435的相机内参,将数据转换成三维的坐标点,获得更为真实的人体姿态信息,相机的变化内参有:camera_factor、camera_cx、camera_cy、camera_fx以及camera_fy,变换使用针孔相机模型,通过深度和2D坐标将拍摄到的物体进行3D还原;
将转化后的人体3D关键点坐标进行保存,获得转化后得到的多个人体3D关键点坐标信息;
对得到的多个人体3D关键点坐标信息骨架图进行旋转,将3D骨架化的图形旋转到正面,具体包括:首先从人体的臀部和脖子之间的中心点开始,将中心点平移到原点上,在这个原点的基础上围绕着x、y、z三条轴进行旋转,绕轴旋转的旋转矩阵公式如下所示,分别是绕x轴、y轴、z轴逆时针旋转的公式;
4.根据权利要求1所述基于面部骨架模型的驾驶疲劳检测方法,其特征在于,所述步骤二利用OpenFace人脸检测模型进行头部姿态特征的提取包括:
定义1:前屈角α1定义为脖子和鼻子组成的向量与y轴法线组成的夹角,这个特征用来检测当疲劳时常常出现的频繁点头和长时间的低头动作,计算公式如:
所述面部特征点的提取包括:
根据OpenFace人脸检测模型得到人脸68个特征点,进行眼部和嘴部特征的提取;
通过EAR值的一次变化过程,进行眨眼的检测:
MAR代表嘴部的纵横比,与眼睛纵横比计算类似,利用检测出来的嘴部坐标点计算高度和长度,求得两者的比值,用来估计嘴部的张合程度;MAR的公式如公式:
MAR的值趋近于0.1到0.2,嘴部张开时MAR的值稳定在0.6到0.7。
5.根据权利要求1所述基于面部骨架模型的驾驶疲劳检测方法,其特征在于,所述步骤二利用提取到的头部和脸部的姿态特征,计算出疲劳特征包括:
当EAR值小于0.1时,确定此帧代表着眼睛闭合;
统计这个时间窗口下,EAR小于0.1的帧数,将它除以这个时间窗口的大小,就得到这个时间间隔下的PERCLOS值;
最长闭眼时间EAR_Time、最长低头时间Nod_Time、最长哈切持续时间Yawn_Time、最长歪头持续时间Left_Time的计算均通过设定一个阈值,测定超过这个阈值的最长连续帧数;最长哈切持续时间Yawn_Time通过MAR(嘴部纵横比)进行计算的,当嘴部正常闭合时MAR的值在0.1到0.2,当说话时,MAR的值在0.25到0.3,当打哈欠时,MAR的值在0.6到0.7;当闭眼闭嘴时,左右眼的EAR在0.1附近,嘴部的MAR在0.1附近,当睁眼张嘴时,左右眼的EAR在0.3到0.4,而MAR在0.5到0.6;根据以上的数据对嘴部的行为作出判断;
对于Nod_Count(点头计数)、Yawn_Count(哈切计数)、Left_Count(歪头计数)通过对连续动作进行解析,获取这个连续动作的幅度范围以及变化过程从而设定阈值对这些疲劳特征进行计算。
6.根据权利要求1所述基于面部骨架模型的驾驶疲劳检测方法,其特征在于,所述步骤三具体包括:
首先对训练的疲劳数据进行加载,采集好的数据分别对应着正常驾驶状态,轻微疲劳驾驶状态和重度疲劳驾驶状态,其中,0表示正常,1表示轻度疲劳,2表示重度疲劳;在对数据进行完标记后,保存的数据前面带有数据名称的标签,利用正则表达式将数据分离出单独的数值存储在数组中,并转化为numpy的格式,按照每十条数据提取一次疲劳的特征,作为新的训练数据集存储起来;
在准备好数据后,利用基于Python的算法学习库中的算法进行随机森林疲劳检测模型的训练:利用train_test_split函数从数据集中选取73%的数据用作随机森林疲劳检测模型的训练,剩下27%的数据保留起来;
接着调用基于Python的算法学习库中的随机森林分类器,加载前划分好的训练数据对模型进行训练,在生成随机森林分类器时,设置随机森林的参数进行预剪枝,并不断调整随机森林的参数。
7.一种实施权利要求1~6任意一项所述基于面部骨架模型的驾驶疲劳检测方法的基于面部骨架模型的疲劳检测***,其特征在于,所述基于面部骨架模型的疲劳检测***部署在树莓派上,利用树莓派做图像处理以及算法的实现,检测到的数据上传到搭建的云平台进行存储,完成***后端的搭建,利用手机APP完成与用户的交互并且对于疲劳检测结果进行实时的反馈。
8.根据权利要求7所述的基于面部骨架模型的疲劳检测***,其特征在于,所述基于面部骨架模型的疲劳检测***具体包括:
视频流处理模块,用于通过Intel realsense D435深度摄像头读取实时的RGB和深度图像,利用人体姿态和脸部特征点模型进行检测,得到人体的关键点和面部关键点坐标,利用Intel神经加速计算棒对模型进行加速,将caffe框架的cnn模型转化为IR的模型中间形式(.xml和.bin文件),利用推理引擎完成对其的部署。通过D435相机的内参,利用针孔相机模型将2D的坐标点转化为3D的坐标点,利用得到的18个身体关键点和68个面部的关键点进行身体和面部姿态特征的提取;
疲劳检测模块,用于对疲劳状态进行分类,将疲劳分为轻度疲劳和严重疲劳两种状态,统计一定时间段内的眼睛、嘴部状态以及头部的位置,进行疲劳行为特征的确认,生成表征疲劳状态的8维特征向量,利用随机森林模型训练出对驾驶员状态进行分类的模型,完成***的疲劳检测;
交互模块,用于通过Flask后端框架完成了后端接口的编写,将检测的结果传到手机APP上;手机APP包括疲劳度展示和疲劳提醒两个模块,疲劳度展示模块将驾驶员实时的疲劳度通过表盘的方式直观的进行展示,疲劳提醒模块根据检测轻度疲劳或者重度疲劳结果对驾驶员进行提醒或者报警处理,对疲劳驾驶进行预警。
9.一种接收用户输入程序存储介质,所存储的计算机程序使电子设备执行权利要求1~6任意一项所述基于面部骨架模型的驾驶疲劳检测方法。
10.一种车载基于面部骨架模型的疲劳检测设备,其特征在于,所述车载基于面部骨架模型的疲劳检测设备执行权利要求1~6任意一项所述基于面部骨架模型的驾驶疲劳检测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111043280.0A CN113920491A (zh) | 2021-09-07 | 2021-09-07 | 基于面部骨架模型的疲劳检测***、方法、介质、检测设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111043280.0A CN113920491A (zh) | 2021-09-07 | 2021-09-07 | 基于面部骨架模型的疲劳检测***、方法、介质、检测设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113920491A true CN113920491A (zh) | 2022-01-11 |
Family
ID=79233958
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111043280.0A Pending CN113920491A (zh) | 2021-09-07 | 2021-09-07 | 基于面部骨架模型的疲劳检测***、方法、介质、检测设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113920491A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114771545A (zh) * | 2022-04-19 | 2022-07-22 | 青岛大学 | 一种智能安全驾驶*** |
CN115565159A (zh) * | 2022-09-28 | 2023-01-03 | 华中科技大学 | 一种疲劳驾驶检测模型的构建方法及应用 |
CN115861162A (zh) * | 2022-08-26 | 2023-03-28 | 宁德时代新能源科技股份有限公司 | 定位目标区域的方法、装置及计算机可读存储介质 |
CN117253330A (zh) * | 2023-10-11 | 2023-12-19 | 安徽凯旋智能停车设备有限公司 | 一种立体停车库安全控制*** |
CN117542025A (zh) * | 2023-11-02 | 2024-02-09 | 电子科技大学 | 驾驶员多特征融合的疲劳状态检测***及方法 |
CN117789181A (zh) * | 2024-02-27 | 2024-03-29 | 暨南大学 | 基于轻量级神经网络图像增强的驾驶疲劳检测方法与*** |
-
2021
- 2021-09-07 CN CN202111043280.0A patent/CN113920491A/zh active Pending
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114771545A (zh) * | 2022-04-19 | 2022-07-22 | 青岛大学 | 一种智能安全驾驶*** |
CN115861162A (zh) * | 2022-08-26 | 2023-03-28 | 宁德时代新能源科技股份有限公司 | 定位目标区域的方法、装置及计算机可读存储介质 |
CN115565159A (zh) * | 2022-09-28 | 2023-01-03 | 华中科技大学 | 一种疲劳驾驶检测模型的构建方法及应用 |
CN115565159B (zh) * | 2022-09-28 | 2023-03-28 | 华中科技大学 | 一种疲劳驾驶检测模型的构建方法及应用 |
CN117253330A (zh) * | 2023-10-11 | 2023-12-19 | 安徽凯旋智能停车设备有限公司 | 一种立体停车库安全控制*** |
CN117542025A (zh) * | 2023-11-02 | 2024-02-09 | 电子科技大学 | 驾驶员多特征融合的疲劳状态检测***及方法 |
CN117789181A (zh) * | 2024-02-27 | 2024-03-29 | 暨南大学 | 基于轻量级神经网络图像增强的驾驶疲劳检测方法与*** |
CN117789181B (zh) * | 2024-02-27 | 2024-06-04 | 暨南大学 | 基于轻量级神经网络图像增强的驾驶疲劳检测方法与*** |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113920491A (zh) | 基于面部骨架模型的疲劳检测***、方法、介质、检测设备 | |
US11783601B2 (en) | Driver fatigue detection method and system based on combining a pseudo-3D convolutional neural network and an attention mechanism | |
Mbouna et al. | Visual analysis of eye state and head pose for driver alertness monitoring | |
Hoang Ngan Le et al. | Robust hand detection and classification in vehicles and in the wild | |
CN105631439B (zh) | 人脸图像处理方法和装置 | |
CN105354988B (zh) | 一种基于机器视觉的驾驶员疲劳驾驶检测***及检测方法 | |
CN106295568B (zh) | 基于表情和行为双模态结合的人类自然状态情感识别方法 | |
CN110532887A (zh) | 一种基于面部特征融合的疲劳驾驶检测方法及*** | |
Li et al. | Modeling of driver behavior in real world scenarios using multiple noninvasive sensors | |
Abdi et al. | Deep learning traffic sign detection, recognition and augmentation | |
CN106951867A (zh) | 基于卷积神经网络的人脸识别方法、装置、***及设备 | |
CN105138954A (zh) | 一种图像自动筛选查询识别*** | |
García et al. | Driver monitoring based on low-cost 3-D sensors | |
Dua et al. | AutoRate: How attentive is the driver? | |
Ragab et al. | A visual-based driver distraction recognition and detection using random forest | |
Jamshidi et al. | Hierarchical deep neural networks to detect driver drowsiness | |
CN109934047A (zh) | 基于深度学习的人脸识别***及其人脸识别方法 | |
CN109977867A (zh) | 一种基于机器学习多特征融合的红外活体检测方法 | |
CN110135327A (zh) | 一种基于多区域特征学习模型的驾驶员行为识别方法 | |
CN108647657A (zh) | 一种基于多元行为数据的云端教学过程评价方法 | |
CN114463725A (zh) | 驾驶员行为检测方法及装置、安全驾驶提醒方法及装置 | |
RU2316051C2 (ru) | Способ и система автоматической проверки присутствия лица живого человека в биометрических системах безопасности | |
Liu et al. | 3DCNN-based real-time driver fatigue behavior detection in urban rail transit | |
CN113887386A (zh) | 基于深度学习和机器学习的多特征融合的疲劳检测方法 | |
Sharma et al. | Suspect face retrieval via multicriteria decision process |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |