随着国家科技水平的发展和国民经济水平的提高, 人们对于出行的要求也让汽车行业得以迅猛的发展. 但是, 汽车行业的迅猛发展, 在方便人们的出行的同时, 也导致了交通事故率的显著提高.
疲劳驾驶, 是指驾驶员在长时间的连续驾驶后, 产生的生理上和心理上的某些机能的严重失调, 从而导致出现的一系列开车技能显著降低的现象. 然而, 驾驶员的疲劳驾驶是可控的, 所以, 能够准确地检测驾驶员的疲劳状态, 并在驾驶员疲劳时给出相应的安全警示, 可以有效地保障司机的出行安全.
目前的疲劳驾驶检测技术主要分为以下3类: 第1种是基于驾驶员生理特征的疲劳驾驶检测. 驾驶员的生理特征是指生物信号, 主要包括人的心电波、脑电波、肌电波等, 这些生理特征与驾驶员的疲劳状态呈现正相关的趋势[1-5], 因为这些信息可以直接反应驾驶员的疲劳状态, 所以具有很高的准确率. 王飞等[1]通过收集驾驶员的脑电波信号和相应的方向盘信息来检测驾驶员的疲劳状态. 但是, 这种方法侵入性强、价格高昂、难以普及; 第2种是基于车辆运动特征的疲劳驾驶检测, 譬如手在方向盘上的压力、车身的左右摇摆程度、车道偏离程度等[6-9]. 根据驾驶员疲劳驾驶时的方向盘的角度特性, Sayed等[6]计算出了驾驶员的方向盘角度的分布直方图, 并提取频率作为特征, 建立了基于神经网络算法的疲劳状态检测模型. 但是, 这种方法会受到很多外部因素的干扰, 譬如复杂的路况信息和驾驶员的驾驶习惯等. 因此在大多数情况下, 它只能作为融合检测中的辅助参考因子; 最后是基于驾驶员面部特征的疲劳驾驶检测, 该方法主要是通过计算机视觉来判断驾驶员的疲劳状态[10-17]. Reddy等[11]通过人脸关键点检测网络MTCNN (Multi-Task Cascaded Convolutional Networks)[18]提取驾驶员的眼睛, 然后利用CNN (Convolutional Neural Network)分别获取眼睛的特征来构建疲劳检测模型. 此类方法与前两种相比, 安装简单、成本低、适合大面积推广.
光照强度较弱的情况. 由于驾驶员疲劳一般出现在夜间光照很弱的情况下, 该情况下的图像曝光度低, 图像特征不够明显, 直接将原始图像输入到MTCNN网络中可能会检测不到眼睛区域从而影响整个检测器的性能. 所以基于此问题, 本文提出了一种基于低光增强的夜间疲劳驾驶检测方法, 该方法在基于MTCNN网络的检测算法的基础上首先对原始图像进行低光增强处理, 提高了图像的曝光度, 从而使得图像特征更加明显, 最终提高整个检测器的性能.
本文的贡献如下: 1) 采用RGB摄像头拍摄了夜间视频建立了夜间疲劳驾驶检测数据集; 2) 在疲劳驾驶研究领域, 本文最先提出使用低光增强的方法来解决夜间图像曝光度低的问题.
2 基于低光增强的疲劳检测模型设计 2.1 基于MTCNN网络的疲劳驾驶检测模型及其缺点传统的检测模型框架如图1所示, 整体来看主要分为两个过程, 第1步是进行人脸关键点检测确定眼睛区域, 第2步是眼睛睁闭眼状态判断. 对于人脸关键点检测, 使用了MTCNN[18]模型进行识别. MTCNN被认为是检测速度最快同时也最准确的检测器之一, 利用级联结构, 它可以快速的实现人脸检测与对齐. 对于给定的一张原始图像, 经过MTCNN处理, 最终输出人脸框和人脸的5个特征点(包括左眼、右眼、鼻子和嘴唇的左右两角)坐标信息. 第2步是眼睛睁闭眼状态判断, 传统的模型可以采用CNN来对眼睛状态进行分类判断. CNN将第1步的输出即眼睛区域作为输入, 最终输出是眼睛的睁、闭状态.
上述模型中, 在低光环境下, 主要存在两点不足: 首先在将图像输入到MTCNN中时, 没有对原始图像进行任何处理, 而对于低光照下曝光度低的图像, 直接将图像输入到MTCNN, 由于图像特征不明显, 可能会导致MTCNN检测不到脸部区域, 导致检测结果错误; 其次即使能够检测到脸部以及眼睛区域, 在第2步将眼睛图像输入到CNN进行分类时, 由于眼睛图像特征不明显, 也会导致CNN判别出错. 因此, 在低光照下, 基于MTCNN网络的检测模型效果不够理想.
2.2 基于低光增强的疲劳驾驶检测模型在本节中, 我们针对传统基于MTCNN算法在低光照下的不足, 在传统算法的基础上进行了创新, 提出了一种基于低光增强的疲劳驾驶检测模型.
如图2所示, 本模型主要分为3步. 第1步首先采用低光增强算法对低光照下的照片进行处理, 获取到高质量图像; 第2步和第3步与传统基于MTCNN的检测算法相同, 先采用MTCNN网络进行关键点检测来确定眼睛的区域, 之后采用CNN网络进行分类, 判断是否为疲劳驾驶. 由图2可知, 本模型在使用低光增强算法的检测模型不会受到低光照下图像曝光度低的影响.
第1步利用低光增强算法对图片进行处理是本文工作的重点. 使用低光增强, 我们不再将原始图像直接输入到MTCNN中进行检测. 而是在进行检测之前, 创新提出了使用LIME算法[19]对原始低曝光度图像进行增强处理.
在实现低光增强的过程中, 输入的数据为低光下的低曝光图像, 输出为经过处理的高质量图像. 本文使用LIME算法进行改进并适用于本模型中, 该算法是基于Retinex理论[20], 将黑暗中的图像经过分解产生光照图像和反射图像, 再将光照图像进行增强然后与反射图像相结合即可完成低光增强. 具体的算法核心思想可以利用如下4个公式进行说明: 在式(1)中,L表示原始低曝光度图像, I表示增强后的图像, T表示物体的光照图像, 根据Retinex理论可知, T是图像的固有性质, 是恒定不变的, 符号“. ”表示数组元素依次相乘. 式(2)中,
$L = I \circ T$ | (1) |
$\hat T (x) \leftarrow \mathop {\max }\limits_{c \in \{ R,G,B\} } {L^c}(x)$ | (2) |
${W_h}(x) \leftarrow \sum\limits_{y \in \Omega (x)}^{} {\frac{{{G_\sigma }(x,y)}}{{|\displaystyle \sum\nolimits_{y \in \Omega (x)} {{G_\sigma }(x,y){\nabla _h}\hat T (y)| + \varepsilon } }}} $ | (3) |
$\mathop {\min }\limits_T ||\hat T - T||_F^2 + \alpha \sum\limits_x^{} {\frac{{{W_h}(x){{({\nabla _h}T(x))}^2}}}{{|{\nabla _h}\hat T (x)| + \varepsilon }}} + \frac{{{W_v}(x){{({\nabla _v}T(x))}^2}}}{{|{\nabla _v}\hat T (x)| + \varepsilon }}$ | (4) |
根据上面的分析, 我们总结了增强处理算法的具体实现流程, 其伪代码如算法1所示.
算法1. LIME算法具体实现流程
1. 根据式(2)计算图像的初始亮度估计值
2. 根据式(3)计算图像的权重矩阵W;
3. 根据优化式(4)计算表达式值最小时的T即光照图像;
4. 对光照图像T进行Gamma变换;
5. 根据式(1)求得最终所需的增强图像I.
在将夜间图片进行低光增强之后, 可以获取到高质量的图片. 之后采用传统的MTCNN算法进行特征提取, 和采用CNN算法进行疲劳驾驶识别. 此过程和传统的疲劳驾驶检测模型类似, 本工作只是进行相应的参数调优, 因此在文中不再累述.
根据上述中低光增强的检测模型, 我们可以在夜间光照强度较弱的情况下, 更好的识别司机是否出现疲劳驾驶.
3 实验分析 3.1 数据集本文采用的数据集是笔者自己建立的数据集. 考虑到目前公开的夜间疲劳驾驶检测数据集都是利用红外摄像头采集, 而红外摄像头成像质量差, 颜色纹理对比度都不够清晰, 所以笔者自己使用640×480的RGB摄像头建立了一个数据集, 整个数据集采集了18个人的夜间视频数据, 均在实际场景中(即车里)拍摄, 每个人都会拍摄疲劳与不疲劳两种状态的视频, 总共有36段视频, 其中18段疲劳, 18段不疲劳, 用于疲劳驾驶的检测.
为了制作眼睛分类网络的数据集, 笔者从36段视频中分别获取了60帧视频帧, 剔除成像质量过差或噪点过多的图像, 最终从所有视频中获取了1664帧图像, 对于每张640×480的图像, 都会对其进行LIME增强处理或不做处理, 然后对于两种情境下的图像经过MTCNN进行处理, 得到两种情况下(增强与不增强)的眼睛图像, 然后将所有眼睛图像resize到48×48大小, 用于制作眼睛分类网络的数据集, 眼睛数据集图片如图3所示, 其中上面3行是不加入增强方法的眼睛数据集图像(包含睁眼闭眼), 后面3行是加入LIME增强之后的眼睛数据集图像. 其中70%用于训练, 20%用于验证, 10%用于测试, 从而训练睁闭眼分类网络, 提高睁眼闭眼检测的准确率, 最终提高本文算法的鲁棒性.
3.2 实验过程
本文检测算法的流程图如图4所示, 实验所用的机器配置情况如表1, 经过不断的调优, 本文中相关模型的主要参数有: LIME算法的权衡系数α设置为0.15, 将光照图像的伽马变换设置为0.7, 睁闭眼分类网络的batch_size均设置为32, 学习率设置为0.001.
3.3 实验结果对比分析
图5是LIME算法的实验结果, 该算法的输入是一张640×480的三通道的低光照图像, 输出是一张640×480的三通道的增强后的图像, 处理之后的结果如图8所示, 其中左边为原始图, 右边为增强图, 图像尺寸大小保持640×480不变. 由实验结果可以看出, 图像的曝光度大幅增高, 有利于之后进行检测.
图6是1664张图像做的亮度统计结果. 对于每张图像, 先对其进行灰度化, 然后计算图像上所有像素点的平均灰度值即可得到图像的平均亮度, 最后统计每个亮度上(0~255)图像的数量. 实验结果如图6所示, 虚线绘制的折线图为未加入增强的统计结果, 实线绘制的折线图是加入LIME增强的统计结果. 由图像可以看出, 加入增强之后的亮度值曲线右移, 表明图像的曝光度增加, 有利于后续阶段的检测和分类.
图7是MTCNN的检测结果. 第1行左边是原始夜间图像, 右边是对其进行特征点检测的结果, 如图可以看到脸部被框出, 眼睛鼻子嘴巴等区域被标记; 第2行左边是原始图经过LIME算法增强后的结果, 右边是对其进行特征点标记后的结果.
表2是MTCNN定位眼睛区域的准确率, 对于定位结果, 若识别不到人脸框, 则识别不正确, 反之, 则认为识别正确. 实验结果可以看出, 直接输入低光情况下的图像进行检测, 检测效果会相对较差, 这是因为在低曝光度的条件下, 脸部特征不大明显, 所以很难定位到脸部. 在MTCNN检测之前, 加入低光增强的方法, 使得图像的曝光度增加, 检测效果会显著提高.
表3是眼睛状态识别的实验结果. 采用基于MTCNN网络的检测方法, 直接使用原始图像进行输入, 没有考虑到图像的质量问题, 导致MTCNN定位眼睛区域的准确率变低, 进而导致整个模型的准确率变低, 因而效果不如基于低光增强的检测方法好.
以下是疲劳驾驶检测的实验结果, 疲劳驾驶的检测针对的对象是一段视频, 判断疲劳驾驶使用的方法是在1分钟内获取60帧视频帧, 睁眼状态的数量比低于80%则可认为是疲劳, 反之则为正常状态. 表4为基于MTCNN的检测方法的实验结果, 表5是基于低光增强的检测方法的实验结果, 表6是两种方法的实验结果对比. 本文针对数据集中的36段视频(18段睁眼、18段闭眼)进行了测试, 根据结果可以看出加入低光增强之后检测器的性能有很大提升, 原因主要是因为未加入增强的检测器检测的图像曝光度过低, 导致眼睛状态识别准确率受到影响, 进而直接影响到疲劳驾驶的检测.
4 结束语
本文提出了一种基于低光增强的夜间疲劳驾驶检测方法, 在检测之前先对图像进行低光增强, 然后利用人脸关键点检测方法定位眼睛区域, 最后使用眼睛睁闭眼分类网络对眼睛区域进行分类. 本文使用了LIME算法来对图像进行低光增强, 实验表明, 加入低光增强方法的检测器比不加入的准确率高. 对比其他的疲劳检测方法, 该方法不仅不需要与驾驶员直接接触, 而且针对晚上图像曝光度低的情况均有更好的效果.
[1] |
Wang F, Wang SN, Wang XH, et al. Driving fatigue detection based on EEG recognition and vehicle handling characteristics. Chinese Journal of Scientific Instrument, 2014, 35(2): 398-404. |
[2] |
雷凌俊, 冯佳琳, 赵洋, 等. 基于脑电信号疲劳驾驶的检警头环设计. 电脑知识与技术, 2019, 15(29): 204-207. |
[3] |
徐礼胜, 张闻勖, 庞宇轩, 等. 基于短时心电信号的疲劳驾驶检测算法. 自然科学版, 2019, 40(7): 937-941. |
[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] |
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 |
[6] |
Sayed R, Eskandarian A. Unobtrusive drowsiness detection by neural network learning of driver steering. Proceedings of the Institution of Mechanical Engineers, Part D: Journal of Automobile Engineering, 2001, 215(9): 969-975. DOI:10.1243/0954407011528536 |
[7] |
柴萌. 长途客车驾驶员疲劳状态辨识与预警[博士学位论文]. 长春: 吉林大学, 2019.
|
[8] |
陈志勇, 杨佩, 彭力, 等. 基于BP神经网络的驾驶员疲劳监测研究. 计算机科学, 2015, 42(S1): 67-69, 93. |
[9] |
Forsman PM, Vila BJ, Short RA, et al. Efficient driver drowsiness detection at moderate levels of drowsiness. Accident Analysis & Prevention, 2013, 50: 341-350. |
[10] |
Chen PJ. Research on driver fatigue detection strategy based on human eye state. Proceedings of 2017 Chinese Automation Congress (CAC). Jinan, China. 2017.619–623.
|
[11] |
Reddy B, Kim YH, Yun S, et al. Real-time driver drowsiness detection for embedded system using model compression of deep neural networks. Proceedings of 2017 IEEE Conference on Computer Vision and Pattern Recognition Workshops. Honolulu, HI, USA. 2017.121–128.
|
[12] |
郑伟成, 李学伟, 刘宏哲, 等. 基于深度学习的驾驶疲劳检测算法与应用. 计算机工程, 2020, 46(7). DOI:10.19678/j.issn.1000-3428.0055912 |
[13] |
李文学, 谢凯. 基于深度学习的疲劳驾驶检测方法研究. 电子世界, 2019(17): 51-52. |
[14] |
潘志庚, 刘荣飞, 张明敏. 基于模糊综合评价的疲劳驾驶检测算法研究. 软件学报, 2019, 30(10): 2954-2963. DOI:10.13328/j.cnki.jos.005779 |
[15] |
沈英超. 基于眼部特征的疲劳驾驶检测系统的研究与实现[硕士学位论文]. 桂林: 桂林电子科技大学, 2019.
|
[16] |
刘炜煌, 钱锦浩, 姚增伟, 等. 基于多面部特征融合的驾驶员疲劳检测算法. 计算机系统应用, 2018, 27(10): 177-182. DOI:10.15888/j.cnki.csa.006555 |
[17] |
戴诗琪, 曾智勇. 基于深度学习的疲劳驾驶检测算法. 计算机系统应用, 2018, 27(7): 113-120. DOI:10.15888/j.cnki.csa.006415 |
[18] |
Zhang KP, Zhang ZP, Li ZF, et al. Joint face detection and alignment using multitask cascaded convolutional networks. IEEE Signal Processing Letters, 2016, 23(10): 1499-1503. DOI:10.1109/LSP.2016.2603342 |
[19] |
Guo XJ. LIME: A method for low-light IMage Enhancement. Proceedings of the 24th ACM international conference on Multimedia. Amsterdam, the Netherlands. 2016. 87–91.
|
[20] |
Xu L, Yan Q, Xia Y, et al. Structure extraction from texture via relative total variation. ACM Transactions on Graphics, 2012, 31(6): 139. |