本发明涉及睡意检测技术,具体涉及一种基于面部特征的实时睡意检测方法。
背景技术:
在过去的十年中,睡意检测已经被广泛研究。目前比较常用的睡意检测是hog和svm方法,所使用的数据是基于人们手动标注的。与手动标注相比,智能化的睡意检测要更加准确,因为人的决定比智能更容易犯错误。此外,还有通过智能手表和包含传感器识别的头带来检测睡意的方法,但是该方法受到司机选择的限制,司机可能不愿意戴头带。
监督式学习方法需要高度可靠的基本事实。在之前的研究中使用人类定义的眼睛特征,从眼睑运动计算开始。这意味着该方法局限于眼睑运动提供的信息。因此,仅提取和利用那些人造特征可能会导致丢失一些有意义的信息,困倦状态可能发生却未被检测。因此,只能使用更加复杂的算法来识别疲倦。比如使用基于深度学习的面部表情识别,但是,该方法的缺点是需要大量的数据来训练神经网络。
技术实现要素:
本发明的目的在于提供一种基于面部特征的实时睡意检测方法,通过监视眼睛和嘴巴的状态实现嗜睡检测。
实现本发明目的的技术方案为:一种基于面部特征的实时睡意检测方法,包括以下步骤:
步骤1,人脸检测和皮肤分割
使用violajones进行面部特征检测,检测到人脸后,通过将图像转换为ycbcr域来执行皮肤分割;
步骤2,闭眼检测
使用边缘检测识别出两只眼睛,并根据单只眼睛的对称性确定眼睛的中心,最后确定瞳孔;如果眼睛打开,执行步骤3;如果眼睛闭合,并超过第一阈值时间,则将其视为睡意状态,在该状态期间设置警报,若眼睛闭合时间未超过第一阈值时间,则执行步骤3;
步骤3,打哈欠检测
使用violajones检测到嘴部区域,采用k-means聚类对嘴部区域进行分割,通过对区域内图像像素的划分,判断嘴巴是否张开,并利用相关系数模板匹配进行跟踪,如果嘴巴张开时间大于第二阈值时间,则视为打哈欠状态;
步骤4,睡意检测
采用线性核的二元svm分类器进行分类,如果检测眼部打开,未检测到打哈欠,视为正常状态;如果检测眼部打开,并且检测到打哈欠,则视为睡意状态;如果检测眼部闭合超过第一阈值时间,则视为睡意状态;在最终检测为睡意状态下打开警报。
进一步的,步骤2中,第一阈值时间为3秒。
进一步的,步骤2中,使用sobel边缘检测识别出两只眼睛。
进一步的,步骤3中,第二阈值时间为3秒。
与现有技术相比,本发明的显著优点为:本发明通过监视眼睛和嘴巴的状态实现嗜睡检测,而不需要任何传感器或可穿戴设备,并且可以在各种照明条件下很好地工作。
附图说明
图1为基于面部特征的实时睡意检测方法流程图。
具体实施方式
结合图1,一种基于面部特征的实时睡意检测方法,包括以下步骤:
步骤1、人脸检测和皮肤分割
人脸检测使用的是violajones的面部特征检测,其目的是尽量减少误检识别面部表情。一旦检测到人脸,通过将图像转换为ycbcr域来执行皮肤分割。将图像转换为ycbcr域的最大优势在于,仅考虑色度分量可以消除亮度的影响。在rgb域中,图像的每个分量(即红色,绿色和蓝色)具有不同的亮度。但是,在ycbcr域中,所有亮度信息都由y分量给出,因为cb(蓝色)和cr(红色)分量完全独立于亮度。域转换用于将rgb图像分割为y,cb,cr分量。
步骤2、闭眼检测
帮助检测驾驶员疲劳的最重要因素是眼睛的状态,即打开或关闭。在困倦状态下,眼睑肌下意识地吸引,加速进入睡眠过程。然后使用边缘检测将两只眼睛分开,并根据眼睛的对称性确定眼睛的中心,最后确定瞳孔。如果眼睛打开,则视为正常状态。如果眼睛闭合,并超过第一阈值时间,则将其视为睡意状态,在该状态期间设置警报。
边缘检测可以被视为定位像素强度转换的过程。本发明采用sobel边缘检测方法,sobel检测器用一个过滤器卷积图像,水平和垂直方向上的可分离和整数值函数。因此它是一种相对经济的计算方法。其次,由其产生的梯度近似是相对粗糙的,其最适合于高频变化,例如疲劳期间的眨眼。使用相关系数模板匹配方法在每一帧中确定眼睛的状态。通过充分考虑连接像素的变化和与眼睛像素的相似比获得眼睛的区域。sobel边缘检测方法也用于检测眼睛的精确和精确的边界。该技术从左侧和右侧开始,寻找眼睛,因此可以分开检测眼睛。将检测到的眼睛从图像中分割出来并用于生成眼睛模板,通过这种方式,可以获得用于状态分析的相当稳定的眼睛模板,并且还减少光反射的影响。为了区分疲劳,应该准确地识别眼睛的状态。这里描述了影响眼睛大小的两个因素。人的眼睛大小不一。其次,每个帧中司机和摄像机之间的距离都在变化。因此,选择将眼睛的模板预固定在12×30的尺寸下,然后进行特征提取。对于每个眼睛的模板,区域、平均高度和宽高比是决定眼睛状态的关键特征。眼睛状态可分为三类:完全睁开、半睁开和完全闭合。完全睁开和半睁开时的不同眼睛状态在大部分时间内没有被很好的区分,可能导致更多的假警报,同时,驾驶员头部的运动会导致对驾驶员的眼睛跟踪失败。
步骤3、打哈欠的检测
另一个明显的表现在一个人脸上的疲劳驾驶迹象是打哈欠,它是人疲劳且即将入睡的身体反射。使用violajones检测到嘴部区域,采用k-means聚类对嘴部区域进行分割,通过对区域内图像像素的划分,并定义合适的阈值,判断嘴巴是否张开,并利用相关系数模板匹配进行跟踪,如果嘴巴张开大于3秒,则视为打哈欠。k意味着将对象划分为互斥群的k类,这样每个集群中的对象彼此最接近,并且距离其他集群中的对象最远。每个簇的特征是其质心或中心点。函数执行k-means聚类,通过使用迭代算法,将对象分配给每个簇,使每个对象与其所在的集群质心的距离,小于该对象与其他集群质心的距离。图像像素的分类是基于亮度强度的。本发明使用k=2在图像分割领域展示嘴巴的位置和打开状态。
步骤4、睡意检测
采用线性核的二元svm分类器进行分类,如果检测眼部打开,未检测到打哈欠,视为正常状态;如果检测眼部闭合,并且检测到打哈欠,则视为睡意状态;如果检测眼部闭合,未检测到打哈欠,则视为睡意状态;如果检测眼部打开,并且检测到打哈欠,则视为睡意状态。在最终检测为睡意状态下打开警报。