计算机系统应用  2021, Vol. 30 Issue (6): 118-126   PDF    
基于CNN和SVM的疲劳驾驶闭眼特征实时检测
王俊杰, 汪洋堃, 张峰, 张士文, 戴毅, 郁晓冬     
上海交通大学 电子信息与电气工程学院, 上海 200240
摘要:针对现有疲劳驾驶检测方法中实时性和泛化能力不足的问题, 本文提出了一种基于卷积神经网络(Convolutional Neural Networks, CNN)和支持向量机(Support Vector Machine, SVM)的疲劳驾驶闭眼特征检测方法, 使用CNN获取人脸相关特征点的位置并定位眼部感兴趣区域(Region Of Interest, ROI), 通过灰度化和直方图均衡化操作减弱光照差异的影响, 提取ROI的方向梯度直方图(Histogram of Oriented Gradient, HOG), 并用SVM对HOG进行分类, 相应的判断出原始图像是否包含疲劳驾驶闭眼特征. 本文给出了所提方法在PC平台和ARM平台实现的实时性验证, 在不同光照和背景条件下对多位受测人员进行测试, 实验结果表明该方法对疲劳驾驶闭眼特征检测准确率在94%以上, 处理速度满足实时性要求, 且具有较强的泛化能力.
关键词: 疲劳驾驶    闭眼检测    级联卷积神经网络    直方图均衡化    支持向量机    
Real-Time Detection for Eye Closure Feature of Fatigue Driving Based on CNN and SVM
WANG Jun-Jie, WANG Yang-Kun, ZHANG Feng, ZHANG Shi-Wen, DAI Yi, YU Xiao-Dong     
School of Electronic Information and Electrical Engineering, Shanghai Jiaotong University, Shanghai 200240, China
Abstract: To deal with the insufficient competence for real-time detection and generalization of the existing methods for fatigue driving detection, this study proposes a detection method of eye closure features, which integrates the Convolutional Neural Network (CNN) and Support Vector Machine (SVM). The CNN is employed to extract facial feature points and locate the eye Region Of Interest (ROI). Then the Histogram of Oriented Gradient (HOG) of the ROI serves as the feature classified by SVM to determine whether there exists the eye closure feature of fatigue driving in the original image. There into, graying and histogram equalization contribute to weakening the impact of illumination variation. The proposed method is implemented on both the PC platform and the ARM embedded platform, which is verified with regard to examinees subject to different levels of illumination. Experimental results prove that the method reaches an accuracy of above 94% for detecting eye closure features, with strong generalization and satisfied real-time reaction.
Key words: fatigue driving     eye closure detection     cascade Convolutional Neural Networks (CNN)     histogram equalization     Support Vector Machine (SVM)    

近年来, 疲劳驾驶导致的交通事故比例高居不下[1], 疲劳驾驶行为给道路行驶造成安全隐患, 严重危害到人们的生命和财产安全. 及时准确的检测疲劳驾驶行为并提出告警, 对维护道路安全有着重要意义.

现有的疲劳驾驶检测方法, 从数据信息的获取方式上来看主要分为3大类:

第一, 基于驾驶员生理信息分析的检测方法, 常用的生理信息有EOG眼电图[2,3]和EEG脑电图[4-7]. 基于准确的生理信号信息使得这类方法判断精确, 但因需要被测人员佩戴特殊设备限制了其推广和应用.

第二, 基于机械传感器信号分析的检测方法, 如在汽车方向盘、踏板等位置安装相应的传感器, 通过所得方向盘加速度[8,9]、踏板压力[10]、车辆速度[11]等信息分析驾驶员的疲劳状态. 该类方法相比第一类方法, 信息获取更便捷, 但其判断效果易受驾驶员个人习惯、道路状态等因素影响, 且给出的判断是疲劳驾驶的综合结果, 如反应迟缓、操作不当等, 不能判断出具体的疲劳行为.

第三, 基于机器视觉图像信息分析的检测方法, 利用摄像头获取驾驶员图像, 进而分析判断其疲劳与否. 文献[12]提出了一种先验的增强模型皮肤图像直方图作为特征描述符, 并使用K最近邻算法对其分类, 检测睡觉行为. 文献[13]使用方向梯度直方图和回归树集合获取人脸关键点后, 融合眼部特征和嘴部特征实现疲劳检测. 文献[14]使用AdaBoost算法定位眼部, 使用图像形态学等图像处理方法获取人眼高度, 判断眼睛是否闭合. 相比前两类方法, 该类方法的图像数据信息获取便捷, 且驾驶员面部信息比反映车辆状态的机械传感器信息更能直接反应驾驶员的疲劳情况.

闭眼是疲劳驾驶的一个重要表征, 在闭眼检测时, 虹膜、瞳孔、眼白、上下眼皮间距等是眼部检测的关键区域. 有研究者提出基于像素值分析的闭眼检测方法, 如依据眼部图像中虹膜与其余部分像素值的差别, 对眼部图像中的像素点进行分类, 并计算图中分类为虹膜的像素点个数, 若超过设定的阈值, 则认为检测到了虹膜, 图像为睁眼. 但该种基于像素值分析的检测方法对光照条件敏感, 在光线不足, 镜片反光, 人眼较小的情况, 由于较难准确分离出眼部对应区域, 进而产生误判. 如图1所示, 给出了4人在不同环境下的眼部图像, 其中, 第1行是一般大小的眼睛在光线良好情况下的图片(下简称这类情况为参考情况), 此类图片较易于状态辨识; 第2行是光照不足时的人眼图像, 此时虹膜与其余部分像素值相差不大, 基于像素值分析易将背景像素点分为虹膜, 则闭眼图像会被误判为睁眼; 第3行是镜片反光时的眼部图像, 此类图像中, 镜片反射的光线会影响图片中虹膜的颜色, 可能导致虹膜部分检测不出, 此外, 反射光线产生的光斑与其余部分有明显差别, 故可能被分类为虹膜, 即镜片反光情况时, 闭眼和睁眼都可能发生误判; 第4行是人眼较小时的情况, 此类情况下, 可能因虹膜占据的像素点数不足设定的阈值而将睁眼图像误判为闭眼.

图 1 闭眼检测难点展示

对于利用上下眼皮间的距离或眼睛的纵横比与既定阈值比较来判断是否存在闭眼的做法, 主要的不足在于不同人上下眼皮距离和纵横比可能差别较大, 无法设定一个准确的阈值适用于所有人. 而记录连续多帧图片中上下眼皮距离或眼部纵横比, 分析其变化来判断是否闭眼的做法不适用于仅有单张图片的应用情况和可能的持续闭眼情况.

本文对驾驶员图像信息展开研究分析, 针对现有此类方法易受外界环境差异(如光照强度和背景等)和受测者外貌特征差异(眼睛大小等)影响, 泛化能力不足, 存在方法计算量大、处理过程耗时、缺乏实时应用验证等问题, 本文提出了一种基于卷积神经网络(Convolutional Neural Networks, CNN)和支持向量机(Support Vector Machine, SVM)的疲劳驾驶闭眼特征检测方法, 使用CNN获取人脸相关特征点的位置并定位眼部感兴趣区域(Region Of Interest, ROI), 以灰度化和直方图均衡化操作减弱光照差异影响, 提取ROI的方向梯度直方图 (Histogram of Oriented Gradient, HOG)[15], 并用SVM对HOG进行分类, 相应的判断出原始图像是否存在闭眼. 此外, 本文给出了所提方法在ARM平台的实现, 在不同光照和背景条件下对多位测试人员进行检验, 验证方法的有效性、实时性和泛化能力.

1 基于卷积神经网络和支持向量机的疲劳驾驶闭眼特征检测方法

对疲劳驾驶中伴随的闭眼行为, 本文提出的基于卷积神经网络和支持向量机(CNN-SVM)的疲劳驾驶闭眼特征检测方法主要包含预处理层、HOG提取层和决策层. 分别实现了眼部ROI分割, HOG特征提取, 眼部状态判断. 着重解决在光线不足、镜片反光、眼睛大小差异等多重复杂情况下的眼部开合的辨识, 以期在多种环境下, 对不同受测者均能准确判断眼部开合状态.

1.1 预处理层

预处理层的目标是利用人脸检测和特征点提取算法, 定位图像中人眼ROI并进行分割.

卷积神经网络(CNN)是深度学习的代表性算法, 能有效的提取多层次的图像特征, 广泛应用于物体检测. 考虑到检测速度和精度的平衡, 本文选择了级联CNN算法[16]用于人脸检测步骤.

级联CNN算法使用6个级联的CNN进行人脸检测工作. 其中3个为二分类网络, 判断是否是人脸, 3个为校正网络, 用于校正人脸框边界的位置. 其流程如下:

(1) 使用小型网络12-net对全图进行人脸检测, 快速选择可能存在人脸的区域, 对大小为 $W\times H$ 的单张图片采用步长为4, 大小为12×12的窗口进行检测, 所需检测窗口数为:

$ {N_{\rm windows}} \!=\! \left[\! {\frac{{\rm{1}}}{4}\times \left( {\frac{{12\times W}}{F} \!-\! 12} \right) + 1} \!\right]\times \left[\! {\frac{{\rm{1}}}{4}\times \left( {\frac{{12\times H}}{F} \!-\! 12} \right) + 1} \!\right] $ (1)

其中, F为最小检测人脸大小参数, 当 $W{\rm{ = 1280}}$ , $H{\rm{ = 720}}$ , 由式(1)可得默认参数 $F{\rm{ = 20}}$ 时检测窗口数为20140. 使用12-calibration-net进行人脸区域校正. 使用非极大值抑制(Non-Maximum Suppression, NMS)去除重叠区域过高的人脸框.

(2) 将(1)中人脸区域转为大小24×24的图片, 使用24-net分类, 判断是否是人脸, 然后利用24-calibration-net进行人脸区域校正. 使用NMS去除重叠的人脸框.

(3) 将(2)中的人脸区域转为大小48×48的图片, 使用48-net分类, 得到人脸区域后使用NMS去除重复的部分. 最后使用48-calibration-net对人脸区域进行校正, 并以此作为输出. 人脸检测的结果如图2中的框所示, 定位出人脸区域.

实验中发现, 级联CNN的参数F对处理精度和速度的影响显著, 默认参数下, 在侧脸场景易出现误判, 将耳朵区域识别为人脸, 如图3所示. 通过大量的实验测试和分析, 发现可以通过提高F值来避免将较小区域误判为人脸, 同时也减少了所需检测窗口数, 从而降低处理单张图片耗时. 本文设置 $F{\rm{ = 150}}$ , 相应的处理单张图片的时间降低到默认设置下处理时间的16.31%.

人脸特征点的提取可以理解为从图像I到人脸形状参数S的一个非线性映射. 本文利用深度神经网络的强大非线性模型拟合能力, 选用完全端到端级联卷积神经网络(Fully End-to-end Cascaded CNN, FEC-CNN)方法[17]用于特征点提取.

图 2 人脸检测与特征点提取结果

图 3 人脸检测误检示意图

相对于人工提取特征再使用分类器分类, 端到端的方法直接以图像做输入, 特征点做输出, 将特征提取和分类的流程融合在了网络之中. 方法中包括若干个子CNN, 表示为 $\left\{ {{F_{{t}}}} \right\}_{t = 1}^T$ , 网络级联之后构成了总的网络, 记为H, 其目标是拟合出图像到特征点的非线性映射关系, 如式(2)–式(4)所示:

$ S = H(I) = \sum\limits_{t = 1}^T {\Delta {S_t}} + {S_0} $ (2)
$ \Delta {S_t} = {F_t}\left( {\Theta (I,{S_{t - 1}})} \right),\;t = 1, \cdots ,T $ (3)
$ {S_t} = {S_{t - 1}} + \Delta {S_t},\;t = 1, \cdots ,T $ (4)

其中, $\Delta {S_t}$ 表示第t个网络对S的修正值, ${F_{{t}}}$ 表示第t个CNN, $\Theta (I,{S_{t - 1}})$ 表示图像块提取函数, 用以提取图中的特征区域. ${S_t}$ 表示经过第t个CNN修正后的特征点. 特征点的提取结果如图2中的点所示.

本文人脸检测和特征点提取的实现均借助了开源库Seetaface2.

使用图2中所示的特征点进行眼部ROI定位, 其中左眼ROI计算如式(5)所示, 右眼ROI计算方法如式(6)所示. 获取的ROI图片归一化到30×15像素, 并将右眼ROI进行水平翻转, 便于后续统一操作.

$ \left\{ {\begin{array}{*{20}{l}} {lef{t_{le}} = {x_1}} \\ {righ{t_{le}} = {x_2}} \\ {to{p_{le}} = ({y_4} + {y_3})/2 - ({x_2} - {x_1})/{\rm{4}}} \\ {bo{t_{le}} = ({y_4} + {y_3})/2 + ({x_2} - {x_1})/{\rm{4}}} \end{array}} \right. $ (5)
$ \left\{ {\begin{array}{*{20}{l}} {lef{t_{re}} = {x_{1{\rm{0}}}}} \\ {righ{t_{re}} = {x_{{\rm{11}}}}} \\ {to{p_{re}} = ({y_{{\rm{13}}}} + {y_{{\rm{12}}}})/2 - ({x_{{\rm{11}}}} - {x_{1{\rm{0}}}})/{\rm{4}}} \\ {bo{t_{re}} = ({y_{{\rm{13}}}} + {y_{{\rm{12}}}})/2{\rm{ + }}({x_{{\rm{11}}}} - {x_{1{\rm{0}}}})/{\rm{4}}} \end{array}} \right. $ (6)

定位出的眼部区域如图4所示.

图 4 眼部ROI示例

1.2 HOG提取层

考虑到不同环境因素对眼部ROI图像的影响, 在HOG提取前先进行图像增强操作.

上文所示图像为常见的RGB格式, 即图像中的每一个像素点包含3个通道的色彩: 红(R)、绿(G)、蓝(B), 每个通道的色彩取值为0–255之间的整数. 该格式下的图片包含丰富的色彩信息, 可以反应光照、肤色等信息. 而本文检测闭眼行为关注图像的梯度信息, 因此将RGB图转为灰度图处理. 常用做法将RGB图像亮度信息提取作为灰度值, 亮度信息提取采用国标公式进行计算, 如式(7)所示[18].

$ Gray{\rm{ }} = {\rm{ }}R\times 0.299{\rm{ }} + {\rm{ }}G\times 0.587{\rm{ }} + {\rm{ }}B\times 0.114 $ (7)

转换后的灰度图仍存在分析上的难点, 部分图像的像素值聚集在极小的范围内, 导致图像对比度不足, 梯度较小, 不易提取相关特征. 故对灰度图进行直方图均衡化.

设图像的灰度级范围为[0, L−1], 则图像的直方图定义为离散函数 $h({r_k}) = {n_k}$ , 其中 ${r_k}$ 表示第k级的灰度, ${n_k}$ 代表灰度级为 ${r_k}$ 的像素点个数. 将其中的每一个值除以图片的像素点总数n, 得到归一化的直方图 $P({r_k}) = $ $ {n_k}/n$ . $P({r_k})$ 也表示灰度级为 ${r_k}$ 的概率估值. 直方图均衡化的目标是找到一个函数, 对图片中像素点分布进行调整, 使其分布均匀, 记函数为T:

$ s = T(r),\;0 \le r \le 1 $ (8)

以图片偏暗和偏亮两种情况下为例, 图5展示了直方图均衡化的效果, 图5(a)图5(c)为光线偏暗和偏亮的原图以及相应的灰度直方图, 图5(b)图5(d)为直方图均衡化处理后的图片和相应灰度直方图分布. 由图5可以看到, 图片偏暗时, 像素点集中分布于0附近, 图片偏亮时, 像素点集中于较大值. 图片偏暗和偏亮均存在图片对比度不足、特征不明显的问题. 直方图均衡化之后, 图片像素点的分布更加均衡, 图片对比度提升, 有利于后续的特征提取与分类.

提取HOG特征时需计算每个像素点的水平梯度和垂直梯度, 如式(9)、式(10)所示.

$ {g_x}(x,y) = H(x + 1,y) - H(x - 1,y) $ (9)
$ {g_y}(x,y) = H(x,y + 1) - H(x,y - 1) $ (10)

式中, g表示梯度, H表示对应点的像素值. xy分别表示水平和垂直方向.

由此可得该点梯度的幅值和角度:

$ g = \sqrt {g_x^2 + g_y^2} $ (11)
$ \theta = \arctan \frac{{{g_y}}}{{{g_x}}} $ (12)

将图片分为大量元胞, 统计每个元胞中的梯度信息, 构成直方图. 将若干元胞构成块, 对每个块进行归一化处理, 进一步降低光照差异的影响, 得到所需的HOG特征. 因HOG特征是局部梯度特征, 对光线不敏感, 有利于削弱光线差异造成的干扰.

1.3 决策层

决策层使用SVM对HOG分类. SVM是一种常见的二分类模型. 其目标是找到特征空间上最大间隔的分离超平面. 如图6所示. 其中, z1z2是特征空间的参数, 圆形和方形分别表示不同种样本, l代表分类器找到的分离超平面.

对特征平面的样本点x, 定义其函数间隔和几何间隔如式(13)、式(14)所示.

$ {\hat \gamma _i} = {y_i}(w \cdot {x_i} + b) $ (13)
$ {\gamma _i} = {y_i}\left( {\frac{w}{{\left\| w \right\|}} \cdot {x_i} + \frac{b}{{\left\| w \right\|}}} \right) $ (14)

式中, ${y_i}$ 为样本的标识, 一般用+1表示正样本, −1表示负样本.

图 5 直方图均衡化示例

图 6 二分类问题SVM分类结果示例

SVM的目标是学习找到一个正确分类样本且几何间隔最大的超平面, 该问题可以总结为约束优化问题, 如式(15)、式(16)所示.

$ \begin{array}{*{20}{c}} {\mathop {\max }\limits_{w,b} }&\gamma \end{array} $ (15)
$ \begin{array}{*{20}{c}} {\rm s.t.}&{{y_i}\left( {\dfrac{w}{{\left\| w \right\|}} \cdot {x_i} + \dfrac{b}{{\left\| w \right\|}}} \right) \ge \gamma ,}&{i = 1,2, \cdots ,N} \end{array} $ (16)

结合函数间隔与几何间隔的关系, 上述约束关系可以改写为式(17)和式(18).

$ \begin{array}{*{20}{c}} {\mathop {\max }\limits_{w,b} }&{\dfrac{{\hat \gamma }}{{\left\| w \right\|}}} \end{array} $ (17)
$ \begin{array}{*{20}{c}} {\rm s.t.}&{{y_i}(w \cdot {x_i} + b) \ge \hat \gamma ,}&{i = 1,2, \cdots ,N} \end{array} $ (18)

进一步考虑到函数间隔 $\hat \gamma $ 的取值对优化问题没有影响, 故取其为1. 为了方便求解, 则上述优化问题可以转化为式(19)和式(20).

$ \begin{array}{*{20}{c}} {\mathop {\min }\limits_{w,b} }&{\dfrac{1}{2}} \end{array}\mathop {\left\| w \right\|}\nolimits^2 $ (19)
$ \begin{array}{*{20}{c}} {\rm s.t.}&{{y_i}(w \cdot {x_i} + b) - 1 \ge 0,}&{i = 1,2, \cdots ,N} \end{array} $ (20)

利用凸二次规划问题算法求解出式(19)、式(20)的解 ${w^*}$ ${b^*}$ , 则得到最优的超平面:

$ {w^*} \cdot x + {b^*} = 0 $ (21)

对应的分类决策函数为:

$ f(x) = {\rm sign}({w^*} \cdot x + {b^*}) $ (22)

实际分类时将样本x代入上述函数, 结果为+1认定为正样本, 否则为负样本.

利用SVM分类结果判断原图中对应眼部是否闭眼. 本文规定, 双眼同时被判为闭眼状态, 则认为此张图片中为闭眼, 否则为睁眼.

SVM复杂度为 ${\rm{O}}(M \cdot S)$ [19], 其中, M表示核函数的计算数, S表示支持向量的个数. 本文选择了线性核函数, 复杂度为 ${\rm{O}}(D \cdot S)$ , 其中, D表示输入向量即HOG特征的维度. 相比其他核函数, 如多项式核函数的M为对应的次方, 线性核函数大大减小了复杂度. 实验测试时, 在PC平台i7-4710MQ处理器上, SVM分类单张眼睛HOG特征耗时2 μs.

因此, 所提方法的疲劳驾驶闭眼特征检测的流程如图7所示, 首先是预处理层, 使用级联CNN算法获取待测视频图片中的人脸区域, 由FEC-CNN算法定位人脸上的68个特征点, 以此定位出眼部ROI, 并将右眼ROI水平翻转; 然后是HOG提取层, 将眼部ROI转为灰度图, 进行直方图均衡化操作, 提取HOG特征; 最后是决策层, 使用SVM对上述HOG特征进行分类, 判断图片中是否存在闭眼行为, 若两只眼睛均为闭眼状态, 则认为驾驶员处于闭眼状态.

图 7 CNN-SVM疲劳驾驶闭眼特征检测方法流程

2 实验测试结果与分析 2.1 模拟驾驶视频测试

模拟驾驶实验的图像数据来自于多名受测人员按照指定图像分辨率1280×720, 在室内随机光线和背景下拍摄的模拟驾驶行为视频. 实验图像选择从驾驶员的正面拍摄, 例如图8第1列图像所示视角的正常驾驶状态, 实验图像与实际动作成镜像. 图8第2列为闭眼时图片. 参与拍摄的人员共8人, 包含了多种不同的背景. 在样本收集时, 每人录制睁眼状态和闭眼状态各持续10 s, 视频帧率为30 fps.

图 8 数据集部分图片

为验证本文方法在不同人员和环境的泛化能力, 测试使用k折交叉验证, 即将数据集分为k份, 测试k次, 每次选取其中的k–1份作为训练集, 1份作为测试集, 将每次测试效果的评估参数取平均作为该方法的效果评估参数. 本文k选为8, 即每个实验人员的数据单独作为一份. 测试结果如表1所示, 其中, PN分别指闭眼, TF分别表示实际判断与真实标签相同和不同. 由真正(True Positive, TP), 真负(True Negative, TN), 假正(False Positive, FP), 假负(False Negative,FN)按照式(23)–式(25)计算准确率, 召回率和精准率.

$ {\text{准确率}}=\frac{{TP+TN}}{{TP+TN+FP+FN}} $ (23)
$ {\text{召回率}}=\frac{{TP}}{{TP+FN}} $ (24)
$ {\text{精确率}}=\frac{{TP}}{{TP+FP}} $ (25)

其中, 准确率表示被正确分类的图片占总图片的比例, 该值越大意味着分类越准确; 召回率表示被正确分类为闭眼的图片数与实际闭眼图片数的比值, 该值越高意味着闭眼行为被检测出的比例越大; 精准率为正确分类的闭眼图片占所有被分类为闭眼图片的比例, 其值越大表示正常驾驶被误检为闭眼的比例越低.

表1对比了本文方法与基于眼部宽高比(Eye Aspect Ratio, EAR)的方法分别使用两个开源人脸特征点检测库(Dlib和Seetaface2)时的各参数表现.

表1看到, CNN-SVM检测方法的准确率、召回率、精确率均高于基于EAR计算的方法, 接近100%, 验证了所提方法在判断睁眼和闭眼的有效性, 其中CNN-SVM方法的召回率为97.5%, 表明漏检闭眼行为的概率低.

表 1 闭眼检测结果

图9是上述8折交叉验证实验数据的箱形图, 其每一个箱子的上下边缘代表该方法准确率的最大值和最小值, 矩形的上下边缘分别代表上四分位数和下四分位数, 中间的线代表中位数. 可以看出, 3种方法的上限均较高, 说明多次实验中有达到较高准确率的情况, 但基于EAR的方法中位数和下限低, 说明多次实验的结果分布分散, 存在准确率低的情况. 本文方法对应的箱子边缘和矩形上下边缘均集中在较大值, 说明本文方法在多折实验的不同测试集上均有较高准确率, 验证了其较强的泛化能力.

图 9 模拟驾驶数据测试结果箱形图

综上, 与基于眼部宽高比的方法相比, 本文方法能更准确地判断数据集中不同光照下不同大小眼睛的开闭状态, 且具有较好的泛化能力.

2.2 实际驾驶舱数据测试

为验证所提疲劳驾驶闭眼特征检测方法在实际车内驾驶场景中的应用效果, 本文进一步使用实际驾驶舱中拍摄的模拟驾驶动作视频进行测试并完善方法. 实验中随机选择7位实验人员, 从正面拍摄其在普通轿车驾驶舱中包含正常驾驶和闭眼的视频, 分辨率为1280×720, 帧率为30 fps, 其他拍摄条件, 如光线、车型背景、摄像头等条件是多样的, 以此来考察和验证方法的泛化能力. 考虑到室内场景与实际场景存在一定的差距, 本文随机选取了3人的数据与前文2.1节所述数据一起构成了训练集, 剩余4人数据构成测试集. 训练集与测试集之间没有重叠. 实验中实际驾驶舱场景的部分数据集如图10所示. 其中左列为驾驶舱内睁眼图片, 右列为驾驶舱内闭眼图片.

图 10 驾驶舱测试数据示意图

在PC平台i7-4710MQ处理器进行测试, 实际驾驶舱数据测试结果如表2第1列所示, 可以看到本文方法在实际场景数据下仍达到94.25%的判断准确率, 每秒可处理40帧图片.

表 2 驾驶舱数据实验结果

考虑到方法的可集成性以及实车应用成本等因素, 本文进一步测试了所提方法在ARM嵌入式平台的实验效果, 选择了基于ARM Cortex A72 | A53的i.MX 8QuadMax处理器平台(车规级芯片)进行实验. 其中Cortex-A72主频最高1.6 GHz, Cortex-A53主频最高1.2 GHz.

表2第2列和第3列给出了本文方法在ARM Cortex A72和ARM Cortex A53处理器上测试结果. 可以看见, 在判断效果上, 该方法在ARM Cortex A72和 ARM Cortex A53平台运行辨识结果准确, 相比在i7-4710MQ上的结果整体上略有差别, 这可能与i.MX 8QuadMax处理器平台读取图片的解码方式和底层计算方式与在PC上的存在不同这一因素有关.

从处理速度上看, 在PC平台i7-4710MQ处理器, i.MX 8QuadMax处理器的ARM Cortex A72和ARM Cortex A53核心运行所提算法, 处理每张图片耗时分别为0.0244 s, 0.049 s, 0.1324 s, 即每秒分别可处理40帧, 20帧, 7帧图片. 因此, 本文算法可以在1 s之内, 依据多张图片的分类结果, 及时检测出驾驶员的闭眼行为特征.

可见, 本文算法在所测实验平台满足实时性应用要求.

3 结论

本文提出了一种基于卷积神经网络和支持向量机的驾驶员闭眼实时检测方法CNN-SVM, 预处理层使用CNN分割出眼部ROI, HOG提取层对ROI进行图像增强后提取HOG特征, 决策层使用SVM对ROI分类, 以此检测疲劳驾驶闭眼特征. 使用所建立的室内模拟驾驶和实际驾驶舱内拍摄的不同光照和背景下的图像数据集, 分别在PC i7-4710MQ平台和ARM平台的A72、A53核心测试所提方法, 辨识准确率分别为94.25%、95.58%、95.58%, 辨识速度分别为40.97 fps、20.39 fps、7.55 fps, 表明所提CNN-SVM方法对不同光照和背景下的闭眼特征检测均满足辨识精度和速度要求, 具备有效性和实用性.

参考文献
[1]
李都厚, 刘群, 袁伟, 等. 疲劳驾驶与交通事故关系. 交通运输工程学报, 2010, 10(2): 104-109. DOI:10.19818/j.cnki.1671-1637.2010.02.019
[2]
Zheng WL, Gao KP, Li G, et al. Vigilance estimation using a wearable EOG device in real driving environment. IEEE Transactions on Intelligent Transportation Systems, 2020, 21(1): 170-184. DOI:10.1109/TITS.2018.2889962
[3]
Suman D, Malini M, Anchuri S. EOG based vigilance monitoring system. Proceedings of 2015 Annual IEEE India Conference. New Delhi, India. 2015. 1–6.
[4]
Chuang CH, Huang CS, Ko LW, et al. An EEG-based perceptual function integration network for application to drowsy driving. Knowledge-Based Systems, 2015, 80: 143-152. DOI:10.1016/j.knosys.2015.01.007
[5]
Shi LC, Lu BL. EEG-based vigilance estimation using extreme learning machines. Neurocomputing, 2013, 102: 135-143. DOI:10.1016/j.neucom.2012.02.041
[6]
Jenke R, Peer A, Buss M. Feature extraction and selection for emotion recognition from EEG. IEEE Transactions on Affective Computing, 2014, 5(3): 327-339. DOI:10.1109/TAFFC.2014.2339834
[7]
Barry RJ, De Blasio FM. EEG differences between eyes-closed and eyes-open resting remain in healthy ageing. Biological Psychology, 2017, 129: 293-304. DOI:10.1016/j.biopsycho.2017.09.010
[8]
Forsman PM, Vila BJ, Short RA, et al. Efficient driver drowsiness detection at moderate levels of drowsiness. Accident Analysis & Prevention, 2013, 50: 341-350. DOI:10.1016/j.aap.2012.05.005
[9]
刘军, 王利明, 聂斐, 等. 基于转向盘转角的疲劳驾驶检测方法研究. 汽车技术, 2016(4): 42-45. DOI:10.3969/j.issn.1000-3703.2016.04.010
[10]
Kim YJ, Kim YM, Hahn M. Detecting driver fatigue based on the driver's response pattern and the front view environment of an automobile. Proceedings of the 2nd International Symposium on Universal Communication. Osaka, Japan. 2008. 237–240.
[11]
陈志勇, 杨佩, 彭力, 等. 基于BP神经网络的驾驶员疲劳监测研究. 计算机科学, 2015, 42(6A): 67-69, 93.
[12]
Sun L, Sun Y, Shi Q, et al. A novel prior model enhanced skin histogram improved driver posture recognition. Proceedings of the 5th IEEE International Conference on Cloud Computing and Intelligence Systems (CCIS). Nanjing, China. 2018. 915–919.
[13]
戴诗琪, 曾智勇. 基于深度学习的疲劳驾驶检测算法. 计算机系统应用, 2018, 27(7): 113-120. DOI:10.15888/j.cnki.csa.006415
[14]
姜兆普, 许勇, 赵检群. 基于眼部特征的疲劳检测算法. 计算机系统应用, 2014, 23(8): 90-96. DOI:10.3969/j.issn.1003-3254.2014.08.015
[15]
Dalal N, Triggs B. Histograms of oriented gradients for human detection. Proceedings of 2005 IEEE Computer Society Conference on Computer Vision and Pattern Recognition (CVPR). San Diego, CA, USA. 2005. 886–893.
[16]
Li HX, Lin Z, Shen XH, et al. A convolutional neural network cascade for face detection. Proceedings of 2015 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). Boston, MA, USA. 2015. 5325–5334.
[17]
He ZL, Kan MN, Zhang J, et al. A fully end-to-end cascaded CNN for facial landmark detection. Proceedings of the 12th IEEE International Conference on Automatic Face & Gesture Recognition (FG 2017). Washington, DC, USA. 2017. 200–207.
[18]
全国广播电视标准化技术委员会. GB/T 14857—1993 演播室数字电视编码参数规范. 北京: 中国标准出版社, 1993.
[19]
Burges CJC. A tutorial on support vector machines for pattern recognition. Data Mining and Knowledge Discovery, 1998, 2(2): 121-167. DOI:10.1023/A:1009715923555