首先,总结一下检测某一特征的方法:
(1)模板匹配计算当前帧与模板相同位置处的灰度值或颜色值的差值,通过特定的距离公式来计算匹配程度。
稳定可靠与光照和姿势无关计算量大
(2)区域分割对面部区域进行二值化分割对孤立区域进行标示,再根据几何特征进行定位。(如连通面积等)。
运算量小噪声影响大
(3)对称变换法:DST方向对称变换计算量大
(4)灰度投影法:对人脸图像进行水平和垂直方向的投影,根据波峰波谷分布信息确定眼睛的位置。(将二维换到一维中去)定位速度较快受瞳孔灰度类似的眉毛或头发影响大。
(5)基于统计的方法通过对大量目标样本和非目标样本进行训练学习得到一组模型参数,基于模型构建分类器或者滤波器来检测目标。采用大量样本训练分类器,最后基于统计信息进行分类。
基于机器学习的疲劳识别,为第5种方案,属于统计方法。即输入训练样本,使用嘴巴部分、眼睛部分的图片作为训练样本的输入,可标注为闭嘴、中度张嘴和张嘴,闭眼、微闭和睁眼,也可直接检测嘴巴部分的哈欠状态和闭眼时的眼睛状态,当检测到哈欠状态时,对连续帧进行计数。当连续到一定阈值,即可进行疲劳报警。此时这种方法的优点在于可以考虑到尽可能多的影响因素,如光线的变化,克服人脸偏转的影响,直接对面部情况进行标注。
查阅相关文献,《基于多视频窗口的疲劳驾驶监测系统研究_王万军》一文,使用Adaboost算法提高准确率,其作用是:检测人脸。基于haar特征的Adaboost算法在不同的背景下对人脸检测具有好的效果。积分图就是从图像起点到各个点所形成的矩形区域像素之和作为一个数组元素保存在内存中。使用积分图可方便计算。为规避头部偏转和光照强度的影响,使用动态肤色建模:首先确定人脸肤色候选区域;再对候选区域进行二次判别,如进行器官分布特征来验证人脸区域。增加初始时的采样环节,对不同的驾驶员建立肤色CgCr模型。
对于遮挡问题,还有一种解决方案:使用面部几何规律,使用基于等腰三角形的自适应遮挡估计:
有了这组公式,即使一面被遮挡,也可以计算出关键点的坐标信息。
《基于近红外图像的疲劳驾驶检测研究与系统实现_张恒》详细为我们介绍了Adaboost算法的步骤,其实质就是使用几个特征训练多个分类器,然后将这些分类器进行结合,而结合的过程也是机器学习的过程,每一次在分类过程中都把分错的样本加大权重,确保下次在分类时该类样本能够被正确分类。Adaboost能够保证在若干个迭代学习后整体错误率低,在每次迭代之后会更新样本的权重,Adaboost算法会对分错的样本加重权重,使得其在下一个分类器中能够被正确分类,最后将这些分类器结合起来得到一个强分类器。
《基于面部特征的全天候疲劳驾驶检测及预警系统的研究_罗声平》一文,使用改进ASM算法(Active shape model结合了Adaboost),其是基于PDM点分布模型的统计学习算法,实现待定位模板产生了一定程度形变时的目标定位。步骤如下:
(1)建立统计形状模型 手工标定目标特征点 对齐后的形状向量集进行PCA
(2)建立统计特征模型 灰度信息采样 构建局部灰度特征
(3)目标搜索匹配 对法线采样点进行灰度值求导的方法得到特征点的局部特征。
共搜集了30幅左眼图像组建左眼库(该方法可能对头部转过角度有改善)
步骤流程图如下:
《一种快速驾驶员疲劳检测方法》
为了解决误判问题,文中使用基于Haar特征的Adaboost算法训练分类器, 实现嘴的正常状态和张嘴状态的区分,再针对区分结果实现二次处理,计算嘴的张开程度,判定是否处于疲劳状态。
处理方法:
文中选取打哈欠及各种张嘴时的嘴部图像为正样本,选取脸部其他部分图像为负样本,正样本和负样本图像均从网上搜索得到,正样本图像250张,大小统一缩放为24×24,负样本图像550张,部分样本图片如图7所示。
数量:正样本250张,负样本550张。
正样本:
负样本:
训练分类器使用Opencv提供的opencv_haartraining.exe训练程序得到分类器描述文件。由于嘴位于人脸的下半部分,所以搜索区域可缩小至人脸下半部分,节省搜索时间。检测完成得到打哈欠(或张嘴)的图片,则再用局部搜索确定二值化分割阈值,把嘴的轮廓分割出来。 为判断嘴的张开程度,我们同样在轮廓上取最具代表性的4个点: 上下边缘点和左右边缘点, 通过计算轮廓的外接矩形的宽高比来判定是否为打哈欠状态,一般认为当宽高比大于1.5的时候处于疲劳状态。
以上这些文献中均为使用了机器学习训练分类器的方法得到哈欠、闭眼特征,从而判定疲劳。