基于深度学习的AI疲劳检测系统

疲劳检测的原理是根据人体疲劳状态下的特征检测,和正常状态下的特征检测做对比。在做疲劳检测之前,首先需要分析人体在疲劳状态下与正常状态下的特征有哪些不同的的表现,这些不同的表现可以通过哪些数值具体的量化出来,然后通过这些量化后的不同数值来判断属于哪种行为;最后根据获取的各种行为综合判断属于疲劳状态或者正常状态。


通过对现有的疲劳特征的研究,判断人体属于疲劳或者非疲劳状态的方法可以分为主动检测和被动检测,主动检测需要检测者配合才能进行,操作也相对繁琐,比如问卷调查、体检等;而被动检测相对来说比较容易,被动检测的优势在于不需要检测者刻意的配合,在平时正常的生活和工作状态下就能够检测。

目前被动检测的主要方法是通过人体的外部表现特征来判断人体是否处于疲劳状态,比如在正常活动中的打哈欠、闭眼时长、低头、其他表情等特征都可以做为是否处于疲劳状态的依据之一。主要应用以驾驶疲劳检测、学习工作疲劳检测为主要场景。


驾驶疲劳是指驾驶人在长时间连续行车后,产生生理机能和心理机能的失调,而在客观上出现驾驶技能下降的现象。驾驶人睡眠质量差或不足,长时间驾驶车辆,容易出现疲劳。驾驶疲劳会影响到驾驶人的注意、感觉、知觉、思维、判断、意志、决定和运动等诸方面。

疲劳驾驶带来的危害:

1、驾驶人疲劳时判断能力下降、反应迟钝和操作失误增加。

2、驾驶人处于轻微疲劳时,会出现换档不及时、不准确。

3、驾驶人处于中度疲劳时,操作动作呆滞,有时甚至会忘记操作。

4、驾驶人处于重度疲劳时,往往会下意识操作或出现短时间睡眠现象,严重时会失去对车辆的控制能力。

 5、驾驶人疲劳时,会出现视线模糊、腰酸背疼、动作呆板、手脚发胀或有精力不集中、反应迟钝、思考不周全、精神涣散、焦虑、急躁等现象。如果仍勉强驾驶车辆,则可能导致交通事故的发生。



使用检测者的外部特征表现来被动检测是实现商业化、市场化的最有效途径之一,从技术上要实现的就是区分张嘴和闭嘴,睁眼和闭眼,以及闭眼的时长,抬头低头等动作,还有就是微表情的识别。当这些技术上的问题都解决了,那么实现疲劳检测的主要难题也就解决了。


技术分析

从技术上来说,实现疲劳检测,主要是从场景种对各种影响识别判断的因素进行量化考核,而量化的工具就是一深度学习为主的神经网络模型,比如从眨眼次数这个指标来分析,需要神经网络模型实现一个识别眨眼计数的功能,而如何设计模型来实现这个眨眼计数,就要从具体的实现方法上选择了,目前最流行的就是以面部关键点为判断的依据,具体思路就是训练一个人体面部关键点定位的模型,比如人的眼睛轮廓、嘴角轮廓、还有面部整体轮廓等都可以使用关键点来定位;


当训练好人体面部关键点定位模型后,就是模型使用过程了,使用过程中再对视频中检测出现的关键点进行分析。按照上面的思路,既然是对眨眼次数的计算,那么这里需要做的就是计算眼睛轮廓点中关键位置的定位点之间的距离比,以下图为例,当计算出相关位置的点之间的距离比(轮廓点构成的高度与宽度比)小于一定范围内容的时候,我们认为属于眨眼,当这个距离保持在一定时间后(比如可以设置成3秒),我们认为此时已经不是眨眼了,而是闭眼。


上图是根据眼睛的纵横比表征眼睛的睁开程度,即眼睛宽度与眼睛长度的比例。其原理是,在睁眼状态下,人眼的宽度与长度的比值是一个相对固定的数值,当眼睛闭合时,人眼的宽度将极剧变小,此时眼睛的纵横比就会发生变化。此参数通常被用于眨眼频率计算。

对于是否处于疲劳状态,需要有一个时间段内闭眼帧数的测试,根据卡内基梅隆研究所提出的度量疲劳/瞌睡的物理量 PERCLOS (Percentage of EyeIid CIosure over the PupiI, over Time, 简称PERCLOS) 其定义为单位时间内 (一般取1 分钟或者 30 秒) 眼睛闭合一定比例 (5%或15%) 所占的时间, 满足下式时就认为进入了疲劳状态:


根据国内外学者的大量实验分析可得,当 f ≥ 0.12时,则可认为驾驶员处于疲劳状态;当 f < 0.12 时,则认为驾驶员处于清醒状态。

当然只从眨眼或闭眼来分析一个人的疲劳程度可能不够客观,那么我们加入再继续加入其他指标,比如通过统计打哈欠的次数来做为另一项疲劳的检测的指标。因为根据人们日常生活中的行为表现来看,平时正常说话和打哈欠的最大区别就是张嘴的大小程度,通过量化指标来判断就是就嘴巴的纵横比。


我在前面已经讲了眨眼计算的算法和计数思路,那么按照这个方法,打哈欠这个指标就很容易实现了,实现方法和眨眼计数一样,也需要对人的嘴角轮廓进行定位,然后根据嘴角轮廓的关键点构成的高和宽之间的距离比来判断是否属于打哈欠的行为。


嘴部纵横比表征嘴部的张开程度,即嘴部高度与嘴部宽度的比例。当打哈欠时,嘴部将极剧变大,此时嘴部的纵横比就会发生变化。

以上是能够观察到的面部行为,我们可以根据面部行为特征(眨眼、闭眼、打哈欠)来判断被检测者是否处于疲劳状态,但是有的时候我们可能并不能检测到面部特征,比如仰头、低头、转头等动作。这种情况属于个别情况,不能够检测出疲劳指数,但是可以根据实际的应用场景加入对仰头、低头、转头的动作姿态识别,进行相关的警示。

另外疲劳检测的技术实现流程和应用实现过程不太一样的,技术实现流程主要考虑的是技术上的难点,怎么从技术上实现这个效果;而应用实现就不一样了,不但要求实现技术上的效果,还需要在实际应用场景下达到能够真正检测到疲劳状态的目的。

现实生活中,由于不同的场景有不同的客观因素影响,实际上是很难统一量化评估的。比如驾驶中的疲劳检测结果,会由于驾驶环境的变化而变化。驾驶环境的变化可以分为两种,一种空间上的变化,比如公路和隧道中的变化;另一种是时间上的变化,比如白天和夜晚。不管是时间还是空间上的变化,都会导致驾驶室的明暗度情况会不一样的。



以深度学习为主的图像视觉领域,主要得益于近年来的计算力和数据成倍的增长,有了大量的数据和计算力,加上优秀的算法模型就可以解决很多行业的问题。但是同样也带来了一些问题,除了计算力的要求之外,首当其冲的就是数据问题。数据质量如果不好,会造成最终的效果下降。在疲劳检测中,这个问题也是需要处理的,所以采集什么样的数据就显得很重要,既要求数据的数量不能太少,还要求数据的质量不能太差,具有多样性。

当然除了数据上的影响,想要得到好的输出结果,还需要考虑模型的设计、训练优化、评估验证、指标测试等多方面的因素,有兴趣的同学可以参考上一篇文章:实现人工智能的三要素。关 注 V 信 公 众 号:深度人工智能学院,我们将会长期致力于人工智能的职业教育,分享人工智能技术在各行业的实际应用案例。


咨询热线
咨询热线18011368104
028-67343886
9:00-18:00 (工作日)
微信客服
扫码添加微信客服