基于多帧间区域性光流特征的精神疲劳检测
2018-08-17姬秋敏陈云华
姬秋敏,张 灵,罗 源,陈云华,向 文
(广东工业大学 计算机学院,广东 广州 510000)
0 引 言
道路交通事故是与非健康有关的主要死因之一[1]。一般的,疲劳可以分为身体疲劳和精神疲劳,本文主要研究精神疲劳。在近些年的文献中,已经对疲劳测量方法进行了各种努力,并提出了以下几种检测方法:①基于生理指标的检测方法;②基于驾驶员行为特征的疲劳检测方法;③基于机器视觉与人脸表情识别的非接触式疲劳检测方法。Rajiv Ranjan Singh等[2]通过测量人的皮肤电与光容积和脉搏等生理指标来判断视疲劳状态,但这类方法在一定程度上会影响驾驶操作。王斐等[3]通过结合被采集者的电脑测试信号和驾驶方向盘的数据来判断疲劳状态,由于每个人的驾驶习惯不同,该方法的鲁棒性不强。谢国波等[4]采用曲线拟合嘴巴轮廓的检测方法,判断嘴巴是否打哈欠。周云鹏等[5]基于面部视觉多特征融合的驾驶员疲劳状态检测算法,通过分析驾驶员眼睛,嘴巴以及整体面部表情的状态,通多模糊处理判断驾驶员的状态。Masrullizam等[6]利用纹理特征首先判断嘴部是否被遮挡,然后计算嘴部张开的高度与嘴部显著性区域的比值,设定阈值来判断嘴部状态。以上方法从不同角度进行探索并且达到一定的检测效果,但存在识别率低的问题。
由人的先验知识知,人产生疲劳时,嘴部和眼睛部位动作缓慢,动作强度低,所以本文应用全局光流技术于疲劳表情。光流计算方法有相位[7]、能量[8]、匹配[9]和梯度[10]这4种。光流法具体分为:全局平滑法(HS)和局部平滑法(LK)[11]。由于局部平滑法对区域边缘的运动估计不准确的缺点。全局平滑法可在低噪声的干扰下跟踪目标,故本文采用了基于梯度的多帧间局部性全局光流计算方法。对嘴部区域和眼部区域分别计算光流,在嘴部区域得到运动光流后,计算光流加速度,设置加速度模值和阈值参数提取出嘴部由小位移到大位移动作强度大的开始帧。统计各个区域的光流方向,设定其方向阈值,得到一段时间内打哈欠和闭眼的频率。采用计算光流峰值的方法区分说话和打哈欠,疲劳眨眼和正常眨眼。实验结果表明,本文方法提高了识别精度,减少了误报的可能性。
1 特征提取
一段疲劳表情的识别过程包括样本采集、预处理、特征提取和识别4个步骤,成功识别疲劳状态的关键在于特征提取,在处理序列图像时,不仅仅要提取单帧图像的形变特征,还要考虑连续帧间的运动信息。结合引言部分的思考,使用全局光流法提取特征。
我们的兴趣是运动目标在帧上的位置,是通过跟踪点从这一帧到下一帧的运动变化,在这一帧中的点检测到在下一帧中这个点所在的位置,得出点所在时间变化的位置。在这里使用基于梯度的全局光流算法。
光流算法在算法范畴上属于光学算法,大多数光学算法有一个重要的假设就是亮度恒定约束(BCC),也就是说一个点的亮度从一帧到另一帧的亮度不变,即像素灰度值不随位移变化,假定点a=(x,y)T在t时刻的灰度值为I(x,y,t),根据运亮度恒定假设,BCC的一阶近似即为光流约束方程,可表示为
It+vIx+uIy=0
(1)
光流的第二个假设是给定邻域内的速度向量场变化是缓慢的。根据这一假设可以得出以下的速度平滑项
(2)
对于图像上的所有像素点,需要满足式(1)和式(2)的和最小。结合光流约束条件和速度平滑约束条件,建立以下的极小方程
(3)
式中:α是平滑权重系数,表示速度光滑项所占的权重。
(4)
(5)
从上式可知对于图像中一个特定的点,前后两次解得的速率值之间没有直接的联系。通常需要迭代上百次才能求解。迭代多次后得到的解能最大程度上满足光流的两个约束条件,解得的u,v为最优光流,能够真实体现所求区域的运动变化。由于全局光流的计算量比较大,实验结果表明计算相隔5帧的光流能取得较好的效果。
2 加速度模值计算
在打哈欠的过程中肌肉会产生一定的力F使嘴部区域发生一定的变形,该力产生一个加速度α。假设在此过程中质量相同,则F∝α。加速度模值的大小可以反应嘴部区域的变化程度,α模值大,嘴部区域变化大;α模值小嘴部区域变化小,从而可以确定打哈欠发生的时刻。
(6)
式中:Δx, Δy=1。像素点p的加速度近似估计的算式如下
(7)
加速度的模值的和α的计算公式如下
(8)
本文使用全局阈值方法确定嘴部区域发生打哈欠的关键帧。具体的步骤如下:
步骤1 读入当前帧视频图像Ft进行以下处理;
步骤2 对图像Ft进行灰度化,提取嘴部区域,得到处理后的图像Fm;
步骤3 利用H-S光流法得到每一帧像素点的光流信息,计算出每一帧的速度值矩阵Vectort;
步骤4 基于相邻两帧嘴部区域的速度值矩阵计算每一帧的加速度模值的和sumt,得到时间段k内所有图像的加速度模值和的矩阵a;
步骤5 计算一段时间k内加速度模值和的最大值pk,最小值mk;
步骤7 进入下一个时间段k,返回步骤2。
3 特征统计
嘴部区域的箭头代表光流,图像中光流箭头的方向表示像素点的运动方向,这体现了两帧间点的运动信息。图1为一个人打哈欠的过程中随机抽取的2帧。图1中嘴巴张开时光流变化明显,光流的方向反映了该区域的运动趋势。图2为一个人眨眼过程中抽取的2帧。图2中光流的方向很好地反应了眼部区域像素点的运动趋势。
图1 打哈欠光流图
图2 眨眼光流图
为了能够识别表情,需要将光流的方向量化。打哈欠和眨眼的动作反映出的光流的方向大约为上和下,故光流的模式分类可分为上、下、左、右。如图3所示。
图3 光流运动模式分类
图4 光流方向统计
由于说话和打哈欠的光流方向特征统计图极其相似。分析到说话的速度相比于打哈欠要快很多,可以使用光流的另一个峰值ΔIn来量化,ΔIn是In和In-1之间的光流,对图像中所有的像素点光流速度求和,生成光流峰值
(9)
其中,f(n)是当前帧嘴部区域所有像素点光流速度的总和,X是图像矩阵。设定一个阈值参数M,当
(10)
则判定为打哈欠。由于疲劳时眨眼动作比较缓慢,和非疲劳时眨眼速度相比慢很多,同理,设定一个阈值参数N,当
(11)
即判别为疲劳时眨眼。其中f(n)为眼部区域的所有像素点光流速度的总和。
打哈欠频率可有下式求得
(12)
同时疲劳时眼睛缓慢眨眼次数增加,采用PERCLOS值K进行眼部疲劳识别,表示如下
(13)
其中,时间窗长度T=10 s,ti为眼睛疲劳闭合时间。在实验中,帧率为24帧/s。当K>15%时,系统会发出疲劳预警。
4 实验检测与结果
本文使用测试集进行实验,本实验所用的样本均是模拟驾驶环境在室内、外采集的。该疲劳状态的样本主要包括了闭眼、张嘴以及伴随打哈欠过程出现的一些表情变化。本文对10个人在正常状态和模拟疲劳的状态下采集了112个正常样本和108个疲劳样本,然后随机抽取50个正常样本和40个疲劳样本作为测试集。图5是在疲劳样本点中抽取的4个样本。在实验中,首先从模拟驾驶的视频中选取6组测试样本进行眼睛、嘴部及表情的状态判断,根据判断结果来确定实验阈值参数。表1是抽取的6组测试集样本的验证结果,其中包含4名疲劳实验者,2名正常状态实验者。
图5 疲劳样本点
测试者YpK实际状态检测状态10.290.55疲劳疲劳20.250.47疲劳疲劳30.330.40疲劳疲劳400.32疲劳疲劳500.12正常正常600.10正常正常
本文使用MATLAB作为实验仿真平台,其中全局阈值β=0.6,使用光流法对动态序列帧提取光流特征后,计算得到加速度模值和的图形如图6所示。
图6 不同帧下加速度模值的分布
图6横轴是帧数,纵轴是加速度模值和,经过选取多组实验数据确定β的取值范围,β的取值会影响关键帧数的多少,实验表明当β=0.6时,可以选出打哈欠发生的帧。
本文选取108个疲劳样本点作为实验数据来测试加速度算法的捕捉能力,该样本点中连续图像序列为24帧/s,在这108个样本点中,捕捉的正确数为98个,漏检数为10个,正确的识别率为90.7%。
表1中Yp表示在时间窗T=10内打哈欠的频率,当Yp>0.2时判断为疲劳。K为PERCLOS值,当K>15%时,判断为疲劳。根据常识,一般情况下,人在打哈欠的同时伴随着眼睛闭合的状态。所以表1中有4中情形:第一种是眼部和嘴部都出现疲劳状态;第二种是嘴部出现疲劳状态而眨眼频率较低,此时则以嘴部状态为依据;第三种是眼部经常闭合并且闭合时间相比正常状态下长,但是嘴部却没有出现打哈欠动作,此时则以眼部状态为依据;第四种是嘴部和眼部均为出现疲劳状态,所以当嘴部频率Yp或者眼部K值有一个大于设定的阈值时,则判别为疲劳状态。
表2为PECLOS算法,及嘴部行为判别法和本文算法对疲劳表情的识别结果对比。PECLOS算法和文中方法计算量都比较大,处理起来会消耗一定的时间。PECLOS眼睑间的测量距离随机性较强,并且在短时间内不能完全遍历眼睑间距离的各个值,这就使得识别率较低,本文算法对距离和时间的要求相比较宽松。
表2 实验验证结果
5 结束语
笔者将全局光流技术应用于慢性精神疲劳表情识别领域中,但由于光流计算量大,本文采用区域性多帧间光流计算,只对眼部区域和嘴部区域使用基于梯度的全局光流计算。采用光流峰值和方向投票的方法提取得到光流特征。本文融合打哈欠的频率和眼睛闭合时间两个因素进行实时检测。实验结果表明,该方法相对于单一的利用眼睛或嘴巴的方法检测结果较稳定高效。