基于深度相机的疲劳预警检测算法研究

2020-03-13 12:14李金宝张维忠

李金宝 张维忠

摘要:  为解决复杂环境下传统彩色图像对危险驾驶行为无法正确识别的难点,本文提出一种基于深度相机的疲劳预警检测方法。首先通过深度相机获取驾驶员的红外图像与深度图像,对获取的红外图像使用局部二值模式(local binary pattern,LBP)特征算子检测定位人脸区域;在人脸区域使用随机森林和全局线性回归相结合的方法训练出模型,并检测定位人脸的68个特征点,进而确定眼睛和嘴巴的闭合状态。为了增强疲劳检测的准确性,判断驾驶员佩戴眼镜情况,采用改进的疲劳检测算法判定驾驶员的疲劳状态,同时采用图像处理方法对眼部状态与嘴部状态进行疲劳检测。检测结果表明,本算法能够有效识别白天和夜间眼睛与嘴部的疲劳状态,具有较强的实用性。

关键词:  OpenCV; 疲劳检测; 人脸关键点; 红外图像; 危险驾驶

中图分类号: TP391.413 文献标识码: A

收稿日期: 2019-03-25; 修回日期: 2019-10-21

作者简介:  李金宝(1995-),男,硕士研究生,主要研究方向为计算机视觉。

通信作者:  张维忠(1963-),男,博士,教授,主要研究方向为计算机视觉、模式识别和图像处理等。Email: zhangwz_01@aliyun.com

目前,我国已成为汽车制造大国,汽车保有量跃居世界第二。随着汽车数量的不断增加,交通事故及死亡人数也随之增多。据美国国家公路交通安全管理局的调查报告显示,在以往的交通事故中,由疲劳驾驶引起的事故比例较大[1]。近年来,通过脑电波检测疲劳[2-3]和外部特征检测疲劳都有较大发展,既有传统的帧差法[4]与机器学习的Adaboost眼部阈值分割法[5],也有瞳孔判别法[6]、面部特征法[7-8]和使用深度学习定位特征点的方法[9-10]。但以上方法多数受环境光线影响大、设备要求高、实时性低等缺点,导致无法准确识别。基于此,本文采用抗干扰能力强的红外图像与深度图像,对基于深度相机的疲劳预警检测方法进行研究。红外图像进行面部识别和特征点提取,并在深度图像上获取面部深度与手部深度,去掉噪声获得轮廓,同时根据其连通域,获得其手部状态。实验结果表明,该算法鲁棒性高,设备成本较低,能够满足实时检测的需要。该研究为疲劳检测预警提供了新思路,具有较高的实用价值。

1 算法设计方案

整个算法设计基于计算机视觉技术,根据驾驶员的眼部特征与嘴部特征来获得其疲劳状态,在其疲劳驾驶时给出实时预警。整体算法设计方案如下:

1) 利用深度相机获取红外图像。

2) 利用红外图像预处理后识别面部,结合随机森林和全局线性回归方法训练出LBF特征模型获取人脸特征点,计算眼部纵横比(eye aspect ratio,EAR)[11]获得眼部状态,同时,结合嘴部特征,利用改进的PERCLOS指数模型,获得疲劳状态。

3) 在深度图像下处理头部区域,得到面部深度,使用深度阈值分割和形态学处理去掉噪声,获得面部区域深度图像,连通域二值化并根据连通域面积变化计算面部状态。进行疲劳检测与危险驾驶行为检测,检测算法流程图如图1所示。

2 人脸的检测与特征点获取

2.1 基于局部二进制模式直方图(local binary patterns histograms,LBPH)的人脸检测

局部二值模式(local binary patterns,LBP)算子[12]是在一个3×3的窗口内取其中心像素值为阈值,与周围8个像素值进行比较,若大于,标记为1,否则为0。其公式为

LBPxc,yc=∑p-1p=02ps(ip-ic)(1)

式中,其中,xc,yc是中心像素;亮度ic,ip为邻接像素;sx=1x≥00x<0 。

采用LBP特征检测人脸,与哈尔特征(Haarlike features)检测人脸相比,运算速度快,精准度高,满足在边缘计算平台下要求时效性的特点,LBP特征的人脸检测与人脸识别已得到广泛应用[13-14]。首先计算图像大小为(w-2 radius,h-2 radius)的第i个LBP编码图像LBPi,然后计算各像素在第n邻域所对应的像素偏移坐标dx,dyn,即

dxn=-radius sin2.0 PInneighborsdyn=-radius cos2.0 PInneighbors(2)

采用双线性差值,计算像素(x,y)第n邻域的灰度值gray(x,y)n和编码LBP(x,y)n,即

LBP(x,y)n=1(grayx,yn≤gray(x,y))0(grayx,yn>grayx,y)(3)

所以得出像素LBP編码值为

LBPx,y=∑neighbors-1n=0LBP(x,y)n×2n (x∈0,w-2 radius,y∈(0,h-2 radius))(4)

计算每个LBPi图像的宽度和高度分别为

w_grad=LBPi.cols/gridxh_grad=LBPi.rows/gridy(5)

按行统计每个LBPi直方图各值高度,将结果存储在HIST中,并将高度除以w_grad×h_grad,进行直方图归一化,以行为主序列将HIST转换为1维的向量矩阵。计算直方图之间的距离为

disi=∑lenj=0(hij-hqj)hij-hqjhij, hij≠0(6)

其中,hij和hqj分别是数值为j的直方图高度和待匹配图像值为j的直方图高度;len为直方图最大值。

2.2 人脸特征点获取

在获得人脸区域后,采用Ren Shaoqing提出的随机森林和全局线性回归相结合的方法[15],进行人脸标定获取特征点具有较高的准确率和实时性。首先使用随机森林算法和形状索引特征,得到图像的局部二值特征,并线性回归求解回归模型,然后采用训练得到的特征图和线性方程更新后得到的shape Δs,与上个阶段相加,得到当前步骤的shape,不断迭代至结束。

由于采集的图像受光照、背景、噪声等因素的影响,如果直接检测会对算法的适应性和结果的准确性产生影响,因此需要对获取的图像进行预处理。为了有效的区分前景和背景,在预处理阶段,首先进行光照补偿和图像直方图均衡处理,以增强图像的对比度。同时,为了消除噪声的影响,对图像进行中值滤波处理,该方法不仅可以去除孤立点噪声,还可以有效保护图像边界信息。在预处理后,再进行人脸检测与特征点检测,檢测结果表明,处理后的图像面部识别率明显提高。预处理后的实验图如图2所示。

3 疲劳检测

3.1 眼睛与嘴部状态获取

当获得实时面部特征点后,根据特征点获得眼部和嘴部状态。眼部状态特征有慢眼运行(slow eye movement,SEM)与睁闭眼特征,Jiao Y等人[16]利用SEM这一睡眠开始的标志特征检测疲劳,而本文采用基于特征点的方法检测眼睛闭合状态,进而确定疲劳状态,但该方法需要计算眼睛纵横比(eye aspect ratio,EAR)。在人脸的68个特征点中,每个眼部有6个特征点,且在睁眼与闭眼时处在不同的状态,因此EAR概念被提出,通过计算眼睛宽和高的比值,计算眼睛状态,其计算方法为

EAR=‖P2-P6‖+‖P3-P5‖2‖P1-P4‖(7)

由实验可知,闭眼时,EAR值发生明显波动,可以方便的找出阈值,并可判断是否眨眼,符合实时检测要求,精准度较高。

为了更加准确的识别疲劳状况,本文提出了综合嘴部状态的疲劳检测指数PERCLOSmouth,其中mouth为嘴部状态mousestate,即嘴部疲劳状态。取嘴部内嘴角与外嘴角特征点,计算嘴部的宽widthmouse=‖mouseleft-mouseright‖;取嘴部的上、下顶点,计算嘴部的高hightmouse=‖mousehigh-mouselow‖,最后计算嘴部的纵横比,得出嘴部状态为

mousestate=hightmouse/widthmouse (8)

3.2 佩戴眼镜检测

由于佩戴眼镜使图像中的人眼特征点拟合产生影响,因此需要戴眼镜检测对应相应的阈值。本文提出的戴眼镜检测的具体算法GLASSESdetect如下:

1) 对获得的红外图像进行预处理,使用均值滤波平滑图像。

2) 为了正确判断是否佩戴眼镜,需要求出眼睛中部戴眼镜部位的眼镜框边缘,且只需要眼镜框的Y方向边缘,因此使用sobel算子进行图像Y方向的边缘检测。

3) 为了方便计算与提高运算效率,对边缘检测后的面部图像进行二值化处理。

4) 利用求得的面部特征点,计算两眼的中间坐标与鼻部特征点的距离和眼睛的内角点,以此分割眼镜中间感兴趣区域(region of interest,ROI)区域,不戴眼镜与戴眼镜的ROI区域如图3所示。

5) 在分割的ROI区域,求眼镜边缘占ROI的百分比,即白色像素所占比值,实验结果表明,当比值超6%时为戴眼镜情况。

在获得是否佩戴眼镜的判断结果后,根据不同情况进行处理。在不佩戴眼镜的情况下,使用不佩戴眼镜的ERA阈值;在佩戴眼镜的情况下,使用佩戴眼镜的ERA阈值,从而获取各状态下的眼部状态。

3.3 融合眼部与嘴部状态的PERCLOS疲劳检测

为增强疲劳检测的鲁棒性,马召宾等人[17]提出了融合眼部特征和头部姿态的方法;R. Ahmed等人[18]采用图像处理方法,检测闭眼、打哈欠、头部倾斜等特征,并综合判断疲劳。基于贝叶斯网络(bayesian network,BN)的疲劳评估系统需要多种驾驶状态[19],在车上进行实时计算收集数据,成本高,效率低,不易采用;基于主动外观模型的检测方法只考虑眼睛睁闭合状态,缺少嘴部疲劳特征[20]。本文提出了融合眼部与嘴部特征的PERCLOS疲劳检测方法,PERCLOS方法能够反映人们在困倦时眼睑的状态和疲劳程度,即眼睛在一段时间内闭合状态占总时间的比值,其有3种测量标准:P70,P80,EM,当眼睑遮住瞳孔70%,80%,50%时,判定闭眼。

在实际应用中,采用P80标准,该标准经实验证明,能准确的表示疲劳状态。为方便使用PERCLOS指数,本文改进了PERCLOS指数计算方法,即

PERCLOS=framewinkframesum×100%(9)

式中,framewink为闭眼帧数;framesum为总时间帧数。本方法取30 min为一个时间区段,计算该时间段内有效帧的PERCLOS值与嘴部的状态,若嘴部张开持续达1.5 s,则记为1次哈欠,统计该时间段内的哈欠次数,超过60次,PEICLOS值+10%。融合哈欠后的PERCLOSmouth值为

PERCLOS=EYEperclos+10%×MOUTHyawnMOUTHyawn=0yawn>60MOUTHyawn=1yawn<60(10)

式中,EYEperclos为左、右眼PERCLOS值的均值;yawn为一个计时区间内的哈欠次数,若在该时间段内PERCLOS值>40%,则认为达到疲劳阶段,进行疲劳预警,为了防止出现司机瞌睡的情况,当司机持续闭眼达3 s后,也发出相应的疲劳预警。

采用UPBoard开发板,该开发板处理器为英特尔凌动X5 Z8350,最高频率1.92 GHz,并采用内存为1 GB版本在车上实时测试,在佩戴眼镜的情况下,分别测试各方法(PERCLOS、PERCLOSmouth、PERCLOSmouth+GLASSESdetect)的准确率。各方法检测到的眼部状态准确率如表1所示。

邀请两名清醒状态(睡眠充足)和两名疲劳状态(睡眠不足)共4位同学进行30 min的模拟驾驶实验,各状态下疲劳检测情况如表2所示。

实验结果表明,融合嘴部状态、眼部状态与戴眼镜检测的疲劳检测,能准确的判断出佩戴眼镜和不佩戴眼镜下的疲劳状态,对环境光线的抗干扰能力较强,具有较好的鲁棒性。

4 结束语

本文提出的基于深度相机的疲劳驾驶预警算法,使用人脸特征点的标定,并且识别驾驶员是否佩戴眼镜,可以在多种环境下进行归一化处理,并计算纵横比值来确定睁闭合状态,同时结合融合眼部状态和嘴部状态的PERCLOS方法,确定驾驶员的疲劳状态。实验结果表明,本算法稳定性好,对系统要求较低,可移植到嵌入式系统上使用,鲁邦性强,可适用于复杂光线变化的场景。该研究为复杂环境下的疲劳预警提供了新方法,具有较高的实用价值。

参考文献:

[1] 汪前进, 郑占杰. 基于计算机视觉的危险驾驶预警系统研究与设计[J]. 长沙大学学报, 2018, 32(5): 37-40.

[2] Yin J, Hu J, Mu Z. Developing and evaluating a mobile driver fatigue detection network based on electroencephalograph signals[J]. Healthcare Technology Letters, 2017, 4(1): 34-38.

[3] Hu J F, Min J L. Automated detection of driver fatigue based on EEG signals using gradient boosting decision tree model[J]. Cognitive Neurodynamics, 2018, 12(4): 431-440.

[4] 程如中, 趙勇, 戴勇, 等. 基于Adaboost方法的车载嵌入式疲劳驾驶预警系统[J]. 北京大学学报: 自然科学版, 2012, 48(5): 719-726.

[5] Chang T H, Chen Y R. Driver fatigue surveillance via eye detection[C]∥17th International IEEE Conference on Intelligent Transportation Systems (ITSC). Qingdao, China: IEEE, 2014: 366-371.

[6] Chakraborty M, Aoyon A N H. Implementation of computer vision to detect driver fatigue or drowsiness to reduce the chances of vehicle accident[C]∥2014 International Conference on Electrical Engineering and Information & Communication Technology. Dhaka, Bangladesh: IEEE, 2014.

[7] Hu J F. Comparison of different features and classifiers for driver fatigue detection based on a single EEG channel[J]. Computational and Mathematical Methods in Medicine, 2017(3): 1-9.

[8] Zhang F, Su J, Geng L, et al. Driver fatigue detection based on eye state recognition[C]∥ 2017 International Conference on Machine Vision and Information Technology (CMVIT). Singapore, Singapore: IEEE, 2017.

[9] 游峰, 梁昭德. 基于深度学习的驾驶人疲劳检测算法研究[J]. 武汉理工大学学报: 交通科学与工程版, 2018, 42(3): 417-421.

[10] Zhao X P, Meng C N, Feng M K, et al. Fatigue detection based on cascade convolutional neural network[J]. Journal of Optoelectronics Laser, 2017, 28(5): 497-502.

[11] Tereza Soukupová. Eyeblink detection using facial landmarks[D]. Prague, Czech Republic: Faculty of Electrical Engineering, Czech Technical University, 2016.

[12] Ojala T, Pietikainen M, Harwood D. A comparative study of texture measures with classification based on feature distributions[J]. Pattern Recognition, 1996, 29(1): 51-59.

[13] 蓋健, 刘小华, 李锐杰, 等. 基于LBP的图像集人脸识别算法[J]. 东北师大学报: 自然科学版, 2015, 47(4): 84-87.

[14] 朱峰. 一种基于多尺度LBPH特征的快速人脸识别算法[J]. 计算机应用与软件, 2015, 32(8): 315-319.

[15] Ren S Q, Cao X D, Wei Y C, et al. Face alignment at 3000 FPS via regressing local binary features[C]∥IEEE Conference on Computer Vision and Pattern Recognition. Columbus, OH, USA: IEEE, 2014: 1685-1692.

[16] Jiao Y, Peng Y, Lu B L, et al. Recognizing slow eye movement for driver fatigue detection with machine learning approach[C]∥2014 International Joint Conference on Neural Networks (IJCNN). Beijing, China: IEEE, 2014: 4035-4041.

[17] 馬召宾. 融合眼部特征及头部姿态的实时疲劳驾驶检测技术研究[D]. 济南: 山东大学, 2016.

[18] Ahmed R, Emon K E K, Hossain M F. Robust driver fatigue recognition using image processing[C]∥2014 International Conference on Informatics, Electronics & Vision (ICIEV). Nanjing, China: IEEE, 2014: 1-6.

[19] Guo W Q, Xiao Q K, Hou Y Y, et al. A novel driver fatigue assessment in uncertain traffic condition[C]∥Proceedings of the 33rd Chinese Control Conference. Dhaka, Bangladesh: IEEE, 2014: 4777-4781.

[20] Xie J F, Xie M, Zhu W. Driver fatigue detection based on head gesture and PERCLOS[C]∥2012 International Conference on Wavelet Active Media Technology and Information Processing (ICWAMTIP). Chengdu, China: IEEE, 2012: 128-131.

Fatigue Warning Detection Algorithm Based on Depth Camera

LI Jinbao, ZHANG Weizhong

(College of Computer Science & Technology, Qingdao University, Qingdao 266071, China)

Abstract:  In order to solve the difficulty that traditional color images cant correctly identify dangerous driving behaviors in complex environments, a fatigue warning method based on depth camera is proposed in this paper. Firstly, the infrared image and the depth image of the driver are obtained by the depth camera, and the local binary region mode feature operator is used to detect the localized face region for the acquired infrared image; the random face forest is combined with the global linear regression method for training in the face region. The model is detected, and 68 feature points of the face are detected to determine the closed state of the eyes and mouth; in order to enhance the accuracy of the fatigue detection, and whether or not the driver wears the glasses, the fatigue state of the driver is determined by the improved fatigue detection algorithm. At the same time, the image processing method is used to perform fatigue detection on the eye state and the mouth state. The test results show that the algorithm can effectively identify the fatigue state of the eyes and mouth during the day and night, and has strong practicability.

Key words:  OpenCV; fatigue detection; face key points; infrared image; dangerous driving