APP下载

一种快速驾驶员疲劳检测方法

2015-01-29蒋文博谢晓明

电子设计工程 2015年23期
关键词:人眼眼球轮廓

蒋文博,谢晓明

(北京化工大学 信息科学与技术学院 北京 100029)

近年来,疲劳驾驶在导致交通事故中所占的比例逐年上升,对预防疲劳驾驶的研究也越来越受到关注。开发能够实时检测疲劳驾驶行为并对驾驶员进行预警的系统,对改善交通安全意义重大[1]。

目前疲劳驾驶的检测方法主要有神经网络,模板匹配,统计方法等[2]。而人眼检测由于特征明显,容易处理,被广泛研究。文献[3]采用逐步增加匹配点的匹配策略,通过计算每个位置的相关度,引入淘汰机制,对符合要求的位置进一步增加相关计算的像素点。该方法减小了匹配过程中的计算量,有效降低了误检率。但对初始点选择有较强的依赖性,一定程度上影响了鲁棒性。文献[4]根据灰度值纵向投影得到的波峰波谷位置判定眼睛、鼻子和嘴的位置,然后根据灰度值覆盖的面积的不同来判别睁眼和闭眼状态。但此方法对光照、噪声及脸部姿态非常敏感,鲁棒性和准确度都不高。

随着Adaboost、支持向量机(SVM)、神经网络和模糊推理等统计模型的兴起,高精确度成为了现在模式识别的研究趋势。Fok等人[5]提出的分层神经网络,使检测系统具有旋转不变性,解决了人脸及脸部特征的多角度问题,提高了准确率。徐欢等人[6]提出一种基于代价敏感支持向量机(CSVM)的人眼检测方法,用Gabor滤波器提取人眼特征向量,并使用主成分分析法实现降维,最后用CSVM训练人眼和非人眼分类器。该方法降低了误检率,提高了分类器的可靠性。文中使用Adaboost算法训练分类器,分别实现人脸、眼睛和打哈欠的检测,然后结合基于局部搜索的自动阈值法及快速Hough圆检测法来分割出眼球虹膜轮廓,最后通过对检测出轮廓形状的计算和处理做出判定,解决了以往判定眼睛睁开和闭合时计算复杂,闭合程度判断不准确的问题,同时增加了对打哈欠时嘴部的轮廓的检测,增加了疲劳检测的准确度。

1 疲劳检测方法整体架构

疲劳驾驶检测分为两个部分:前端CCD摄像头图像采集,后台计算机图形处理分析。整套方法的流程为:1)CCD摄像头采集驾驶员图像;2)用基于Haar特征的Adaboost算法检测出人脸区域;3)在人脸图像区域再次使用Haar特征的Adaboost算法进行眼睛区域和嘴部区域的定位;4)用基于局部搜索的自动阈值法实现眼球虹膜与眼睑的分割、打哈欠时嘴的轮廓的分割,用快速Hough算法标定眼球虹膜,计算虹膜圆形轮廓的完整程度以及打哈欠时嘴的张开程度,从而实现对驾驶员是否出在疲劳状态进行判别。具体流程如图1所示。

图1 疲劳驾驶检测流程图Fig.1 Driver fatigue detection flowchart

2 人脸、人眼检测

2.1 基于Harr特征的Adaboost算法

1995年,Freund和Schapire提出了Adaboost算法,是对Boosting算法的一大提升。其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些分类器结合起来,构成一个更强的最终分类器(强分类器),且不需要任何关于弱分类器的先验知识[7]。Viola P和Jones M提出了一种结合积分图的Haar-like特征快速计算方法的Adaboost算法,真正意义上实现了目标的快速、准确检测。影响Adaboost检测训练算法速度很重要的两方面是特征的选取和特征值的计算。脸部的一些特征可以用Haar(矩形)特征简单的描述。如图2所示。训练时,将每一个特征在训练子窗口中进行滑动计算,获取各个位置的各类矩形特征,位于同一位置的不同矩形特征,属于不同的特征。特征数只和子窗口大小有关,一副24×24的图像,矩形的特征数量就有约160 000个,由此可见Haar特征的多样性。

图2 Haar特征及Haar特征多样性Fig.2 Features and it's diversity of Haar

Viola P和Jones M提出的积分图像法[8-9]可以快速计算Haar特征的特征值,简化了Haar特征值计算过程涉及到的很多内部像素的求和操作,大大提高了训练效率。在计算出Haar特征值之后,用Boosting算法将弱分类器组合成为一个强分类器,用于目标检测。

2.2 人脸、眼睛检检测定位

本文的疲劳检测方法把人脸检测作为图像处理部分的第一步骤,为之后眼睛和嘴的检测和处理缩小了检测区域,有效的减小了计算量。实验中使用的图像为笔记本电脑摄像头在不同背景下采集的图像序列,用基于Haar特征的Adaboost算法进行检测的部分结果如图3所示。

图3 人脸、眼睛检测和定位结果Fig.3 Result of face and eyes detection

由人体头部的生理结构可知,眼睛位于人脸的上半部分,则在进行眼睛检测和定位的过程中,只对人脸图像的上半部分进行检测,可以有效缩短检测时间。

2.3 局部搜索确定二值化的分割阈值

大多数疲劳检测系统用人眼的睁开和闭合作为判断驾驶员是否疲劳的标准,但驾驶员在某些疲劳的状态下,眼睛并没有完全闭合,而这样就容易产生误判。文中用于检测人眼的分类器选用Opencv提供的分类器,能够识别各种状态的人眼,然后再针对检测到的人眼图像进行二次判断。

由人眼的结构特征可知,睁眼和闭眼的一个明显的区别在于眼球可见部分轮廓的大小,睁眼时为最大,闭眼时则完全消失,图4给出了处于不同睁眼状态时眼球的比对示意图。

图4 睁眼时的不同睁眼状态Fig.4 Different states when eyes open

由图4可以看出,人眼图像的灰度值分布存在一定特征,眼睑边缘和眼球部分的灰度值要远小于人眼其他部分。因此,眼睑边缘轮廓和眼球虹膜轮廓可以很容易被分割出来。文中采用基于局部搜索的自动阈值分割法,即用自适应大小的正方形模板窗口对图片进行遍历,计算模板的平均灰度值,找到最小值,则认为是黑眼球部分的平均灰度,作为二值化分割的阈值。在人眼检测标定的图片中,眼球的直径约等于人眼图片高度的1/3,则模板大小即为人眼图片高度的1/3。当睁眼过小即眼球可见部分变小,模板遍历到最小值的区域变为眼角部分,但随着眼白部分的减小,也可以把眼睑边缘分割出来。图5给出了局部搜索自动阈值分割后的人眼二值化图像。

图5 局部搜素自动阈值分割后的人眼二值化图像Fig.5 Binary image after local template searching and segment

2.4 快速Hough圆检测判定人眼睁开状态

得到二值化分割后的人眼图像后,需要提取虹膜的外轮廓。一般二值化后的图像会有部分眼角区域,可以通过边缘检测寻找最大轮廓,即为虹膜的轮廓。快速Hough圆检测的核心思想是:圆上任意两点连线的中垂线都会经过圆心,中垂线公式:

其中(x1,y1),(x2,y2)为圆上的两点,k 为这两点所在直线的斜率。

如果对检测到的眼球轮廓上的每两点连线求中垂线,计算量太大,本文选定眼球轮廓上最具特征的3个点:左边缘点、下边缘点和右边缘点,求得3个点连接成3条线段的中垂线的交点,求平均坐标点作为圆心,然后半径为圆心到3个点的距离的平均值,继而重绘出整个圆。快速Hough圆检测结果如图6所示。

图6 快速Hough圆检测结果Fig.6 Results of fast hough circle detection

快速Hough圆检测后,得到重绘圆的轮廓,用参数γ来判定人眼的睁开状态。

其中,areaeye是眼球轮廓面积,areacircle是重绘圆面积,γ越接近1,则人眼睁开越大,反之则越小,一般认为当γ<0.5的时候,判定驾驶员处于疲劳状态。

对于闭眼或者睁眼过小(即眼球可见部分很小)的情况,此时求出的圆点坐标在检测出的轮廓的上边缘点上方,则跳过公式(3)的计算,直接判定为疲劳状态。

3 打哈欠检测

打哈欠作为疲劳最直接的表现形式,在本文中被用来作为疲劳检测的一个标准。然而不同人打哈欠时嘴的张开程度也会有不同,特别是在说话或者发出吃惊等一些表情的时候,嘴都会张开,对判定结果产生影响。为了解决误判问题,文中使用基于Haar特征的Adaboost算法训练分类器,实现嘴的正常状态和张嘴状态的区分,再针对区分结果实现二次处理,计算嘴的张开程度,判定是否处于疲劳状态。

文中选取打哈欠及各种张嘴时的嘴部图像为正样本,选取脸部其他部分图像为负样本,正样本和负样本图像均从网上搜索得到,正样本图像250张,大小统一缩放为24×24,负样本图像550张,部分样本图片如图7所示。

图7 部分正负样本图像Fig.7 Part of the positive and negative sample images

训练分类器使用Opencv提供的opencv_haartraining.exe训练程序得到分类器描述文件。由于嘴位于人脸的下半部分,所以搜索区域可缩小至人脸下半部分,节省搜索时间。检测完成得到打哈欠(或张嘴)的图片,则再用局部搜索确定二值化分割阈值,把嘴的轮廓分割出来。为判断嘴的张开程度,我们同样在轮廓上取最具代表性的4个点:上下边缘点和左右边缘点,通过计算轮廓的外接矩形的宽高比来判定是否为打哈欠状态,一般认为当宽高比大于1.5的时候处于疲劳状态。

图8 打哈欠的检测结Fig.8 Result of yawn

4 实验结果

测试使用笔记本电脑集成摄像头采集的1 000张驾驶员头部图像作为实验测试图像,统一大小为640×480,测试电脑配置 CPU Core i5系列,主频 2.3 GHz,内存4G,得到的实验结果表1所示。

表1 实验结果Tab.1 Test result detection

由实验结果可以看到,判断准确率达到了92.6%,可以满足实际驾驶中疲劳检测的要求。

5 结束语

文中用基于Haar特征的Adaboost算法对人脸和人眼位置进行快速定位,然后针对人眼图像应用基于局部模板搜索的自动阈值法进行二值化分割,再根据快速Hough圆检测法判定睁眼和闭眼状态,同时增加了打哈欠的判定,用两种标准判断驾驶员的疲劳状态,增加了整套检测方法的准确性。经过实验测试表明,本方法简单、快速且有着很高的准确性,为驾驶员疲劳检测的实时应用打下了良好的理论基础。

[1]马天翼,成波.基于面部表情的驾驶员疲劳状态识别[J].汽车安全与节能学报,2010,1(3):200-204.

[2]唐琎,许海柱,王力炳.图像中人眼检测技术综述[J].计算机应用研究,2008,25(4):961-965.

[3]唐琎,李青.一种快速的模板匹配算法 [J].计算机应用,2010,30(6):1559-1564.

[4]方君院,陆玲.基于灰度投影的眼睛定位研究[J].湖南农机:学术版,2011,38(1):142-143.

[5]Fok Hing Chi Tivive,Abdesselam Bouzerdoum.A hierarchical learning network for face detection with in-plane rotation[J].Neurocomputing,2008,71(16):3253-3263.

[6]徐欢,高雁凤,郑恩辉,等.一种用于驾驶员疲劳检测的人眼检测方法[J].计算机工程.2013,39(9):254-257.

[7]李绍文,王江波.驾驶员疲劳监测系统的研究[J].计算机工程与应用,2013,49(15):253-258.

[8]Paul Viola,Machael Jones.Robust real-time object detection[J].International Journal of Computer Vision.2004,57(2):137-154

[9]Paul Vioal,Machael Jones.Rapid object detection using a boosted cascade of simple feature[J].IEEE Computer Society Conference on Computer Vision and Pattern Recognition.2001(1):511-518.

猜你喜欢

人眼眼球轮廓
抓人眼球
抓人眼球
OPENCV轮廓识别研究与实践
基于实时轮廓误差估算的数控系统轮廓控制
如何在1分钟之内抓住读者的眼球
人眼X光
人眼为什么能看到虚像
高速公路主动发光轮廓标应用方案设计探讨
闪瞎人眼的,还有唇
看人,星光璀璨缭人眼