基于嵌入式平台人眼疲劳检测终端的设计与实现

2017-01-19 14:26李春杰王春王全虎
现代电子技术 2016年24期

李春杰+王春+王全虎

摘 要: 设计并实现一套基于Android平台的人眼疲劳检测终端。从摄像头中获取驾驶员的脸部图像数据,快速识别并定位到人脸部。再进行人眼部的定位,利用最大类间法Otsu对人眼进行目标提取以及Robert Cross边缘检测获得人眼的轮廓,从而进行人眼状态分析;利用PERCLOS原理进行疲劳的状态判断,并且借助开源视觉库Android?OpenCV提高了系统的开发效率。在室内环境的实验结果表明该终端的表现良好。

关键词: 人眼疲劳检测; 人眼状态分析; 人脸定位; 人眼轮廓获取; Android

中图分类号: TN911.23?34; TP391 文献标识码: A 文章编号: 1004?373X(2016)24?0006?03

Design and implementation of human?eye fatigue detection terminal based on

Android platform

LI Chunjie, WANG Chun, WANG Quanhu

(School of Software Engineering of USTC, Suzhou 215123, China)

Abstract: A human?eye fatigue detection terminal based on Android platform was designed and implemented. It can acquire the driver′s face image data from the camera, recognize and locate quickly the face, and then locate the eyes. The Otsu is used to extract the human?eye target and the Robert Cross edge detection is used to acquire the outline of the human?eye to analyze the eye status. The PERCLOS principle is adopted to judge the fatigue status of human?eye. The development efficiency of the system is improved by means of the open?source vision library Android?OpenCV. The results of experiment in the indoor environment show that the terminal behaves well.

Keywords: human?eye fatigue detection; human?eye state analysis; face location; human?eye outline acquisition; Android

随着汽车的不断普及,交通事故也随之增多,全球每年约有1 800万人在交通事故中受伤或者丧生,经济的损失更是高达千亿美元计,交通安全事故极大地威胁着社会公众的安全和财产。仅2011年,我国交通事故发生总数超过210 000起,共造成62 000多人死亡,统计表明,疲劳驾驶造成的交通事故占总数的8%左右,因此开发一套实时的驾驶员疲劳检测系统具有深刻的社会意义和经济价值。

1 系统方案设计

1.1 系统层次框图

本文设计并实现的人眼疲劳检测系统是基于Android操作系统,采用开源的Android?OpenCV库进行的,其系统层次框图如图1所示。

1.2 疲劳判断原理

PERCLOS(Percentage of Eyelid Closure Over the Pupil Time)指眼睛闭合时间占某一特定时间的百分比[1?4],其数据能真正估计出疲劳,是疲劳评估测定的最好方法之一,其包含三种评价标准[5?8]:P70,P80以及EM,其中又以P80标准最优[5,7?8],P80标准:当人眼部瞳孔面积闭合超过80%作为判定闭合的标准。其示意图如图2所示。

图2中t1表示最大睁开到闭合20%所用的时间,t2表示最大睁开到闭合80%所用时间,t3表示最大睁开到睁开20%所用时间,t4表明最大睁开到睁开80%所用的时间。PERCLOS值的计算公式如下:

1.3 人眼状态判断

根据摄像头采集的人脸部图像进行实时处理,首先需要进行人脸部的检测和定位;随后将该区域设置成为感兴趣区域进行人眼部的定位,根据图像分割技术进行人眼的形状分离,二值化处理主要是将目标从背景中分离出来,而边缘检测是为了检测出图像的边缘信息,根据分离出的形状判断眼睛是否处于闭合状态。该过程的示意过程如图3所示。

1.4 系统实现流程图

根据以上的分析,系统通过摄像头采集图像,对每一帧的图像进行分析。其主要解决两个问题:一是人眼的状态判断;二是疲劳的状态判断。当PERCLOS值大于固定的阈值时,系统发出预警提示。整个过程的实现流图如图4所示。

2 系统实现过程

2.1 预处理阶段

在正常的驾驶条件下,由于诸多因素的影响,通过摄像头采集的图像可能包含噪声或者由于分辨率、背景突变等原因对后续的图像运算带来干扰,为了消除这些影响,需要对图像进行预处理:包含了去噪处理和直方图均衡化。Android?OpenCV中对应的接口分别是:Imgproc.medianBlur(Mat src,Mat des,int ksize)以及Imgproc.equalizeHist(Mat src,Mat des)。

2.2 人眼的状态判断

系统的人眼状态判断实现包含了人脸检测过程、人眼定位过程、人眼分离过程(二值化处理和边缘检测)。

2.2.1 人脸检测

传统的检测人脸方法有很多种:基于肤色的分离、基于统计模型、PCA方法,但是这些方法识别的时间较长,并且准确率不高。在本文中,采用的是OpenCV中非常成功的基于Haar?Like特征的Adaboost算法。人脸检测分成两步:首先训练过程产生分类器文件;再利用分类器进行人脸检测过程[9]。训练过程:准备正负样本,正样本是需要检测的目标(正脸),负样本是不含正样本特征的任何目标;利用CreatSample程序准备正样本集;利用Haar?Training程序训练得到分类器特征XML文件。检测过程:利用Android?OpenCV中的分类器构建函数去加载该特征XML文件,利用分类器本身的成员函数[9?10]:detectMultiScale(Mat image,List objects,double scaleFactor,int minNeighbors,int flags,Size minSize)对指定的image进行检测。其函数各参数的意义为:Image,需要进行目标检测的区域;Object,将检测到的目标标记在矩形框中;scaleFactor,代表图像的缩放因子;Minneighbors,指定每个候选矩阵至少包含的邻近元素个数;Flag,标志位,默认为0;Minsize,最小的检测窗口,如果该值设置过小,将会导致图像的计算量较大。

2.2.2 人眼定位

同样的,人脸的检测和定位同样采用该Adaboost算法,加载的分类器文件为自带的haarcascade_mcs_eyepair_big.xml,其检测的成功率达到95%以上。关于人脸和人眼的检测效果图如图5所示。

2.2.3 基于Otsu的灰度二值化

当系统成功标记处人眼部的区域后,需要进行二值化处理,从而实现眼部提取。但是由于图像的灰度值对光线很敏感,固定的阈值势必无法满足要求,本文采用的是基于Otsu算法的二值化处理。Otsu算法,又被称为最大类间法,是一种自适应的图像分割技术。它是根据最小二乘原理推导出来的,根据光线强度的不同,阈值会随之变化,能得到最优的阈值[11]。其基本原理为:将直方图在某一阈值分割成两组,称为“前景”和“背景”,当被分成的两组的方差最大时,该阈值就是最佳分割阈值。方差是灰度均匀分布的一种度量,值越大说明构成图像两部分的差别越大,当部分“前景”错分为“背景”或者“背景”错分为“前景”时,都会导致方差变小,因此最大类间法意味着错分的概率最小。对于图像直方图,不妨假设其灰度级为0~m,像素点个数为N,针对某一个分割阈值t,那么整个图像被分割成两部分,0~t称为“前景”,而t+1~m称为“背景”。“前景”的权重为[Wf],均值设为[Mf],方差为[Df],“背景”的权重为[Wb],均值设为[Mb],方差为[Db]。图像的整体的方差公式如下:

[D=Wf*Df+Wb*Db] (2)

Otsu的最终目的就是要求出D的最大值来,从而得到最优的分割阈值。

2.2.4 基于Robert Cross 的边缘检测

边缘是图像灰度值变化剧烈的位置,因此包含了大量的有用信息,常用的边缘检测包含很多,比如:Robert Cross边缘检测、Canny边缘检测、Prewitt边缘检测、Sobel检测。但是这些方法中惟有Robert Cross计算方便简单、快速,容易在实时系统中实现,本系统中采用的就是该检测方法,根据任意一对互相垂直方向上像素点的差分来计算梯度的原理[12?13],采用对角线方向相邻像素灰度差,如下:

式中:G是计算之后的灰度值;f是原始图像的灰度值。虽然Robert检测速度很快,但是其缺点也是很明显的,对噪声敏感,并且边缘不是很光滑。当成功提取出边缘轮廓之后,根据边缘的最大垂直距离,进行眼睛的状态判断,多次试验结果表明,该系统中当最大的垂直边缘距离小于眼睛标记矩形区域高度的40%的时候,判断是闭合状态。对于眼睛的提取在不同光线下的效果图如图6~图8所示。

2.3 疲劳状态判断

系统采用的是PERCLOS原理进行疲劳的判断,当PERCLOS值大于40%之后将会进行疲劳判定,并且会进行预警提示。针对每一帧图像的人眼边缘信息,可以判断出人眼的闭合状态。本文中对帧状态Ni的设置:当人眼处于闭合状态时,Ni的值为1,睁开状态Ni的值为0。因此PERCLOS的计算公式可以转换为:

[PERCLOS=i=0NNiN] (4)

对连续的N=30帧进行检测,当PERCLOS的值大于40%的时候表明驾驶员处于疲劳状态,进行预警提示。

3 系统实验

在实验室的环境下,测试平台为三星GT?9100G,邀请了同组的成员进行疲劳模拟,然后利用该系统进行疲劳检测。一共进行了5组实验,其中检测出4组,未被检测的那一组,原因在于其眼睛较小,张开和闭合的状态不是很明显,导致系统无法进行确切的识别。另外,还邀请2组同学带着眼镜进行测试,发现系统能有效地标记出人眼,但是由于眼镜的部分边框也被标记在了边缘提取区域内,造成了边缘的最大垂直距离较大,不能有效地判断人眼状态,对PERCLOS值的计算造成了影响。图9和图10是其中一个同学的实验效果图。

4 结 语

本文实现的基于Android平台的人眼疲劳检测终端,在实验室的环境下表现良好,从实验结果可以看出:系统能快速地定位到人脸和人眼,采用的是摄像头进行图像采集,能有效地避免和监测者的接触,提高了监测系统的适用性,适合驾驶条件下的疲劳检测。Otsu二值化方法和Robert Cross边缘检测相结合的人眼分割技术能有效地使系统不受光线强弱的变化,快速提取出人眼的形状和边缘分布,提高了PERCLOS值的计算精度。系统目前也同样存在一些限制:实时性不是很好,目前仅能做到7 f/s的处理水平,因为嵌入式平台本身的限制和开发环境本身的原因,以及各类算法优化程度不够造成图像的处理速度不够;不能有效地排除眼镜边框造成的边缘信息提取,需要进一步地提高眼睛的定位精度。这些都是后续要对系统进行改进的方向。

参考文献

[1] 刘洪榛.基于机器视觉的疲劳驾驶检测算法研究[D].广州:华南理工大学,2012.

[2] 赵团.基于机器视觉的驾驶员疲劳检测技术的研究与实现[D].辽宁:东北大学,2010.

[3] 焦波波.基于眼睛状态的驾驶人疲劳检测技术的研究[D].长沙:中南大学,2012.

[4] 倪小鹏.基于视觉的驾驶员疲劳状态检测方法研究[D].上海:华东理工大学,2012.

[5] 吴康华.基PERCLOS的驾驶疲劳检测系统设计[D].杭州:浙江大学,2008.

[6] 夏芹,宋义伟,朱学峰.基于PERCLOS的驾驶疲劳监控方法进展[J].自动化技术与应用,2008,27(6):43?46.

[7] 郭永彩,李文涛,高潮.基于PERCLOS的驾驶员疲劳检测算法[J].计算机系统应用,2009,18(8):54?57.

[8] 刘江伟.基于人眼检测的驾驶员疲劳状态识别技术[D].哈尔滨:哈尔滨工业大学,2008.

[9] 刘瑞祯.OpenCV教程?基础版[M].北京:北京航天航空大学出版社,2007.

[10] 王宏彬,李灯熬,赵菊敏,等.利用OpenCV实现在Android系统下的人脸检测[J].软件工程与技术,2011,32(12):4?7.

[11] 曹亮.基于Otsu理论的图像分割算法研究[D].武汉:武汉理工大学,2008.

[12] 赵芳,栾晓明,孙越.数字图像几种边缘检测算子检测比较[J].自动化技术与应用,2009,28(3):68.

[13] 管宏蕊,丁辉.图像边缘检测经典算法研究综述[J].首都师范大学学报(自然科学版),2009(z1):66?69.