当前位置:首页 >> 信息与通信 >>

基于MATLAB的人眼检测


目录
摘要................................................................ I ABSTRACT........................................................... II 1 绪论.......................................

....................... 1 1.1 研究背景及意义 .............................................. 1 1.2 国内外疲劳驾驶研究现状 ...................................... 2 1.3 本文的主要研究内容及组织结构................................. 3 2 人脸检测与定位技术................................................ 4 2.1 人脸检测与定位技术概述....................................... 4 2.1.1 基于图像的人脸检测方法 ................................. 4 2.1.2 基于特征的人脸检测方法 ................................. 5 2.2 Adaboost 算法介绍............................................ 6 2.2.1 AdaBoost 算法描述...................................... 7 2.3 AdaBoost 算法分类器......................................... 10 2.3.1 分类器级联策略........................................ 10 2.3.2 级联分类器误差分析.................................... 11 3 人眼定位技术..................................................... 12 3.1 常见的几种人眼检测方法 ..................................... 12 3.2 矩形特征及积分图 ........................................... 14 3.2.1 矩形特征.............................................. 14 3.2.2 积分图................................................ 15 3.3 AdaBoost 算法的改进......................................... 16 3.4 构建双层 AdaBoost 分类器进行人眼检测 ........................ 18 3.4.1 人脸定位与人眼定位的差异.............................. 18 3.4.2 人眼定位预处理........................................ 19 3.4.3 人眼定位双层分类器的构建.............................. 20 3.5 人眼定位算法的设计与实现 ................................... 20 4 人眼状态识别..................................................... 21 4.1 基于椭圆拟合的人眼状态分析 ................................. 21 5 基于 PERCLOS 标准的疲劳状态分析................................... 23 5.1 PERCLOS 方法介绍............................................ 23 6 总结............................................................. 25 参考文献........................................................... 26 附录 A ............................................................. 28

摘要
随着汽车工业的不断发展,随之而来的社会问题也愈加严重。交通事故给人 们造成巨大伤害的同时,也给社会带来沉重的负担和影响。由于疲劳驾驶是引起 交通事故的一个主要原因。因此,研究一种合理有效、实时准确检测驾驶员疲劳 驾驶的非接触式车载装置对于减少交通事故,道路安全有重大意义。 本文研究的主要内容包括: 人脸检测、 人眼定位、 眼睛特征提取和状态识别、 疲劳程度的计算等算法的原理及实现。 首先详细阐述了经典的 AdaBoost 算法, 该算法涉及的内容包括 Haar-Like 特征,弱分类器,级联的 AdaBoost 分类器等。然后利用 AdaBoost 算法进行人 脸检测。 虽然 AdaBoost 算法的检测速度快,误识率低,但是在样本的权重更新过程 中,对于分类错误样本中的正、负样本没有加以区分,不利于提高正样本的识别 率。本文提出一种新的权重更新方法,对于分类错误的样本,对判断错误的正样 本给更高的权重, 使得算法在下一轮迭代时,更加关注对分类错误的正样本的学 习,从而提高对正样本(人眼)的检测率。采用基于最小二乘法对眼部的外轮廓 进行椭圆拟合, 根据拟合椭圆的参数来判断眼睛的睁闭状态;采用结合 PERCLOS 和眨眼频率的方法,对疲劳状态进行检测。

关键词:疲劳检测,AdaBoost,人眼定位,PERCLOS

I

Abstract
With the development of the automobile industry continuously, the social problems are more and more severe. The traffic accidents not only cause great harm to thepeople,but also bring heavy burden and effect to society. Because fatigue driving is a major reason that caused traffic accidents. Therefore, research a reasonable and effective real-time and non-contact device due to the detection of driver fatigue driving has great significance for reducing traffic accidents and raising road safety. In this paper, the main research contents are face detection, eye location, eye feature extraction, principle and realization of the calculation of fatigue’ degree. Firstly, the classical AdaBoost algorithm is produced in detail. which involves Haar-Like features, weak classifier,cascade AdaBoost classifier, etc. Next, face is detected based on AdaBoost algorithm. Although the AdaBoost algorithm with a low false positive rate is fast, there is nodistinction between samples of error classification in the procedure of weight updating,which ignores hit rate of positive samples. In this paper, a new method of weightupdating is proposed to improve the hit rate of positive samples, which pays moreattention to positive samples of error classification.After the region of driver’s eyes is obtained, the ellipse fitting algorithm based onleast squares method is used to fit the eye contours, and the eye state is identifiedaccording to parameters of ellipse. Then, the fatigue state could be detected based onPERCLOS and blink frequency.

Keywords: fatiguedetection, AdaBoost, eye location, PERCLOS

II

1 绪论
1.1 研究背景及意义
所谓的疲劳驾驶,是指驾驶员在长时间持续驾驶或睡眠不足情况下而造成的 反应能力下降,其主要表现在驾驶员困倦、驾驶操作反应迟钝或完全丧失驾驶能 力。 因疲劳驾驶而在全球每年导致数以万计的交通事故和大量人员伤亡。据公安 部交通管理局数据,2010 年全国共接报道路交通事故 3906164 起,同比 2009 年 上升 35.9%。其中,涉及人员伤亡的道路交通事故 219521 起,造成 65225 人死 亡、254075 人受伤,直接财产损失 9.3 亿元。其中疲劳驾驶被列为超速行驶,酒 后驾车之后的第三大引发道路交通事故原因。 引起驾驶员疲劳驾驶的原因除上述 的睡眠不足、长时间持续驾驶外,还与工作性质与时间、人的生理周期、酒精以 及药物,乃至不同人的生活习惯、身体状况、年龄差异有关;另外,即使驾驶员状 态良好或者在注意力高度集中的情况下,如果面对景色单一的高速公路,也容易因 公路催眠而产生驾驶疲劳,从而导致自我控制能力减弱、判断迟缓、动作僵硬、 视力下降、 注意力分散以及视野变窄等不良反应从而发生交通事故疲劳驾驶作为 引发道路交通安全事故的重要原因,越来越引起人们的重视。 由此可见,疲劳驾驶是一个比较严峻的问题,主要是由于它的隐蔽性很强, 疲劳驾驶的发生很难预测和判定。因此,当驾驶员刚出现疲劳症状时,如果能发 出预警,或者自动降低车速甚至强制其停车休息,则可以有效地加强行车安全, 减少由于疲劳驾驶所引起的交通事故,避免因此产生的经济损失和人员伤亡。在 过去的几十年中, 国内外专家和学者都在积极研究疲劳驾驶,对疲劳检测的方法 也做了各方面的探索,在一定程度上取得了很大的进步,但在实际应用过程中, 还存在较多的问题,因此,如何及时有效的检测出驾驶员的疲劳程度,减少因疲 劳驾驶而引发的交通事故已经成为当前智能运输系统的研究热点。 为了降低因疲 劳驾驶导致的交通事故发生率和人员伤亡数量,降低人为因素导致的交通安全隐 患,本文对人眼疲劳值算法进行了研究。

1

1.2 国内外疲劳驾驶研究现状
目前国外的许多国家都对汽车安全方面投入了大量的资金, 用来解决交通安 全的问题。 许多高校和科研机构也都在该方面进行了大量的研究,并取得了丰硕 成果。 日本一家公司利用装置在驾驶员头部上方的传感器来判定司机头部位置。 传 感器利用驾驶员头部与其之间的距离计算并跟踪头部在三维空间当中所处的位 置,然后依据不同时间下驾驶员头部产生的位移变化判断其是否处于疲劳状态。 利用装置在方向盘上的心跳感应器来检测驾驶员的心跳速度, 该系统每隔一段时 间检测一次, 当司机处于疲劳状态时心跳速度减慢,因此可以简单易行的判断出 驾驶员是否处于疲劳状态。 英国科学家为司机研制的防瞌睡报警系统, 可以监视司机开车时的眼睛和肌 肉运动,大脑活动及心率等,如发现异常,系统能及时发出报警。 美国研制的疲劳检测系统 DDDS(The Drowsy Driver DetectionSystem)。此 系统采用多普勒雷达和复杂的信号处理方法获取驾驶员烦躁不安的情绪活动、 眨 眼频率和持续时间等疲劳数据, 判断驾驶员是否处于瞌睡状态。该系统可以做成 一个比较小的装置,放在驾驶员头顶上方,或头顶前方某个地方,以免影响驾驶 员的驾驶。 2005 年,澳大利亚的研究人员推出一款眼镜,通过内置于眼镜中的红外线传 感器监测司机的眼睑活动和眨眼频率,并据此判断司机是否疲劳。 国内在人脸识别技术和驾驶员疲劳检测的研究方面起步较晚, 相关技术还不 成熟, 同发达国家相比还有很大的差距,但一些高校和研究机构还是投入了大量 的精力进行研究, 经过几十年的努力,在驾驶疲劳检测方面也取得了一系列的成 果。江苏大学也在研究 PERCLOS 算法的基础上,设计出一套系统,该系统使用 波长为 850/950mm 的红外图像仪及差分图像仪作为图像采集器,由于利用红外 光源成像,排除了环境光源的干扰,提高了装置的适用性, 满足各种驾驶情况下对 驾驶员状态的监测要求,同时可以得到关于关键部位(眼部)的差分图像,提高 了系统的实时处理能力,有一定的实用价值。

2

1.3 本文的主要研究内容及组织结构
本文主要研究了人脸检测和人眼定位基础上的疲劳驾驶检测方法,重点研究 了快速的 Adaboost 人脸检测算法,Mean-shift 眼睛跟踪算法,主要目的是在经典的 人脸检测和定位算法的基础上寻求一种改进的算法从而提高疲劳驾驶检测的实 时性和准确性。具体工作如下: (1)研究并实现了对于静态图像和视频流中快速的人脸检测定位的问题。采 用经典的 Adaboost 算法实现了人脸的快速检测定位,该方法对于单个图像的检测 率非常高且耗时很少,满足疲劳驾驶检测对于实时性的要求。 (2)研究并实现了基于 Mean-shift 算法的人眼实时跟踪方法。 通过在人脸检测 基础上眼睛粗定位的基础上,用灰度和颜色分布来表示人眼,将颜色的直方图作为 特征,实现了人眼轮廓的快速的实时跟踪定位。 (3)研究实现了眼睛特征提取和状态识别的算法,通过对人眼内外角点分别进 行检测定位和对人眼上眼睑中间点的定位,拟合上眼睑的轮廓曲线,利用上眼险与 人眼内外眼角点连线之间的距离实现了对眼睛状态的量化分析。 (4)结合 PERCLOS 标准和泛眼频率实现对疲劳状态的判决。 本文共分为六章: 第 1 章: 主要介绍了疲劳驾驶检测课题的研究背景和研究现状以及发展趋势 和难点问题。 第 2 章:对经典的 Adaboost 人脸检测方法进行详细阐述,并利用该方法实现 快速的人脸检测定位,并介绍利用其进行疲劳驾驶检测。 第 3 章:首先介绍了常见人眼定位方法,分析了各自的优缺点,再具体阐述 了 AdaBoost 算法采用的 Haar-Like 矩形特征, 然后分析了 AdaBoost 算法的一些 不足,给出了改进方案,最后提出采用人脸检测—人眼定位的双层 AdaBoost 分 类器进行人眼检测。 第 4 章:研究实现了眼睛特征的提取和状态的识别。 第 5 章:人眼状态的识别和疲劳判定模块,利用 PERCLOS 和眨眼频率对 驾驶员进行最终的疲劳判定,达到对疲劳驾驶的预警提示。 第 6 章:对本文进行了总结与展望,对本文所做的工作进行总结。

3

2 人脸检测与定位技术
对于人眼疲劳检测的研究,首先要检测到人脸,在此基础上提取眼睛的状态 参数作为特征信息来实现。因此疲劳驾驶检测基础是人脸以及人眼的检测定位, 人脸检测旳方法有很多,使用特定的硬件设备,采用红外照明,可以直接检测出睛 孔的准确位置,从而定位出眼睛,进行后续的测量;其次可以先通过检测出人脸, 减小图像中的搜索范围,再对检测的人脸区域进行搜索,找出眼睛的位置。 前一种 利用硬件定位虹膜的方法,一旦眼睛识别失误,系统将不能运行,而后一种方法, 只要准确的检测出人脸,就可以定位人眼的位置。 本文采用先检测出人脸的位置, 然后在人脸区域进行眼睛定位的方案。

2.1 人脸检测与定位技术概述
人脸检测是指在不同的背景条件中检测出人脸的所在, 并将其从背景中分割 出来,确定出其位置。此过程主要受光照、噪声、头部摆动以及其他外部条件的 影响。人脸检测是我们进行疲劳驾驶检测的第一步也是基础,只有准确的检测定 位出图像中人脸的准确位置,才能进行后面的工作。而在实际生活中人脸检测常 用于门禁系统、图像检索、人机交互等方面。人脸检测的基础是建立人脸模型, 先遍历所有的待检测区域后与所建立的人脸模型的进行匹配,之后得到可能存在 人脸的区域。目前主要的人脸检测方法可以分为两大类,基于图像的人脸检测方 法以及基于特征的人脸检测方法。前者属于一般的模式识别问题,将待检测图像 作为人脸检测的输入,不需要对图像进行特征提取以及处理,直接进行训练后将样 本分为人脸和非人脸两种类别,而后进行人脸检测:后一种方法需要提取人脸的各 种特种,例如肤色信息、人脸的轮廓结构、表情信息等,这一种方法是大部分人脸 检测所采用的方法,采用经典的模式识别算法来实现。

2.1.1 基于图像的人脸检测方法
基于图像的人脸检测一般不考虑图像的先验知识,不需要对图像进行特征提 取和处理, 直接将图像作为系统的输入 ,利用一般的模式识别算法进行训练 , 将样 本图像分类为人脸类和非人脸类,而后将训练得到的人脸类和待检测区域进行匹
4

配,进行人脸检测。常见的基于图像的人脸检测方法有线性子空间法、神经网络 法、统计法等。 1.线性子空间方法 可以将人脸图像看成处于整幅图像的一个子空间中。 通常用神经学的方法表 示子空间,也可以用诸如主元分析以及线性判定分析等方法来表示。 2.神经网络方法 神经网络方法是解决模式识别问题的重要方法,也经常被用来解决人脸识别 问题。其通过训练过程中样本进行自学习,具有一定的自适应性和鲁棒性,避免了 特征提取的环节,节省了运算时间。 3.统计法 除以上两类统计方法外。 还有基于贝叶斯决策方法的人脸检测和基于支撑矢 量机方法的人脸检测方法。

2.1.2 基于特征的人脸检测方法
1.特征分析的方法 常见的有两种方法,其一将单个人脸特征的相对位置作为基础,进行序列特征 搜索;其二利用各种常见的人脸模型将人脸特征分类,建立不同的群类。例如,特征 搜索法和构象分析法就属于这种方法。 2.利用活动模型的方法 所谓的活动模型是指模型本身是一种真实的身体特征。 活动模型同局部特征 相互作用 , 最终逐渐的将形成所要检测特征的形状。当前常用的活动模型主要 有:Snake 模型点的分布模型以及变形模型它就会同局部特征相互作用,利用活动 模型解决人脸定位问题是近年来比较流行的方法。 3.底层分析的方法 底层分析主要指对图像的边界、灰度、颜色、尺寸等信息进行分析比较,得 到所需要的检测特征。由于基于特征的人脸检测一般都考虑图像的先验知识,基 于图像边界的检测方法通过结合人脸图像尺寸的先验知识,对边界进行处理,提取 角点及其边缘点,舍去那些突起的点,对整个图像进行搜寻后进行匹配确认。观察 一个人的脸部图像,会发现眼睛、眉毛、嘴唇等处的灰度变化较之脸部的其他地
5

方灰度要小。利用这样的性质,可以通过基于灰度信息的方法进行人脸检测,如通 过水平方向和垂直方向的积分投影来定位眼睛和眉毛的位置,进行眼睛的检测以 及定位。

2.2Adaboost 算法介绍
分类是模式识别检测的关键,人们都希望研究出精度很高的机器学习算法。 机器学习算法可以粗略的分为强学习算法和弱学习算法。 强学习算法准确率很高, 但是往往结构复杂,计算开销很大,与算法本身的质量相比,成本过于庞大,难 以在实际生活中得到广泛的应用;弱学习算法结构简单,但准确率不高,仅比随 机猜测略好。一个自然的想法就是能否将弱学习器“提升”或“集成”为强学习 器呢? Schapire 最初提出的 Boosting 算法就是在这种思想下建立和发展的。 Boosting 算法是一种基于简单有效分类策略的机器学习方法,是集成学习的核 心内容和研究热点。 Boosting 是推助、提升的过程,它是将一系列比随机猜测 略好的弱分类器加权组合为强分类器的算法。 Boosting 这种特性受到了越来越 多学者的重视,成为图像处理等领域的研究热点之一。 AdaBoost 算法最早起源于 Schapire 在 1990 年提出的 Boosting 算法, 它是 一种能够提高任意给定学习算法准确率的方法。AdaBoost 算法的基本思想是利 用大量的分类能力一般的弱分类器(Weaker Classifier)通过一定的方法叠加(Boost) 起来,构成一个分类能力很强的强分类器(Stage Classifier),再将若干个强分类器 串联成为级联分类器 (Classifier Cascade) 完成目标的搜索检测。本文就是利用 AdaBoost 算法将由 Haar-Like 特征生成的弱分类器叠加成为强分类器, 再将强分 类器串联成为级联分类器, 进行人眼检测。 在众多的 Boosting 算法中, AdaBoost 算法因其有以下优点而被广泛使用: (1)算法速度快; (2)不需要知道任何关于弱分类器的先验知识; (3)对弱分类器的性能要求不高,只需要比随机猜测性能稍好即可,这种弱 分类器在实际情况下很容易获得,从而降低了算法的复杂度,提高了效率; (4)在弱分类器的构成上可以兼容多种方法,这些弱分类器可以是神经网络、 决策树、最近邻域分类器、经验规则等;
6

(5)训练数据可以是文本、数字、离散值等,并且 AdaBoost 算法很容易被推 广到多类目标的分类问题中去。

2.2.1AdaBoost 算法描述
根据假设第 i 个训练样本在第 t 次迭代时分布权重为ω(t, i),初始化时所有 权重归一化ω(t, i)=1/m,m 为样本数,然后调用弱学习算法进行 T 轮迭代,在 每一轮的迭代中,弱学习算法的目标就是根据训练样本的权重ω(t, i)产生一个弱 分类器 ht 最简单的情况就是二值分类问题,即 ht : X → ?1, +1 分类器性能的好 坏由εt 其误差率决定。

?j ?

每次迭代后按训练结果更新样本的分布, 对训练误判的样本赋予较大的权重, 也就是让学习算法在后续的学习过程中关注于这些分类困难的样本, 再对重新分 布的训练集进行学习。 T 次训练结束后, AdaBoost 算法得到一系列弱分类器 h1 , h2 ,…, ht 并给每个弱分类器赋予一个权重α1 ,α2 ,…,αt 表示该弱分类器的重要性。 AdaBoost 算法是一种迭代方法,它是通过改变数据分布来实现的。它根据 每轮训练中每个样本的分类是否正确,以及上轮的总体分类准确率,来确定每个 样本的权重,然后将每次训练得到的分类器融合起来,作为最后的决策分类器。 在 AdaBoost 算法中,每一个训练样本都被赋予一个权重,表明它被某个弱分类 器选入训练集的概率。 如果某个样本没有被正确的分类,那么在构造下一个训练 集时,它被选中的概率就会增加;相反,如果某个样本已经被正确的分类,那么 在构造下一个训练集时,它被选中的概率就会降低。通过这样的方式,AdaBoost 算法能够“聚焦于”那些较困难的样本上。在具体的实现时,最初令每个样本的 权重都相等,对于第 t 次迭代操作,就根据这些权重来选取样本,进而训练分 类器ht 。然后就根据这个分类器,来提高被它错分的那些样本的权重,并降低被 正确分类的样本权重。 然后, 权重更新后的样本集被用来训练下一个分类器ht+1 。 整个训练过程如此循环下去。 理论证明:若每个弱分类器的分类能力比随机猜测 好,那么当弱分类器的个数趋向于无穷时,强分类器的错误率将趋近于零。 对于二值分类问题, 已知训练样本集(x1 , y1 ),…,(xm , ym ),xi ∈ X,yi ∈ ?1, +1 , 待分类样本有 k 个简单矩形特征, 表示为fj xi ,其中1 ≤ j ≤ k。 对于第 i 个样本x1 ,
7

h j ? xi ?? yi

?

? ? t , i ? ? ?? ? t , i ? h j ? xi ? ? yi
i ?1

n

(2.1)

它的特征为f1 xi ,f2 xi ,…,fk xi , 对每一个输入特征fj 有一个简单的二值弱类器。 第 j 个特征的弱分类器由一个阈值θj 、一个特征fj 和指示不等式方向的偏置pj 构 成 hj x = +1 ?1 if pj fj < pj θj else (2.2)

可以看到, 一个较低的阈值可以产生一个高检测率的分类器,但它的误识率 也相应很高;相反,较高的阈值可以产生一个低检测率、低误识率的分类器。 AdaBoost 算法构建强分类器的具体过程如下: (1) 对所有样本初始化权重。
1 ω 1, i = m

(2.3)

(2) 经过 T 轮迭代训练,挑选出 T 个弱分类器组成强分类器。 (3) 最后得到的强分类器为 H x = 1 0

??t ht ? x ? ?
t ?1

T

1 T ?? t 2 t ?1

(2.4)

else

1 其中 ? t ? ln ?t 为弱分类器的投票加权重。 2

以上过程的意义可以简单的表述为: 每一轮迭代过程在当前的概率分布上找 到一个具有最小错误率的简单分类器,然后调整概率分布,增大当前简单分类器 分类错误的样本的概率值, 降低当前简单分类器分类正确的样本的概率值,以突 出分类错误的样本,使下一次迭代更加针对“困难”的样本,使得那些被错分的 样本到进一步重视, 后面训练得到的新的简单分类器就会更加强化对这些分类错 误样本的训练, 这样经过多次迭代之后,产生的每一个新分类器基本上可以解决 已有分类器不能很好分类的样本。从而得到一个弱分类器序列,每个弱分类器赋 予一个权重,分类效果好的相应权重就大。T 轮迭代后,最终的强分类器采用带 权重的投票法产生。图 2.1 给出了 T 轮 AdaBoost 算法的流程图。

开始
更新样本权重

8

给定训练样本(x,y) x1ht ,y) 初始化样本权重ht 置 t=0 N t<T? Y 计算弱分类器hj (x)的加权错误率 εj = n i=1 w t, i |hj xi ? yi |

遍历所有分类器, 找出一个 具最小错误率的简单分类 器ht ,t=t+1 t ,t=t+1 更新样本权重

权重归一化

获得强分类器

结束
更新样本权重

图 2.1AdaBoost 算法流程图

9

2.3 AdaBoost 算法分类器
由 AdaBoost 算法的收敛性能分析可以看出,通过增加 AdaBoost 算法中迭代次数 T 可 以使得最终强分类器的分类误差尽量的小。然而,随着 T 值的增加,强分类器中所包含的 弱分类器的数目也不断增加, 就使得检测过程中的计算量增加。 例如利用一个具有数百个弱 分类器组成的强分类器进行检测的时候, 需用所有的弱分类器对图像的每一个子窗口都检测, 这大大的降低了检测的效率,因而很难达到实时应用目的。为了减少计算时间,提高检测效 率,可以构造分层的分类器,其主要思想是:设计一个规模小的、效率高的、逐步渐进的分 类器,使得该分类器在搜索过程中能拒绝大多数的负样本。这种设计是逐级提高检测精度, 前面几级使用的特征数目较少,结构较简单,主要进行非目标的排除,后面的弱分类器特征 数目越来越多,检测精度越来越高,由于需要检测的子窗口越来越少,从而能够显著地提高 检测的速度,以满足实时系统的要求。

2.3.1 分类器级联策略
一个典型的 Adaboost 训练算法可以被简单的看成是对特征进行贪心选择的 过程。一个简单的 boosting 问题包含了非常多的弱分类器,这些弱分类器通过 加权投票被组合在一起,经过 T 次迭代后,获得了 T 个最佳弱分类器,当这个强 分类器对一幅图像待检测时, 相当于让构成该强分类器的所有弱分类器投票,再 对投票结果按照弱分类器的错误率加权求和, 将投票加权求和的结果与平均投票 结果比较得出最终的结果。
输入人脸样本

第一级联分类器

第一级联分类器

第一级联分类器

进一步检 测

被排除的样本

图 2.2 多分类器级联结构

10

2.3.2 级联分类器误差分析
由级联分类形式和构造过程可看到,对于一个已经训练好的级联分类器,它 的误识率是:
F ? ? fi ?
i ?1 N

(2.5)

检测率是: ? D ? ? di
i ?1 N

(2.6)

N 为分类器的层数, f i 是每层分类器的误识率,d i 是每层分类器的检测率。 由以上两个公式可以看出, 整体的检测率和误识率可以通过设定多层分类器的各 个阶段的检测率和误识率来达到。比如最终检测率 0.9 可以用 10 层,每层的 检测率为 0.99 的分类器得到 0.9≈ 0.9910 。 每层的检测率相当容易达到。 而每一 层的检测率和误识率在该层分类器的学习过程中达到, 如果该层分类器不能够排 除足够的反例, 则增加分类器的个数并重新进行分类器的学习直到达到要求为止。 同时可以发现,如果增加级联的层数,虽然能够减小误识率,但是相应的检 测率也会降低,使得许多正样本被错误剔除,而且还会增加检测的时间,因此不 可能无限的增加级联分类器的层数。另外,由式(2.2)可以看出,适当的降低阈值 能够提高检测率, 但同时仍然会增大误识率,因此无论是增加级联分类器的层数 还是降低阈值,都无法同时提高检测率而又降低误识率。这也是制约 AdaBoost 算法在疲劳检测系统中应用的一个重要问题。针对这个问题,将会在第 3 章中 进一步讨论。

11

3 人眼定位技术
在第 1 章中讲到,采用 PERCLOSE 原理的疲劳驾驶检测方法,关键是能 够准确判断出驾驶员眼部的睁闭状态, 但是在这之前还要能够在图像中准确定位 出驾驶员的眼睛区域的位置, 所以在驾驶员疲劳识别中,人眼的定位和状态识别 是基于 PERCLOSE 的疲劳检测方法的关键步骤。 在整个驾驶员疲劳检测系统中为了能够准确的检测到眼睛区域, 可以采用先 确定人脸区域,然后在人脸区域内进一步检测、定位人眼的方法,这样可以使得 眼睛的检测与定位相对准确一些。因为同一个人的人脸和眼睛相比较,人脸拥有 更多的信息量, 检测人脸相对于定位眼睛会更容易更准确。识别出人脸区域有利 于缩小眼睛定位的范围,避免被背景图像所干扰。不仅如此,研究人脸定位的意 义还在于,人脸定位的技术也可以同时给眼睛定位提供参考。图 3.1 是利用人 脸识别的驾驶员疲劳检测流程图。
人眼 状态 识别 PERC LOS 计算

视频 采集

人脸 定位

人眼 定位

疲劳 判断

图 3.1 运用人脸识别的驾驶疲劳检测系统图 本系统首先从视频帧中提取出人脸,再在人脸区域上搜索人眼,进行眼睛区 域的定位。 由于人脸检测和人眼检测的实现原理基本一致,因此本章接下来将主 要以人眼检测为例进行阐述。本文使用 Haar-Like 特征作为分类特征,该特征可 以利用积分图像进行快速计算, 最后将训练得到的弱分类器进行组合就得到了最 终的分类器。

3.1 常见的几种人眼检测方法
人脸识别一直是计算机视觉研究的热点和难点, 眼睛作为脸部特征的重要组 成部分,往往被研究人员作为一种人脸识别中重要的依据。一种快速、准确的人 眼检测算法不仅可以提高检测和识别的速度,还能够降低识别算法的复杂度,提 高人脸检测的实时性, 而且在基于视觉的疲劳检测领域中,通常利用人眼信息来

12

判断驾驶员的疲劳程度,从而发出警报,提醒驾驶员。因此,人眼检测对于疲劳 检测后续的眼部状态识别和疲劳判断至关重要。目前,人眼定位主要有基于几何 特征、基于模板匹配、基于统计学习的方法。 基于几何特征的方法: 人眼在脸部中位置特征较为明显,如眼睛在人脸中的 位置和两眼间的距离一般是一个固定的常数。正常情况下,人眼具有明显的对称 性、眼睛与其他人脸局部特征(如眉毛、鼻子)的相对位置、人眼特定的几何形状 都可以用来对人眼进行定位。 虽然基于几何特征的人眼检测方法,充分利用了人 脸面部的几何特性, 对一些背景简单的正面人脸图像具有较好的检测效果,但这 种几何特性对人的姿态和光照要求很高, 仅仅使用这种法难以获得理想的检测效 果。因此,基于几何特征的方法,一般是作为一种辅助方法与其他方法结合进行 人眼定位。 基于模板匹配的方法:该方法将眼部模型进行函数参数化,在检测时,在图 像搜索区内逐点平移眼睛参考模板图像, 根据某个相似性准则来计算待检测图像 某一位置区域和参考模板的相关值,然后根据相关值来判断此区域是否人眼,相 关值在设定的标准内就判定该区域为人眼,否则非人眼。模板匹配的方法对背景 比较简单、 脸部特征较规整的图像能够进行有效的人眼检测,但是该方法计算量 大,实时性差,而且由于眼睛的个体差异性,所建立的模板很难满足不同人眼的 需求,导致检测结果不是最优,在通用性方面受到了很大限制。 基于统计学习的方法: 该方法通过对大量人眼样本和非人眼样本进行训练学 习得到一组模型参数,根据模型来构建人眼分类器。在使用时,利用训练好的分 类器对输入图像逐区域进行扫描完成人眼检测。这种方法具有较高的准确率,已 越来越多的进入人眼检测的研究和应用中。在众多的统计方法中,以 AdaBoost 算法应用最为广泛,该方法鲁棒性好、漏检率较低,虽然计算量很大,但是在实 际检测中采用 Haar-Like 特征和级联的结构,使检测速度大大提高。 在驾驶疲劳检测系统中最为关键的要求是非接触式、实时性、高准确率。考 虑以上方法的特点,为解决眼睛定位的实时性、准确性问题,本文采用较为成熟 的基于统计学习方法中的 AdaBoost 算法进行驾驶员人脸检测和人眼定位。

13

3.2 矩形特征及积分图
Viola 等在 2001 年提出一种基于 Boosting 方法的实时人脸检测系统,该系 统的检测速度可以达到每秒 15 帧,实时检测速度及检测准确率表现优异,这是 人脸检测从研究走向实用的一次质的飞跃。 他们对人脸应用积分图方法计算矩形 特征,用其得到的结果训练分类器。

3.2.1 矩形特征
(1)Haar-like 特征 Haar-like 特征是 Viola 等提出的一种简单矩形特征,因其类似于 Harr 小 波而得名。Haar-like 特征的定义是黑色矩形和白色矩形在图像子窗口中对应的 区域的灰度级总和之差,可见,它反映了图像局部的灰度化。Viola 等用到的 Haar-like 特征总共有三类,如图 3.2 所示,其中第一行属于二矩形特征,第二 行左边一个属于三矩形特征, 右边一个属于四矩形特征。每个图像可得到用于训 练的 Haar-like 特征超过 18 万个,但是实际上不一定需要这么多,因为过多的 特征会加大训练过程的时间和空间复杂度, 实际上过细的特征中会引起过多的冗 余,所以在选择特征时可适当放粗一些。

图 3.2 四种矩形 Haar-like 特征 (2)Walsh 特征 离散沃尔什变换(DWT:Discrete Walsh Transform)是数字信号处理方面经 常采用到的一种正交变换, 并且该变换同离散傅立叶变换一样,可以很好的反映 数字信号的频率变换情况,而且变换矩阵只是由±1 组成,可以较大程度减少计 算量。Walsh 特征构造方法如下: ①设 Walsh 特征算子的高度、宽度分别为 m、n(必须是 2 的整数次方) ;
14

②分别构造 m ? m、n ? n 维的沃尔什变换矩阵Hm 、Hn ; ③得到 Walsh 特征算子:W i , j =( H m ) T i ( Hn ) j ; 由于所有 m ? n 维的 Walsh 特征算子都相互正交,这意味着它对图像某个 局部特征的提取不产生冗余, 并且特征算子的形状比 Harr-like 特征算子的形状 要丰富。另外,m、n 都要求是 2 的整数次方,所以对一幅训练图像而言,它的 全部 Walsh 特征数是有限的,即 Walsh 特征的数量小于 Harr-like 特征的数量。 实际 Harr-like 特征提取过程中,很多特征都非常相近,冗余很大,采用 Walsh 特征来代替 Harr-like 特征可以大大降低特征之间的冗余。 (3)Gabor 特征 从人脸图像中提取特征的类型很多,如:几何特征、边缘特征、PCA 特征、 小波特征、Gabor 特征等,相比于其它特征,Gabor 特征因其滤波器的脉冲响应 函数与哺乳动物的视觉皮层中简单型细胞对图像信号的响应非常相似, 故可以对 人脸图像做出多尺度、 多方向的描述, 并且具有很强的刻画细节与局部结构能力。 同时,Gabor 滤波器的带通滤波的特性还能去除图像中高频噪声。与小波变换类 似, 利用 Gabor 变换也可以对图像做多分辨率分析,由于人的视觉系统具有对数 频程性质, 在对 Gabor 小波展开时也通常采用在频域或者空间域上的非均匀采样 方法。 常用的方法是,对的 Gabor 滤波器取一系列以固定倍数增长的波长和间隔 的方向,构成多角度、多方向的 Gabor 滤波器组。当利用 Gabor 滤波器组提取图 像的特征时,通常以滤波器的输出响应的实部绝对值或者幅值作为 Gabor 特征。

3.2.2 积分图
2001 年,Viola 等提出积分图(Integral Image)概念,其目的是为了快速 的计算分类器所需的矩形特征。若定义一幅图像的像素灰度为 i(x,y),则某像 素处的积分图像值定义为

ii( x, y) ?

x1? x , y1? y

?

i( x1, y )
1

(3.1)

要得到一幅输入图像 I 的积分图像,只需逐点扫描原图像一次,就可计算出来。

s ? x, y ? ? s ? x, y ?1? ? i( x, y)

(3.2)

15

ii( x, y) ? ii( x ? 1, y) ? s( x, y)

(3.3)

其中,s (x, y)为点(x ,y)所在位置的行列积分值。 如此, 两个矩形内像素和的差可以由积分图上的六个点计算得到,而三个矩 形内像素和的差可以由积分图上的八个点计算得到。如图 3.3,先扫描图像求出 各点像素值,则灰色区域像素值的和可以由(5+1-2-4)得到,下半部分区域像 素 值 的 和 为 (2+6-3-5) , 则 该 矩 形 Harr-like 特 征 值 为 两 式 之 差 , 即 (5+1-2-4-2-6+3+5)

图 3.3 求矩形特征像素差示例

Harr-like 特征主要有三类,如图 3.2 所示。a 与 b 的矩形 Harr-like 特征 为两个矩形内像素灰度值分别求和之差的,c 的矩形 Harr-like 特征为两边矩形 框的灰度值之和减去中间矩形的灰度值之和,d 矩形 Harr-like 特征为两条对角 线的矩形框的灰度值和的差值。

3.3AdaBoost 算法的改进
在基于统计学习的检测算法中,AdaBoost 算法是主流的方法,经过几年的 发展, 基于 AdaBoost 的人脸检测算法取得了很大的成功,检测率已经达到很高 的水平,而且可以达到实时检测,本文的算法就是基于此算法。在 2.2 节中对 AdaBoost 算法有过介绍,在训练过程中,所有的正负样本都被赋予一个相等的 初始权重, 当某一轮分类器训练完成后,会根据其在训练集上的分类结果和总体 的分类准确率来调整样本的权重:在下一轮迭代时,本轮分类错误的样本的权重 增加(概率增大) ,本轮分类正确的样本权重降低(概率降低) ,使得在下一轮迭 代时, 弱分类器更加关注分类错误的样本。也就是说随着训练迭代次数的不断增 加,AdaBoost 算法的重心将逐渐地转移到较难分类的样本上,然而该算法对于 这些较难分类的样本中的正负样本并没有针对性的加以区分。另外,随着迭代次
16

数的增加较难分类样本的权重不断扩大, 而曾经已经分类正确的样本的权重越来 越小,当较难分类样本的权重过度扩张后,分类正确的正样本比例严重下降,会 导致算法的检测率降低。 并且 AdaBoost 算法的一个重要指标就是对正样本的识 别率, 对于较难分类的样本, 正确识别正样本的价值要远超过正确识别负样本的 价值。 为了减缓较难分类样本权重的过度扩张并提高对正样本的识别率, 本文提出 一种新的样本权重更新方法, 在保证传统 AdaBoost 算法偏重难分类样本的基础 上, 对于被误判为负样本的正样本赋予更高的权重,使得算法更加关注于难分类 样本中的正样本, 以提高对正样本的检测率,同时融合弱分类器的动态投票加权 值,进一步提高检测率、加快算法的收敛。改进的算法流程为: 进行 T 轮迭代训练,挑选出 T 个弱分类器组成强分类器。 (1)归一化样本权重,使样本权重能够代表样本的出现概率

? (t , i) ?

? (t , i)
Zt

(3.4)

(2)对每个特征 j ,训练一个弱分类器 h j ( x) ,计算其加权错误概率

? j ? ? ? (t , i) h j ( xi ) ? yi
i ?1

n

(3.5)

(3)遍历所有特征和弱分类器,找出一个具有最小加权错误率 εj 的弱分类 器ht ,记错误概率为εt ; (4)计算识别正确的正样本的权重和

pt ? ??(t, i)
求解弱分类器的投票加权

, yi ? 1 &&ht ( xi ) ? 1

(3.6)

? t ? ln(1/ ?t ) ? ? ?

1 2

pt s

(3.7)

其中μ为常数,一般取 0.001 ? 0.01 ,s 为所有正样本的权重和; (5)为下次迭代更新样本权重

17

? ? ?1 ? 1 ? ? (t ? 1, i) ? ? (t , i) ? ? ? 3 ? 2 ?? 3 ?

yi ? h j ( xi ) yi ? h j ( xi ) & & yi ? ?1 yi ? h j ( xi ) & & yi ? 1
(3.8)

由于 ?t ? 1 / ? t ? 1 ? 1,则 1/ ?t ? 3 ?t ? 3 ?t2 ,显然,改进后的 AdaBoost 算法既保留了传统算法强化困难样本的学习规则, 同时更加关注困难样本中的正 样本, 从而减缓了困难样本中的负样本权重的过度扩张。由于困难样本中的正样 本权重比负样本的权重增加的快,当权重归一化后,在下一轮迭代过程中,其概 率将变大, 这就保证了正样本在训练过程中能够得到更多的重视,从而有利于提 高正样本的识别能力。 在引入新的弱分类器投票加权中, pt 代表了弱分类器对正样本的识别能力,

? pt
s

是 pt 的递增函数,pt 越大, 说明选择的弱分类器对正样本的识别能力越强,

?t 也就越大,在错误率相同的情况下,对正样本具有更强识别能力的弱分类器
就具有更大的投票权重,从而能加快训练过程的收敛,并提高检测的精度。

3.4 构建双层 AdaBoost 分类器进行人眼检测
通过以上分析可见,Viola 用于人脸定位的方法同样可以用于人眼定位,只 需在训练样本时将人脸样本图像替换为人眼的样本图像即可, 其他步骤均可按照 人脸定位的步骤进行。

3.4.1 人脸定位与人眼定位的差异
在本章的开始介绍了疲劳检测系统的第一步是人脸的定位(图 3.1) ,虽然 可以采用 Viola 的方法像人脸检测那样, 训练一个人眼分类器来进行人眼定位, 但是一般不像人脸检测一样直接在待检测图像中定位人眼。 直接对整个待检测图 像进行人眼定位是具有可操作性的, 但是在实际检测时往往会发现人眼的误识率 明显高于人脸的误识率。 在现实生活中, 类似人眼的物体很多, 要构建一个能可靠区分 “人眼” 和 “非 人眼”的分类器相当困难。人脸图像的边缘信息量一般高过人眼图像,这使得人
18

脸图像在训练中能够和复杂背景图像构成的负样本保持更高的区别度。 而人眼图 像的边缘信息量相对较少, 其中闭眼图像的边缘信息量相对于睁眼图像又略微低 一些, 使得人眼图像, 特别是闭眼图像与复杂背景图像在训练过程中较难以分辨。 此外, 还有其他因素使得人眼的定位难于人脸定位,例如因为人眼区域小于人脸 区域, 对于一些清晰度不高的视频采集设备, 往往得到的人眼区域图像比较模糊, 直接在图像中实施人眼检测会因为目标过小致使精度不高。

3.4.2 人眼定位预处理
在定位好了人脸以后, 接下来的工作就是试图在人脸区域中检测到人眼区域。 要在整个人脸区域进行人眼检测,计算量还是比较大的。如果在人眼检测前能利 用某种方法进一步的缩小人眼检测的候选区域, 把人眼检测的搜索区域降低到更 小,那么就能为接下来的检测工作节省计算量,提高搜索速度。衡量一个人的脸 部是否美观有一个“三庭五眼”标准,这个“三庭”就是从发际线到眉间连线、从眉 间到鼻翼下缘、 从鼻翼下缘到下巴尖, 上中下各占整个面部的三分之一, 如图 3.4 所示。

图 3.4 人脸的“三庭”标准图 这样,当定位好了人脸区域以后,就可以通过“三庭五眼”标准设定眼睛区 域的大致范围,最后利用训练好的人眼分类器,在该区域内搜索人眼。这种通过 构建双层分类器缩小区域搜索的方法可以快速的定位出眼睛, 提高系统的检测速 度,同时能极大地降低眼睛误识率,提高检测的精度。

19

3.4.3 人眼定位双层分类器的构建
双层 AdaBoost 分类器是人脸分类器和人眼分类器的级联过程。整个分类器 由两部分组成:人脸 AdaBoost 分类器和人眼 AdaBoost 分类器。 首先,提取一帧视频图像,扫描图像进行人脸检测,此时采用较大的检测窗 口,然后将已经标定的人脸区域按照“三庭五眼”的结构,进一步划分出人眼的大 概区域,再将该区域送入人眼 AdaBoost 分类器,最后输出人眼部分。 双层 AdaBoost 分类器能有效抑制人眼误识率。由于人脸特征比较丰富且相 对比较固定,因此利用 AdaBoost 算法对人脸样本进行训练时,通常可以使用高 阈值而还能保证较高的识别率, 因此人脸检测的误识率通常很低。这样就可以利 用人脸检测的信息对人眼进行检测,排除人嘴和背景中误识的部分,从而可以在 保持原有检测率的基础上有效地抑制误识率。

3.5 人眼定位算法的设计与实现
获取图像后,需要对图像灰度化,滤波除噪等预处理,然后就可以对人眼进 行检测。人眼检测的流程包括积分图的生成、特征值计算、级联分类器判断等步 骤。下面给出人眼定位实验结果,源程序见附录 1。

图 3.5 人眼定位检测结果图

20

4 人眼状态识别
疲劳是一种生理状态,尤其是驾驶员在驾驶过程中产生的一种综合性的生理 心理过程,疲劳状态下驾驶员在生理和心理方面的表现是联系相互影响的。通过 前人的大量研究驾驶员在疲劳时生理表现主要体现在头部和眼睛的变化,如视线 偏离前方、头部缓慢的低下、眼睛闭合时间较长以及泛眼频率高等特点,综合很 多因素眼睛的状态是表征疲劳最重要的特征,人眼主要由上下眼险、眼球、瞳孔 以及左右内外眼角构成,而眼睛的挣闭状态主要体现在眼睑位置的变化和尤其所 覆盖的瞳孔面积的大小上。常用的检测方法主要有 Hough 查找圆法、灰度投影 法、模板匹配法。本文采用基于椭圆拟合的人眼状态分析。

4.1 基于椭圆拟合的人眼状态分析
眼睛状态主要指眼睛的睁开程度,眼睛的睁开程度又与人眼的轮廓相关。常 用的椭圆拟合的方法主要有 2 种,一种是基于 Hough 变换的椭圆拟合方法,一 种是使用最小二乘法进行椭圆拟合。 基于最小二乘法适用于各种复杂的对象模型, 能达到很高的拟合度。 本文就采用基于最小二乘法来拟合人眼的轮廓,然后根据 拟合椭圆的长短轴比例来判断人眼的状态。 最小二乘法拟合椭圆, 就是通过计算边缘点到理想拟合椭圆距离的平方和的 最小值来确定理想椭圆拟合的参数集合。通过对人眼轮廓进行椭圆拟合后,就可 以根据拟合的椭圆参数来表示人眼轮廓的形状信息。转换公式如下:
xc ? BE ? 2CD 4 AC ? B 2 yc ? BD ? 2 AE 4 AC ? B 2
(4.1)

(4.2)

a?2

?2 F A?C 2 A?C ? B ?( ) F
2

(4.3)

b?2

?2 F A?C 2 A?C ? B ?( ) F
2

(4.4)

21

? ? arctan

1 2

B A?C

(4.5)

其中 ( xc , yc ) 为椭圆的中心坐标点,a 是椭圆的长轴,b 为椭圆的短轴, ? 是 长轴相对于水平坐标的偏转角。 因此, 对人眼轮廓进行椭圆拟合后,就可以很直观的想到利用椭圆的长短轴 的比来确定人眼的状态, 即通过 b / a 来判断人眼的睁闭状态。 通过实验分析发现, 当 b / a ? 0.24 时,可以认为眼睛处于睁开状态,否则眼睛处于疲劳状态的半闭合 状态或完全闭合状态。 表 4.1 是对三组测试视频集的人眼状态分析的结果,测试视频光照较好, 图像清醒,测试集 1 是清醒状态,其它有部分疲劳状态。图 4.1 是驾驶员眼睛 轮廓椭圆拟合部分结果图。 表 5.1 人眼状态识别结果
测试集 正确率% 测试 1 91.60 测试 2 84.23 测试 3 90.52

(a) 睁眼状态(正常) (b) 半睁眼状态(疲劳) (c) 闭合状态(疲劳) 表 5.1 的实验结果说明,基于椭圆拟合的人眼状态识别方法有较好的识别 效果,但受限于眼部图片的分辨率及清晰度,而且眼睛的睁闭状态,尤其是半睁 开半闭合状态的判断带有很强的主观性,因此识别率不是非常好,本文的实验结 果不作为一般性结论。以后可以考虑融合其它特征识别人眼状态。

22

5 基于 PERCLOS 标准的疲劳状态分析
找出一种既容易观察, 又方便测试的疲劳特征一直是疲劳驾驶检测技术关注 的方向。 1994 年美国首次提出单位时间眼睛闭合的百分比 (percentage of eyelid closure over the pupil over time, PERCLOS)用于描述驾驶员的疲劳 状况。 1999 年美国联邦高速公路管理局召集专家学者,研究讨论 PERCLOS 和其 它人眼活动测量方法的有效性,并通过对实验数据的对比,证明了 PERCLOS 相 对于驾驶员其他特征, 更能直接反映驾驶员的疲劳程度,研究认为应该优先考虑 将测量驾驶员的 PERCLOS 作为车载的、实时的、非接触式的疲劳检测方法。

5.1 PERCLOS 方法介绍
当人处于疲劳状态时, 眨眼时间即眼睛从睁开—闭合—睁开所用的时间变长, 并且眨眼时间的长短与疲劳程度有密切的关系,驾驶员眨眼的时间越长,疲劳程 度就越严重, 因此通过测量驾驶员眼睛闭合时间的长短可以在一定程度上反映驾 驶员的疲劳状态。

图 5.1 驾驶员眼睛睁开度图 在具体实验时 PERCLOS 通常有 P70,P80,Em 三种测量方式: P70:眼皮盖过眼球的面积超过 70%所占的时间比例。 P80:眼皮盖过眼球的面积超过 80%所占的时间比例。 Em:眼皮盖过眼球的面积超过 50%所占的时间比例。
23

我们通常选择 p80 作为疲劳判定的标准,当眼睛挣开程度大于 20%为眼睛 挣开状态,眼睛挣开程度小于或者等于 20%时为眼睛闭合状态。PERCLOS 的测 量原理可以用图 5.1 来说明。 分别测量出t1 , t2 , t3 , t 4 即可计算出 PERCLOS 的 值 f ,即眼睛闭合占某一特定时间的比例。
f ? t3 ? t2 t4 ? t1

(5.1)

通过多次实验得出,定义当 PERCLOS 值 f>0.12 时,驾驶员处于疲劳状态;

24

6 总结
近年来由疲劳引发的交通事故越来越多,疲劳驾驶预警系统对于避免交通事 故实现道路安全有重要意义。 本文通过使用计算机视觉的方法对驾驶员进行眼睛 定位和状态分析, 分别研究了人脸检测、人眼定位和眼部状态识别几个方面的内 容,然后融合 PERCLOS 来判断驾驶员是否处于疲劳状态。 本文首先介绍基于 AdaBoost 算法的人脸检测技术,结合 Haar-Like 特征分 析了其实时检测方面的优点,并针对 AdaBoost 算法对困难样本不加以区分的问 题, 采用一种结合正样本识别率的方法对权重更新进行了改进。在比较了各种人 眼检测方法后,采用基于 AdaBoost 算法构建双层分类器进行人眼检测,这种方 法先检测到人脸区域,然后根据人脸的“三庭五眼”结构缩小人眼搜索的区域,能 够排除大部分被误识的非人眼区域。 在对人眼成功进行定位以后, 采用了基于最小二乘法的眼睛轮廓椭圆拟合方 法, 用所拟合的人眼椭圆来表示人眼的形状特征,然后根据拟合椭圆的长短轴比 例来判断人眼的睁闭状态。最后采用结合 PERCLOS 的方法判断疲劳状态,使 得疲劳检测系统更加的稳定。

25

参考文献
[1] 林 广 宇 , 魏 朗 . 基 于 数 字 图 像 的 汽 车 驾 驶 员 行 驶 状 态 判 别 [J]. 计 算 机 工 程,2007,33(22):193-194. [2]梁路宏,艾海舟,基于人脸检测的人脸追踪算法.计算机工程与应用,2001.17: 42-45

[3] 吴康华.基于 PERCLOS 的驾驶疲劳检测系统设计[D].杭州:浙江大学信息学院,2008 [4] 张劲 . 安全驾驶中的人脸表情识别技术研究 [D]. 南京 : 南京理工大学计算机应用专 业,200 [5]贾永红.数字图像处理[M].武汉:武汉大学出版社,2003 [6] 朱振华 , 吴晓娟 , 王磊 , 等 . 基于眨眼持续时间的司机疲劳检测方法 计算机工 程,2008:34(5):201-206 [7] Li Ying, Lai Jianhuang, RuenPongchi. Muti-template ASM and Its Application in FacialFeature Points Detection. Computer Research and

Development,2007,44(1):133-140 [8]Gerry E.Warning system for fatigued drivers nearing reality with new eye dataf[J]. Seienee Dai]yAgazine, 1997, (7): 25-30 [9]王荣本,郭克友,储江伟.适用驾驶员疲劳状态监测的人眼定位方法研究[J].公路交通 技术 2,003,20(5):111-114 [10] 夏芹,宋义伟, 朱学峰. 基于 PERCLOS 的驾驶疲劳监控方法进展[J]. 自动化技术与 应用,2008, 27(6): 43-46 [11] 郑培. 机动车驾驶员驾驶疲劳测评方法的研究[D]. 北京: 中国农业大学, 2001 [12]Ma Y, Xiaoqing Ding. Robust precise eye location under probabilistic framework[C].Proceedings of the sixth IEEE International Conference on Automatic Face and GestureRecognition, 2004: 339-344 [13] Freund Y. Boosting a weak Learning Algorithm by Majority[J]. Information and Computation,1995, 121(2):256-285 [14]M. Pilu, A. W. Fitzgibbon, R. Fisher. Ellipse-Specific Direct Least-Square Fitting[C]. PatternAnalysis and Machine Intelligence, 1999: 599-602 [15]R. Lienhart, A. Kuranov, and V. Pisarevsky. Empirical analysis of detection

26

cascades ofboosted classifiers for rapid object detection. [C] In DAGM 25th Pattern RecognitionSymposium, 2003.

27

附录 A
clear all x=imread('C:\wuzun.jpg'); %读取原始图像

figure(1);subplot(1,4,1);imshow(x);title('原图像 1'); y=rgb2gray(x); subplot(1,4,2);imshow(y);title('图像 1 的灰度图'); u1=imnoise(y,'salt& pepper',0.07); subplot(1,4,3);imshow(u1);title('图像 1 加噪声图'); %给图 1 加椒盐噪声 % 图 1 灰度图

zz=medfilt2(u1,[3 3]);z=medfilt2(zz,[5 5]);%(2 次中值滤波) subplot(1,4,4);imshow(z);title('图像 1 中值滤波'); %图 1 中值滤波(3*3 窗口) % figure(6);subplot(1,2,1);imshow(zz);title('一次滤波'); % subplot(1,2,2);imshow(z);title('二次滤波'); x1=imread('C:\wuzun1.jpg'); figure(2);subplot(1,4,1);imshow(x1);title('原图像 2'); y1=rgb2gray(x1); subplot(1,4,2);imshow(y1);title('图像 2 灰度图'); u2=imnoise(y1,'salt & pepper',0.13); subplot(1,4,3);imshow(u2);title('图像 2 叫噪声图'); %图 2 加椒盐噪声 %图 2 灰度图

zz1=medfilt2(u2,[3 3]);z1=medfilt2(zz1,[5 5]);%(2 次中值滤波) subplot(1,4,4);imshow(z1);title('图像 2 滤波图'); %图 2 中值滤波 % figure(5);subplot(1,2,1);imshow(zz1),title('一次滤波'); % subplot(1,2,2);imshow(z1);title('二次滤波'); % figure(3);subplot(1,2,1);imshow(z);title('处理后图 1'); % figure(3);subplot(1,2,2);imshow(z1);title('处理后图 2'); f=imsubtract(z1,z); figure(4);subplot(1,1,1);imshow(f);title('差分后图像'); % agin=medfilt2(f,[3 3]);figure(10);imshow(agin);f=agin; %眼睛的粗定位 %标注一只眼睛
28

% 图 1 图 2 差分

%差分图中值滤波

[h w]=size(f); Amax=0;m=0;n=0; fori=10:h for j=10:w if Amax<=f(i,j) Amax=f(i,j);m=i;n=j; end end end %标另外一只眼睛 Bmax=0;m1=0;n1=0; for i1=10:m-10 for j1=10:w-10 ifBmax<=f(i1,j1) Bmax=f(i1,j1);m1=i1;n1=j1; end end end for i2=m+10:h-10 for j2=10:w-10 ifBmax<=f(i2,j2) Bmax=f(i2,j2);m1=i2;n1=j2; end end end %判断两眼的参数是否符合要求 figure(7);imshow(z);hold on;plot(n,m,'+',n1,m1,'+');title('标定眼睛图'); %给眼睛画上矩形框 figure(8);imshow(z),title('眼睛粗定位');hold on;
29

Bvertex=[n-25 m-15;n+25 m+15];

%矩形的左上顶点坐标和右下顶点坐标

plot([Bvertex(1,1),Bvertex(2,1)],[Bvertex(1,2),Bvertex(1,2)],'r') plot([Bvertex(2,1),Bvertex(2,1)],[Bvertex(1,2),Bvertex(2,2)],'r') plot([Bvertex(2,1),Bvertex(1,1)],[Bvertex(2,2),Bvertex(2,2)],'r') plot([Bvertex(1,1),Bvertex(1,1)],[Bvertex(1,2),Bvertex(2,2)],'r'); hold on; Bvertex=[n1-25 m1-15;n1+25 m1+15]; %矩形的左上顶点坐标和右下顶点坐标

plot([Bvertex(1,1),Bvertex(2,1)],[Bvertex(1,2),Bvertex(1,2)],'r') plot([Bvertex(2,1),Bvertex(2,1)],[Bvertex(1,2),Bvertex(2,2)],'r') plot([Bvertex(2,1),Bvertex(1,1)],[Bvertex(2,2),Bvertex(2,2)],'r') plot([Bvertex(1,1),Bvertex(1,1)],[Bvertex(1,2),Bvertex(2,2)],'r'); %最大类间方差定二值化阈值 [height,width]=size(z); hist=zeros(256,1);%直方图 %threshold=128; %初始阈值 %计算直方图 fori=1:height for j=1:width m=z(i,j)+1; %zz(i,j)灰度值从 0-255

hist(m)=hist(m)+1;%某级灰度的像素数 end end hist=hist/(height*width);%落在每一灰度级上的概率 avg=0; for m=1:256 avg=avg+(m-1)*hist(m); end temp=0; fori=1:256
30

p1=0; avg1=0; avg2=0; T_current=i-1;%当前分割阈值 for m=1:T_current-1 p1=hist(m)+ p1;%低灰度级概率总和 end p2=1-p1;%高灰度级概率总和 for m=1:256 if m<T_current avg1=avg1+(m-1)*hist(m); else avg2=avg2+(m-1)*hist(m); end end avg1=avg1/p1; avg2=avg2/p2; D=p1*(avg1-avg)^2+p2*(avg2-avg)^2; if D>=temp finalT=T_current; temp=D; end end % 滤波后差分图二值化 f1=z; fori=1:h for j=1:w if f1(i,j)<=finalT f1(i,j)=0;
31

else f1(i,j)=255; end end end figure(13);imshow(f1);title('差分后图二值化'); %提取眼睛轮廓 %精确定位眼睛矩形,最高点、最低点、最左边、左右边四点确定的矩形。 %一只眼轮廓 [h1,w1]=size(f1); zg=0;zd=0;zzb=0;zyb=0; %i3=0;j3=0; xj=50;yj=30;%垂直和水平方向中心点矩形大小一半 x3=zeros(1,100);y3=zeros(1,60); x4=zeros(1,100);y4=zeros(1,60); x5=zeros(1,100);y5=zeros(1,60); x6=zeros(1,100);y6=zeros(1,60); zgx=0;zdx=0;zzbx=0;zybx=0; zgy=0;zdy=0;zzby=0;zyby=0; %最高的点 y for i3=n-50:n+50 for j3=m-30:m+30 if f1(i3,j3)==255&f1(i3,j3+1)==0 x3(i3-n+51)=i3;y3(j3-m+31)=j3; end end end for k=1:1:100 ifzgy<y3
32

zgy=y3; end end %最低点 y for j3=m-30:m+30 for i3=n-50:n+50 if f1(i3,j3)==255&f1(i3,j3-1)==0 x4(i3-n+51)=i3;y4(j3-m+31)=j3; end end end for k=1:1:100 ifzdy<y4 zdy=y4-1; end end %最左点 x for j3=m-30:m+30 for i3=n+50:1:n-50 if f1(i3,j3)==255&f1(i3+1,j3)==0 x5(i3-n+51)=i3;y5(j3-m+31)=j3; end end end for k=1:1:100 ifzzbx<x5 zzbx=x5+1; end end
33

%最右点 x for j3=m-30:m+30 for i3=n+50:1:n-50 if f1(i3,j3)==255&f1(i3-1,j3)==0 x6(i3-n+51)=i3;y6(j3-m+31)=j3; end end end for k=1:1:100 ifzybx<x6 zybx=x6-1; end end %精确画出眼睛矩形区域 figure(9);imshow(f1),title('眼睛轮廓');hold on; Bvertex=[215 163;241 175]; %矩形的左上顶点坐标和右下顶点坐标

plot([Bvertex(1,1),Bvertex(2,1)],[Bvertex(1,2),Bvertex(1,2)],'r') plot([Bvertex(2,1),Bvertex(2,1)],[Bvertex(1,2),Bvertex(2,2)],'r') plot([Bvertex(2,1),Bvertex(1,1)],[Bvertex(2,2),Bvertex(2,2)],'r') plot([Bvertex(1,1),Bvertex(1,1)],[Bvertex(1,2),Bvertex(2,2)],'r'); %另一只眼轮廓 hold on; Bvertex=[139 154;170 167]; %矩形的左上顶点坐标和右下顶点坐标

plot([Bvertex(1,1),Bvertex(2,1)],[Bvertex(1,2),Bvertex(1,2)],'r') plot([Bvertex(2,1),Bvertex(2,1)],[Bvertex(1,2),Bvertex(2,2)],'r') plot([Bvertex(2,1),Bvertex(1,1)],[Bvertex(2,2),Bvertex(2,2)],'r') plot([Bvertex(1,1),Bvertex(1,1)],[Bvertex(1,2),Bvertex(2,2)],'r');

34

致谢
感谢我的室友, 在三年的学习和生活中我们互相帮助 , 结下了深厚的友谊,和 你们在一起学习、生活的日子快乐而充实。在做本次课设的过程中,他对我帮助 巨大,让我对疲劳驾驶检测的相关技术有了更深入的理解和掌握,很荣幸能有如此 热心的良师益友。 最后,特别要感谢我的父母 ,你们对我的支持和鼓励使我能够安心学习 ,顺利 完成学业。对你们的感谢难以用言语表达,你们的关怀和鼓励是我前进的最大动 力!

35


相关文章:
人眼定位
一、背景知识人眼在日常互动, 交流以及其他的日常活动中起着非常重要的作用。...基于人眼定位的人脸检测... 4页 免费 matlab实现人眼定位程序 3页 1下载券 ...
基于肤色和眼睛定位的人脸检测算法——MATLAB实现
暂无评价|0人阅读|0次下载|举报文档 基于肤色和眼睛定位的人脸检测算法——MATLAB实现_计算机软件及应用_IT/计算机_专业资料。基于肤色和眼睛定位的人脸检测算法本文...
基于MATLAB的人脸识别
暂无评价|0人阅读|0次下载|举报文档 基于MATLAB的人脸识别_信息与通信_工程科技...基于人脸图像局部特征的识别通常抽取人脸器 官如眼睛、眉毛、鼻子和嘴等器官的...
基于matlab的人脸识别技术
暂无评价|0人阅读|0次下载|举报文档 基于matlab的人脸识别技术_计算机软件及应用...人脸图像中显著特征点的位置如眼睛、眉毛、鼻子、嘴巴等器官,同时还可以得到这 ...
基于matlab的人脸检测与识别技术研究毕业设计开题报告
暂无评价|0人阅读|0次下载|举报文档基于matlab的人脸检测识别技术研究毕业设计...人脸各个器官的分布总是存在着一定的规律性,例如人的两个眼睛 总是对称分布在...
基于MATLAB的图像区域特征检测
基于MATLAB的图像区域特征检测_天文/地理_自然科学_专业资料。图像中区域特征检测...尽管人眼鉴 别事物的能力高,可以识别多种颜色,但是在很多情形下,图像对于人眼...
基于MATLAB的人脸识别
基于MATLAB的人脸识别_工学_高等教育_教育专区。主要应用MATLAB来是实现人脸图像的...它是利用了人眼对高频 部分不敏感的特性来实现数据的大幅简化。 它实际上是...
数字图像处理技术-基于Matlab的人脸检测
基于 Matlab 的人脸检测 学生姓名 实践教学项目 实践教学要求与任务: 1.能对...首先,图片所拍摄下的人 脸必须是正对着摄像机镜头,对于俯视,侧视的拍摄并识别...
基于MATLAB的人脸识别
暂无评价|0人阅读|0次下载|举报文档基于MATLAB的人脸识别_法律资料_人文社科_专业...基于人脸图像局部特征的识别通常抽取人脸器官如 眼睛、眉毛、鼻子和嘴等器官的...
基于肤色信息的人脸检测MATLAB程序
基于肤色信息的人脸检测MATLAB程序_信息与通信_工程科技_专业资料 暂无评价|0人阅读|0次下载|举报文档 基于肤色信息的人脸检测MATLAB程序_信息与通信_工程科技_专业...
更多相关标签:
matlab 人眼检测 | 眼镜检测 matlab | 基于matlab的行人检测 | 基于matlab的人脸检测 | matlab 边缘检测 | matlab图像边缘检测 | matlab canny边缘检测 | matlab 人脸检测 |