王 帅, 赵鲁阳, 何 为, 李凤荣
(1.中国科学院上海微系统与信息技术研究所,上海 200050; 2.中国科学院大学,北京 100049)
现有的疲劳驾驶检测手段大致分为三种:1)利用驾驶员生理信息,通过接触式的装置收集驾驶员生理参数,判断疲劳状态[1,2];2)利用行车轨迹,检测方向盘和刹车,油门踩踏频率,从而判断司机的疲劳状态[3,4];3)基于计算机视觉,通过摄像头获取驾驶员面部特征信息,根据眼睛和嘴巴的状态建立疲劳模型,输入获取到的图像信息,输出疲劳状态。
通过计算机视觉的方法对人面部特征信息进行检测和提取并结合相关的智能算法获取到眼睛状态,这一问题已经成为国内外专家的研究热点。目前对于人脸面部特征的分析和识别主要有:基于传统图像处理方法的颜色特征分析,这种方法受到环境的影响较大,在外部光线变化强烈的环境下,准确率较低[5,6]。基于分类器的人眼状态判断,这类算法得不到眼睛闭眼程度的准确判断,无法收集到眼睛睁闭的程度信息,因此,无法进行PRECLOS准则的应用,从而无法进一步判断疲劳状态[7]。
由于铁路列车的行驶时间无法确定,列车的司机驾驶室极易出现背光或者光线较强的情形,对面部状态的判定造成了困难。因此该场景对于算法的鲁棒性要求较高。
本文主要基于主动形状模型(active shape model,ASM)人脸关键点提取算法。将获取的人脸图像进行特征点匹配,运用统计处理方法,进而分析出人眼状态信息。同时,建立时间窗机制,在固定的时间窗内,收集驾驶员的人眼特征信息。为了判断司机是否存在疲劳状态,本文利用支持向量机(support vector machine,SVM)分类器,训练人眼模型,最后应用该模型做二值判断。在实际列车中进行的验证和评估结果表明,复杂光线环境下该算法对于司机人眼状态的判定具有良好的性能。
在列车的行驶过程中,经常出现两列列车在会车情况下,驾驶员的面部被强光照射,而在背对着太阳行驶或者周围有建筑物遮挡时,司机的驾驶室又会出现光线暗淡问题。此类情形下,往往导致传统的计算机视觉算法准确度下降甚至失效。如何有效地解决光线问题,是进行关键点提取的前提。
利用近红外光摄像头对于驾驶员面部进行提取,可以有效解决可见光对于图像质量的影响。近红外光指的是波长在700~1 000 nm之间的波段。本文的系统中使用了850 nm波长的红外补光灯,在摄像头前端加入红外滤光片,可以过滤可见光,允许红外光通过。利用反射在人脸上的红外光,对于人脸图像进行获取。实验证明,利用近红外摄像头可以有效地减弱可见光对于人脸图像质量的影响,即使在会车中强光的照射以及在夜晚无光的环境下,依然可以降低因为图像质量对于关键点提取算法的影响[8,9]。
本文人脸关键点的提取采用改进的ASM算法。ASM是一种基于统计学习模型的特征点提取方法,分为训练和搜索两个过程[10]。训练阶段,利用大量的样本数据,得到平均人脸模型和局部特征模型;搜索阶段,在合理的范围之内调节参数,使人脸形状随之发生变化,直至最终收敛,实现人脸关键点的快速定位和提取。
ASM算法的训练阶段就是对前期采集到的图像进行关键点的标记,构建形状向量,利用标记好的N幅图像求取平均形状向量和局部特征向量。假设在一幅图像中构造的形状向量为
Xi=[xi0,yi0,xi1,yi1,…,xi(n-1),yi(n-1)]T
(1)
构建N维向量
π=[X1,X2,X3,…,Xk,…,XN]T
(2)
然后将所有图片经过压缩、旋转、平移操作之后对齐,将该N维向量进行归一化处理。为了减小数据量处理的大小,用主成分分析的方法建立形状模型。首先计算平均形状向量
(3)
计算协方差矩阵
(4)
计算协方差矩阵S的特征值并将其按照从大到小依次排序,得到λ1,λ2,…,λk,…,λq,其中λi>0。选择前t个特征值及其对应的特征向量,使其满足
(5)
式中α为维数降低之后的模型可以包含原数据的信息量比例,一般取98 %。前t个特征向量Pi组成变换矩阵P。
构建的形状模型可以表示为
(6)
式中b为相对应的特征向量的权值参数。
ASM算法不仅仅需要关键点的形状模型,还需要每个关键点局部区域的特征模型,用于搜索阶段的对比。
本文基于多尺度局部二值模型(multi-scale block local binary pattern,MB-LBP)算子进行特征向量的构建。MB-LBP算子是原始LBP算子的改进,该算子不再基于单个像素,而是将特征向量的构建扩展到了任意大小的“子区域”。该“子区域”就是用于提取特征向量的结构大小,选择不同的尺度,就得到了不同的尺度特征,增加了局部区域特征的多样性。最后计算“子区域”的平均灰度值,增加了像素点之间的相关性,同时对噪声具有一定的抗干扰能力[11]。
为了提取关键点局部特征模型,这里计算以该关键点为中心的3×3区域的MB-LBP编码值作为关键点的局部特征向量。MB-LBP编码值的计算是通过以下步骤计算得到[12]。
MB-LBP的尺度因子表示为(s,t),表示选取任意一个3s×3t大小的矩阵来计算某一点的LBP编码。这里选择的矩阵区域是以待计算点为中心的矩形区域。将该矩形区域分割为9个“子区域”,每个“子区域”大小为s×t,依次计算9个子区域的灰度平均值。之后9个子区域的平均灰度值就按照原始的LBP算子进行编码,即可得到该计算点的MB-LBP编码值。
图1 MB-LBP计算示意
在ASM算法的搜索阶段,模型的初始位置的定位比较关键,直接影响了搜索的时间和搜索结果的拟合质量。本文采用Adaboost算法对人脸进行初始位置定位。Adaboost算法在人脸定位方面具有快速,准确度高的优点。
假设初始化位置是X=M(s,θ)[xi]+Xc,其中,Xc为人脸模型中心,M(s,θ)[xi]为对于形状向量进行旋转、缩放的操作。再利用建立的局部特征向量模型进行关键点的匹配度计算,原位置是Xi,更新的位置量为dx,则可调整更新后的位置为X′=Xi+dx。然后更新平移、旋转、缩放参数和形状参数bi,当X收敛时,则认为人脸关键点匹配完成。
ASM算法可以对人脸的关键点进行有效提取和拟合,得到人脸关键点的坐标信息。利用人眼和人嘴巴区域相关的关键点坐标信息,计算出人眼和人嘴巴的睁闭程度。
如图2,人眼张开程度的计算是通过定位到人眼上边沿的凸点和下边沿的凹点,计算两者y坐标系上的高度差,将此高度差除以脸部区域的高度,即为眼睛所占脸部的比例,该比例可作为人眼张开程度的一种表示方式
(7)
图2 眼部区域
其中,人眼张开程度的计算将分为左眼和右眼,于是可以获得2个参数ηl-eye,ηr-eye。
在利用关键点提取算法获得人眼的状态特征信息之后,需要建立疲劳判断模型。输入为获取到的驾驶员面部图像,输出为驾驶员是否出现疲劳状态的判定。该模型是一个二分类问题,利用SVM分类器可以获得很好的效果[13]。
在二分类的问题中,核函数的选择以及参数的选取方法是:首先通过预先设定一个单一的核函数,并且假设一个合适的参数,通过不断地实验测试,并且调整参数值,直到选择一个合适的参数使得分类效果比较好,最终以此参数来构建分类器。
驾驶员的疲劳状态不仅仅与单幅图像的人眼特征有关,还与时间参数有关系,因此加入时间参数 ,并且建立滑动时间窗机制,作为SVM分类器的输入参数。本文为了建立疲劳检测模型,在前文已经提取出人脸局部关键点信息之后,设计了一种SVM分类模型,用于对驾驶员的人眼状态进行检测。
连续的N帧图像称为一段长度为N的时间窗。取一段时间窗,并对时间窗内的图像依次运用上文介绍的算法进行人脸图像关键点的提取,计算人眼和人嘴巴区域的睁闭程度,得出ηl-eye,ηr-eye,可以得到2N个参数,组成SVM分类器的输入向量
(8)
该级分类器采用径向基核函数,即高斯核函数,K(x,xi)=exp(-‖x-xi‖2/σ2)。主要是因为径向基核函数是一种普适函数,通过参数的适当选择,可以适用于任意分布的样本。
SVM是一个二分类分类器,输入为每一帧图像提取出来的左眼比例,右眼比例,输出为该帧图像显示的驾驶员是否出现闭眼
(9)
本文利用带有850 nm红外补光灯和红外滤光片的摄像头采集系统和视频采集模块,安装在列车的驾驶室座椅前方,用于采集列车司机实时的驾驶过程中的面部状态,共采集到50 h的列车司机驾驶场景,包括夜晚、白天、逆光和自然光环境下的不同司机的视频数据。
图3 前端采集设备
实验在Intel i7的PC上进行测试,以MATLAB为开发环境,实现SVM分类器的训练和测试。
测试样本1 在列车司机驾驶室采集到的现场视频的截取片段。在列车行驶过程中,采集了不同驾驶员,不同的光线环境和不同的行驶时间下的司机驾驶员人脸图像,并截取其中驾驶员工作状态下的图像作为测试分析场景。同时,为了排除复杂条件下的干扰,剔除驾驶员停车休息场景。测试样本集示例图像如图4所示。该样本集用于测试人眼状态的分类准确性。
图4 列车司机驾驶现场样本
测试样本2CASPEAL数据库[14],该数据库包含了不同光照条件下,不同人脸的数据集,可以用于测试改进后ASM算法的性能。
实验过程分为以下步骤完成:
1)先利用Adaboost算法针对红外摄像头获取到的图像进行人脸区域的定位,获取到人脸图像,为接下来的ASM算法提供了初始化位置。
2)ASM算法提取人脸关键点,获得眼部区域的人眼上边沿凸点和下边沿的凹点坐标,计算人眼张开比例。
3)通过ASM算法得到的3个特征值作为SVM分类器的输入,分类得出该帧图像中驾驶员的人眼状态。
将第一部分测试样本分出4个不同的场景样本集进行测试。采用交叉验证的方式训练和测试SVM。在测试样本集中,人为地标记出来每一帧图像人脸的眼睛状态,作为SVM分类器的训练和测试样本。最终测试的分类结果如表1所示,可以看出:分类器较好地将人眼状态分类。
表1 人眼状态分类结果
改进的ASM算法通过计算标定点和最终获取到的关键点之间的平均欧氏距离作为衡量性能的标准, 计算得到的欧氏距离作为对本文算法的评测标准
(10)
式中N为测试图片数量,n为单幅图片关键点数量。本文N取50,n取20。改进前传统ASM算法平均误差为42.51像素,改进后ASM算法平均误差为37.72像素,性能提高了11.2 %。
实验结果表明:SVM分类器可以将获取到的每一帧驾驶员人眼状态较好地进行分类,同时改进的ASM算法对于光线的变换具有较好的鲁棒性。
列车行驶过程中涉及到复杂的机车操作和瞭望等动作,驾驶员会频繁出现低头操作和张望动作,该算法针对此类场景还存在无法检测的情形。如何进一步排除真实环境下驾驶过程中噪声的干扰,依旧是一个需要研究的问题。