基于眼球运动状态检测的疲劳预警系统研究*
2016-03-15张志文付永庆
张志文 付永庆
(西安工业大学电子信息工程学院 西安 710021)
基于眼球运动状态检测的疲劳预警系统研究*
张志文付永庆
(西安工业大学电子信息工程学院西安710021)
摘要基于ARM+Linux平台上对于疲劳预警方案的实现,采用了一种新的适用于驾驶疲劳检测的疲劳状态判别算法。即当人处于疲劳状态时,眼球运动速率会大幅度下降,根据这一特点,并结合新型的CortexA8的ARM处理器,以及Linux操作系统、Qt图像化界面库和OpenCV计算机视觉库,设计了基于此嵌入式平台的疲劳预警系统。最后仿真可表明,该系统对驾驶员疲劳预警具有一定的准确性与可研究性。
关键词疲劳预警; 眼球运动; 人脸、人眼检测
Fatigue Warning System Based on the State of Eyemovement Detection
ZHANG ZhiwenFU Yongqing
(School of Electronic Information Engineering, Xi’an Technological University, Xi’an710021)
AbstractAiming at the realization of the fatigue early warning scheme based on ARM+Linux platform, a new method is designed for the fatigue detection of driver fatigue detection in this paper. When a person is in a state of fatigue, it will be a significant decline in the rate of eye movement, According to this feature, and combining with the new ARM CortexA8 processor, Linux operating system, Qt graphical interface library and OpenCV computer vision library, a fatigue warning system is designed based on this embedded platform. Finally, the simulation shows that this system has certain accuracy and scientific research.
Key Wordsfatigue warning, eye movement, face and eye detect
Class NumberTN919.85
1引言
本课题是通过使用AdaBoost算法对人脸、人眼的识别[2],然后结合Canny算子进行边缘检测,再用Hough变换方法实现人眼虹膜中心的定位跟踪[3],最后利用角点检测原理检测出眼角位置,然后采用帧差分法和人眼在脸部的方位信息来跟踪人眼区域[4],并且提取与人眼相关的疲劳特征信息,最后可以根据眼球运动速率、Perclos等人眼疲劳判定方法来判断疲劳状态[1]。由于在实际情况下使用Perclos方法[5],即对人眼黑色像素比例计算来判断疲劳驾驶的方法实时性不够好、准确度不够高,鉴于这种情况,可以通过采用计算眼球运动速率的方法进行疲劳预警,当人处于疲劳状态时,人的眼球运动速率会大幅度降低,因此本文针对于这种新的疲劳检测预警方法进行了研究。
2人脸以及人眼的检测
本文涉及的Haar分类器方法是一种从整体算法来讲较为成熟、可靠的算法。其算法原理可以通过这种表达方式得来:Haar分类器=Haar-like特征+积分图+AdaBoost+级联。
Haar-like是一个特征点,它可以用来训练一些质量比较好的级联分类器,当然也可以把人脸、人眼区域特征化检测出来,加以区分。目前常用的Haar-like特征可以分为边缘特征、线性特征、中心特征和对角特征这四大类。
在系统的算法思路中,主要是利用Adaboost算法[6],就是把训练出好的分类器模板,进行匹配来得到我们所需要的人眼特征区域。在这其中,比较重要的环节是训练出可以检测到人脸、人眼分类器。AdaBoost是一种可以加强一般性分类器的算法,更有效的检测出特征点,在Haar中可以生成一个更好的矩阵特征组合,即Haar分类器[7]。
图1 眼睛识别流程图
由于训练分类器存在耗时[8]比较长、计算量大等缺陷,并且在样本较少的情况下不是很精确,因此本设计选取采用OpenCV视觉库中OpenCV/date/haarcascades有脸部和眼部haarcascade_frontalface和haarcascade_eye_tree_eyeglasss[9]的xml分类器。OpenCV(Open Source Computer Vision Library)是由Intel公司提供开发的一个开源的跨平台的计算机视觉图像库,包含了超过500个函数来实现图形处理和计算机视觉方面的算法,并可用于移植运行在Linux、Windows和Mac OS操作系统上。OpenCV库中存在一些分类器,它们都经过了优化,检测精度高,速度快,而且在VC++平台上加载OpenCV视觉库中的脸部和眼部分类器在实际应用中得到了验证,识别的流程图可如图1所示。
3眼睛虹膜中心的识别跟踪
在识别定位人脸人眼后,还需对人眼进行眼睑轮廓跟踪找中心方法进行眼睛虹膜中心点位,即对瞳孔的定位是对二值化后的图像分别向X轴、Y轴投影,取其最小的累加值。而虹膜外边缘的定位是先用Canny算子进行边缘检测,再用Hough变换实现定位,在VC平台上实现的效果图如图2所示。
图2 眼睛虹膜中心定位
4眼睛的定位与跟踪
在完成眼睛的检测后,下一步就是对眼部图像进行相关的算法处理,更清楚地得到有用的眼睛图像特征数据。图像特征处理的原理是是对摄像头采集到的图像进行连续的循环处理,如平滑滤波、背景擦除、二值化等实时图像处理。对于图像进行高斯滤波是为了防止图像模糊、出现细小斑点等问题,用来平滑图像,从而得到更清晰的人眼部图像。由于采集相邻两帧图像间的时间间隔非常短,因此采用帧差法,也就是用前一帧图像作为当前帧的背景,并且结合二值化处理方法来得到眼部眼睛与眉毛等信息。这种方法背景并不积累,而且更新速度较快、计算量相对比较小,可以更好地保证实时性。形态学滤波则是利用形态学运开、闭运算进行相关滤波操作,去掉噪声,保证图像质量。
为了更加快速地定位人眼,提高精度,可以根据人眼在脸部比例位置近似定位人眼。人眼区域位于脸部水平方向区域的1/6~5/6处;位于脸部垂直方向区域的1/4~2/4处,并且结合分类器方法,可以得到人眼是否配戴眼镜的二值化后检测效果图,如图3所示,可以看出检测后眼睛的状态特征很清晰。
图3 眼睛的定位与跟踪
5疲劳预警判断
在疲劳检测这方面大多数人所使用的方法是比较通用的PERCLOS方法。PERCLOS(Percentage of Eyelid Closure Over the Pupil Time)是指眼睛睁开和闭合时所占的比例。PERCLOS算法在国际上将闭合程度大于80%的眼睛状态归于闭合状态,故可得PERCLOS值的计算公式是PERCOLS=(眼睛闭合帧数/检测时间段总帧数)×100%。现实中通过VC平台对PERCLOS方法进行了验证,其方法虽然是当前疲劳预警[10]的主流方法,但是在运行结果检测速率过低,实时性不高,导致预警不准确,仅可以用于静态的室内监控。图4是P80方法检测实时视频的时间效果图。
由此可以看出对于实时视频的帧检测预警时间为将近700ms,由人的视觉暂态理论分析,只有当图像处理系统的处理速度每秒25帧以上人眼才会意识到连续帧的图像,从而达到视频流的效果,也就是要求实时图像处理系统必须在40ms内完成一帧图像的运算处理,才能保证图像的实时性。也就是说笔记本上的P80检测方法不能达到实时性要求。本文采用了使用计算眼球运动速率的方法来进行疲劳预警,只需定位到人眼虹膜中心和内眼角这两个人眼特征点,便可计算出眼球运动速度来判断疲劳。这种方法从理论上可以提高疲劳预警的实时性。
图4 P80疲劳预警方法cmd窗口
5.1疲劳检测
在通过图像二值化后得到人眼的状态特征,需要对虹膜中心以及内眼角进行定位。图5是人眼睛的实物状态图。
图5 人眼实物图
1) 虹膜中心定位
在上文中已经提到虹膜定位的方法,并且经过计算机上验证具有一定的准确率以及实时性,图6为人脸在不同方位的虹膜中心验证效果图。
图6 虹膜中心定位
2) 眼角定位
眼角定位的方法,可以通过Harris算法进行角点检测,寻找到二值图像中的轮廓,由于检测出来的角点可能会存在一些伪角点,通过与轮廓信息相结合的方法进行Harris角点检测,将这些伪角点剔除出去,然后标定得到的角点。其流程图如图7所示。
图7Harris角点检测流程图
本设计选择了以OpenCV为编程环境,因为自带的分类器可以很好的进行人脸识别和眼睛识别,只要在这个基础上扩展即可。首先将两个分类器文件指针CvHaarClassifierCascade*,分别指向两个文件,以便在调用cvHaarDetectObjects函数时使用。根据cvHaarDetectObjects函数的其它参数,分别定义,然后进行识别,返回一串CvSeq*序列,其数目代表识别出的数目。从中提取出区域的信息,然后画出所在区域。在确定眼睛的区域后,对它设置ROI,进行角点检测。由于ROI区域很小,只需要设置max_corner为10,角点选择的方法是找到X最大和最小的点,但根据运行情况,还增加了一个条件,
ymin+1/4*eye_height 使眼角位于眼睛区域的中央,提高识别精度。最后设置ROI为NULL就能返回大图片。下图8为眼角检测效果图。 图8 人眼眼角定位 然后可以通过修改参数,需要对检测到的faces->total,将每个ROI区域进行保存,因此设置max_face=10,设置变量 CvRect eye_ROI[2*max_face]; CvRect nose_ROI[max_face]; CvRect mouth_ROI[max_face]; 可以达到检测多张人脸的效果。 3) 眼球速率计算 检测到虹膜中心与眼角后需要对眼球速率进行计算。由于摄像头采集每帧图像到处理完之间的时间间隔t几乎一样,因此只需计算出相邻两帧眼球运动的距离即可。下图9假设为连续两帧单眼睛状态。 图9 连续两帧眼睛状态 那么在此相邻两帧眼球运动的距离L可这样计算: 则L=|L1-L2| 然后通过L与时间间隔t做比值便可求出这时刻的眼球速度。 5.2疲劳判定 图10 疲劳判定流程图 基于眼球运动速度检测疲劳状态的原理是在提取跟踪到人脸、人眼的基础上,再定位出人眼虹膜中心和内眼角位置,然后通过相邻两帧图像虹膜中心到内眼角之间的位移之差与定位此两帧图像虹膜中心所用时长做比值求出眼球的转动速率,正常情况下,当驾驶员驾驶车辆行走时,目光会时不时地看向后车镜以及侧车镜,眼球会非均匀的转动,当人处于疲劳状态时,眼球运动速度变慢,根据眼球运动速率判断出疲劳状态。由于这种预警方法比较新颖,疲劳状态所对应的眼球运动速率目前还没有一个统一标准,需要在后面工作中以实际出发进行统计计算一个标准值。但可以给出该方法的应用流程如图10所示。 6结语 本课题的整体思路为在PC机上实现程序编写,然后在Linux系统下查看运行效果,然后交叉编译为开发板可执行文件,编译好开发板所依赖的环境移植到开发板,利用QT图像库实现眼睛的检测及后续的疲劳判定,并且在开发板上利用v4l2协议和QT图像库,对摄像头数据进行采集和显示,并利用OpenCV的函数对采集的一帧帧图片进行处理,提取人眼疲劳特征,进而进行判定,最后再利用QT图像库进行界面显示及后续的预警[11]。本研究的新思想在于如何使用眼球速率进行疲劳判定,在后期的努力中应该将如何计算出眼球运动速率为重点,构建研究出疲劳驾驶方向的新篇章。 参 考 文 献 [1] 张志文,张沛晨.基于人眼运动检测的疲劳预警系统研究[J].电子设计工程,2015,23(6):172-174. ZHANG Zhiwen, ZHANG Peichen. Motion detection based on the human eye fatigue warning system[J]. Electronic Design Engineering,2015,23(6):172-174. [2] 梁涛,张志文.基于OpenCV的视频图像人眼跟踪方法的研究[J].科学技术与工程,2013,5:24-27. LIANG Tao, ZHANG Zhiwen. OpenCV Based on a video image of the human eye tracking method[J]. Science Technology and Engineering,2013,5:24-27. [3] 郑夜星,林其伟.基于AdaBoost人脸检测的改进FGS视频编码[J].电视技术,2010,34(2):85-87. ZHENG Yexing, LIN Qiwei. AdaBoost face detection improved FGS video encoding technology based on[J]. TV,2010,34(2):85-87. [4] 王磊,吴晓娟,俞梦孙.驾驶疲劳/瞌睡检测方法的研究进展[J].生物医学工程学杂志,2007,24(1):245-248. WANG Lei, WU Xiaojuan, YU Mengsun. Research progress in driving fatigue drowsiness detection methods[J]. Journal of Biomedical Engineering,2007,24(1):245-248. [5] 朱振华,吴晓娟,王磊,等.基于眨眼持续时间的司机疲劳检测方法[J].计算机工程,2008,34(5):201-203. ZHU Zhenhua, WU Xiaojuan, WANG Lei, et al. Detection Method of Driver Fatigue Based on Blink Duration[J]. Computer Engineering,2008,34(5):201-203. [6] Viola P, Jones M. Rapid Object Detection Using aboosted Caseade of SimpIe Features[J]. IEEE Computer Society Conference on ComPuter Vision and Patten recognition,2001,24(1):511-518. [7] Rainer Lienhart, Joehen Maydt. An Extended Set of Haar-like Features for Rapid Object Detection[J]. IEEE ICIP,2008,24(1):28-56. [8] Paul Viola, Miehael Jones. Robust Real-Time Faee Deteetion[J]. International Journal of ComPuter Vision,2004,57(2):137-154. [9] 于仕琪.OpenCV概述[Z].http://wiki.opencv.org.cn/index.php/OpenCV概述,2010-04-16,34(2):85-87. YU Shiqi. Abstract .OpenCV Overview[Z]. http://wiki.opencv.org.cn/index.php/OpenCVoverview,2010-04-16,34(2):85-87. [10] 兰婷,普杰信.视频图像中的视觉疲劳实时检测方法研究[J].计算机工程与应用,2012,35:147-150. Lanting Bhuj letter video images in real-time visual fatigue detection method[J]. Computer Engineering and Applications study,2012,35:147-150. [11] 陈香.基于Qt平台下嵌入式现场监测装置的研究[D].南京:南京师范大学,2013,24(1):28-31. CHEN Xiang. Based platform Qt embedded under study site monitoring device[D]. Nanjing: Nanjing Normal University,2013,24(1):28-31. 中图分类号TN919.85 DOI:10.3969/j.issn.1672-9722.2016.02.018 作者简介:张志文,男,硕士,教授,研究方向:计算机测控技术、智能化仪表等。付永庆,男,硕士研究生,研究方向:通信与信息系统。 *收稿日期:2015年8月10日,修回日期:2015年9月20日