基于视觉的疲劳检测可以认为大致分为三个部分,点头,哈欠,眨眼。分别为姿态、嘴部特征、眼部特征。
本文主要介绍哈欠的测定方法。
首先研究了陈博士《基于可拓学与面部视觉。。。》一文,他提出一种基于特征点曲线拟合的嘴唇内轮廓检测方法,先对嘴巴进行粗定位,然后对嘴巴区域进行Harris角点检测,利用检测到的角点坐标拟合出嘴巴内轮廓曲线。【角点检测+二次曲线拟合】
内轮廓具有的优点为:准确的张口度;头部较大旋转仍能计算张口度。
什么是角点:角点没有明确的数学定义,但人们普遍认为角点是二维图像亮度变化剧烈的点或图像边缘曲线上曲率极大值的点。
1、P46:嘴巴粗定位、角点检测Harris角点检测算法【OpenCV中定义了cornerHarris函数】、嘴巴内轮廓模型
2、最小二乘法获取内轮廓线(分段二次函数拟合)
http://blog.csdn.net/xiaowei_cqu/article/details/7805206
P61起:
3、基于嘴巴内轮廓的张口度计算公式为:
4、指标:
双阈值法哈欠检测:
对内轮廓进行检测:结合张口度与张口时间
5、判定方法
判定方法一:
首次判决:根据张口度大小进行初判;然后根据时间进行首次判决,对于在条件区域的哈欠进行二次判决。
二次判决:对应于嘴小的人,此时降低张开度判决门限后,记为
(降低后的门限),若此时持续125帧以上,则可判定为哈欠。
列表如下:
论文所给参考阈值:
在区分无哈欠、哈欠、深哈欠时:(利用连续时间的长短区分)一般为3s超过3s为长哈欠(深哈欠),2.5-3s为哈欠。
M-时序构建:p88
在长度为Lt秒时间窗内利用阈值对张口度值进行二值化。
时间窗内连续1的最大个数占总二进制位数的比例记为M,当M达到阈值才确定为哈欠,设l表示ti时刻时间窗内连续1的个数,表示最长的连续1的个数,则
将时间窗内连续1的最大个数占总二进制位数的比例M沿时间轴构成时间序列,记为记为
对M-时序进行分段并标记0、1、2分别代表无哈欠、浅哈欠、深哈欠。
判定方法二:
Yawn为符合打哈欠的帧数,N为1min内总帧数,设阈值为10%,当Freq>10%时认为打了一个深度哈欠或者至少连续两个浅哈欠,此时给出疲劳提醒。
Step1:提取帧图像检测人脸,嘴部粗定位进行肤色分割;
Step2:嘴部精确定位,获取嘴部特征值K1,若k1大于阈值T1,则Step3,;否则K2=K1/2,count=0回到step1,检测下一帧。
Step3:提取嘴部内轮廓特征值K2,若K2大于阈值T2,则Step4,否则count=0,返回Step1,检测下一帧。
Step4:统计哈欠特征count=count+1,当count超过阈值且下一帧的哈欠特征消失,保存count到Yawn,Yawn(i)=count,count=0(count清0)回到Step1,否则的话也直接转回Step1。
Step5:分析完1min内所有图像,计算哈欠特征总数:
,按照
计算Freq值,超过阈值则发出疲劳提醒。(推荐阈值为0.1)
特征提取方法
嘴部特征提取的方法1:
Landmark可进行粗定位。48点、54点 上下可能定位不准确。
50 52 58 56
Gabor变换,将原嘴部图像与Gabor核函数卷积。
对嘴部图像做垂直方向的Gabor变换,然后再经过二值化得到内部轮廓。
第三列为垂直Gabor变换后结果,第四列为第三列二值化后的结果。
实现方法可参考如下博文:
http://blog.csdn.net/u013709270/article/details/49642397
SUSAN算子
嘴部特征提取方法二:
方差投影法进行粗定位
角点检测Harris角点检测算法【OpenCV中定义了cornerHarris函数】
再进行分段二次函数拟合。
实现程序:opencv人脸及角点检测
Harris角点效果并不很理想,总是会把牙齿部分作为角点,显然与内嘴唇相差较远。
6、决策:
1、论文中表述:只要产生打哈欠的动作即归类为“疲劳”。
连续70帧进入哈欠预备期,通过统计连续张嘴的时间长度(帧数)来确定哈欠的深浅,累计打哈欠时间在10s以上则判为重度疲劳。
单位时间(1min)内:(25帧/s)
1min打一次浅哈欠为轻度疲劳,1次一般哈欠为中度疲劳,或2次为中度疲劳。
2次深哈欠为重度疲劳。
3-4s浅哈欠;4-5s为深哈欠。
测得为哈欠的连续帧数即保存起来,记录1min内哈欠的次数。
//另一种计算哈欠特征总数:,按照计算Freq值,超过阈值则发出疲劳提醒。(推荐阈值为0.1)
2、进行加权评分:基于眼睛和打哈欠的特征进行融合决策(打分,以模糊度表示)
来源:《基于面部特征识别的管制员疲劳监测方法研究_汪磊》