




已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于图像处理的防疲劳驾驶测试32摘 要随着计算机图像处理技术的发展, 利用图像处理技术来监控驾驶员的行为已经成为可能。利用摄像头持续不断地检测驾驶员的眼睛, 提取其特征信息,可以较为有效地分析出驾驶员的精神状况。本设计是通过在视频中对人脸进行自动跟踪,找出眼部图像,然后进行一系列图像处理,最后得到眼睛的二值化图像,从而判断出眼睛开合状态。根据采集的数据判断出驾驶员是否出现疲倦,并在出现疲倦特征的时候做出警告。在多次警告后驾驶员的精神状态依然没有改善的情况下,系统会自动降低车速,以保证行车安全。关键词:人脸检测,Haar分类器,同态滤波,区域生长,疲劳度检测1 前言随着社会经济的发展, 机动车辆与日俱增,随之而来的行车安全问题越来越受到人们关注。根据英国汽车协会统计,英国车祸的死亡事故中,有10%是因司机疲劳驾驶引起的。同时有资料表明,高速公路发生的交通事故中,有50%以上是由于长时间疲劳驾驶或所见目标单调使司机注意力不集中、甚至打瞌睡等原因造成的。疲劳驾驶可能影响驾驶员的警觉和安全驾驶能力,从而让交通安全事故发生的机会大大增加【1】。要降低交通意外的发生,最重要的一个途径就是防止驾驶员疲劳驾驶。而要防止疲劳驾驶,最重要的一点是要时刻监测着驾驶员的精神状况。从人体疲劳特征的研究结果看,疲劳驾驶的典型反应包括:眼帘的频繁眨动;瞳孔逐渐变小,甚至闭合;哈欠增多;头部前倾或后仰;方向盘微调,驾车左右摇摆;反应能力下降等。目前, 已有一些简单实用的疲劳测评方法,如脑电图EEG、肌电图EMG、眼动图EOG、瞳孔测量计等,但这些方法都是接触式的疲劳检测方法,势必会给驾驶员造成一定的影响。为了尽量减少对驾驶员的影响,采取的疲劳检测方法最好是非接触式的。通过摄像头捕捉驾驶员的动作特征来检测驾驶员的精神状况,则是最好的非接触式检测方法,因为在车厢内安装监控摄像头对驾驶员机会是没有影响的。从刚才提到的各种疲劳驾驶典型反应来看,监测瞳孔变化的难度很大,监测头发运动状况,方向盘微调等又很难用一个量化的标准去衡量。而监测眼睛眨动状态比较容易跟踪,眨眼次数和眼睛闭合情况也可以很清晰地监测出来。因此,通过监测眼睛状态来判断驾驶员是否处于疲劳状态这种方法,相对来说是最有效最直观的。本文所讨论的基于图像处理的防疲劳监测也是通过这种方法来实现的。1.1 功能与指标1.1.1 功能介绍本文所介绍的防止疲劳驾驶测试系统是以车速作为触发的。当车速低于50km/h时,系统处于休眠模式,不会对人眼进行监测。当车速超过这个阀值时,系统就会进入检测模式,开始对驾驶员的精神状态进行监视。当发现驾驶员眼睛出现疲劳状况时,系统就会发出警告声,提醒司机注意驾驶时候的安全。当系统发出了多次警告后,驾驶员的精神状态依旧没有改善的话,系统就会自动进入车速控制模式,此时车速将会自动减慢,同时,系统还会持续地发出警告,直到驾驶员重新复位系统。该系统还具有行车记录功能,每秒钟都会把当前行车的部分数据,如当前时间、车速、驾驶员眨眼次数、精神状况等记录下来。相当于汽车的“黑匣子”。1.1.2 指标介绍1) 当车速低于50km/h时,人脸跟踪系统不启动2) 当驾驶员眼睛在持续12秒时间内处于闭合状态,发出一次警告。3) 当驾驶员在20秒钟内眨眼次数超过8次,发出一次警告。4) 当警告次数累积到7次,系统就会循环发出警告5) 当警告次数累积到8次,而驾驶员没有对系统进行复位,系统就会进行车速控制,以每秒5km/h的速度强制降低车速,直到车速低于20km/h为止。2 系统方案2.1 图像处理器方案方案一:使用arm和嵌入式操作系统来实现.虽然arm的速度比较快,达到将近500Mhz,但是由于用于图像处理的算法比较复杂,浮点运算比较多,而大部分arm处理器没有硬件浮点运算器,浮点运算靠的是软件,这样会对系统的实时性造成很大的影响。方案二:使用DSP。DSP由于具备硬件浮点运算器,速度能大大提高,DSP在图像处理方面相当强大,但DSP的开发难度相对比较大,成本较高。而且有些在计算机平台上的关于视觉识别的函数库要移植到DSP上的话,工作量相对来说会比较大。方案三:使用PC机。PC机的运算能力足够快,内存空间也足够大,符合图像处理对要求。而且在PC平台上,有不少关于图像处理和视觉识别方面的函数库可以去调用,这样子可以大大地减轻了开发难度。由于本文所介绍的重点是在于通过图像处理来识别疲劳状况的方法,所做的只是搭建一个模型,不涉及到实物设计。因此用PC机就可以满足要求了。综合以上方案,使用电脑处理是最好的选择。2.2 软件方案方案一:采用模式识别的方式在图像中寻找眼睛的位置,然后使用Gabor滤波器的特征提取算法【2】,即将Gabor滤波器与眼睛图像进行卷积,提取特征矢量:Gabor特征。然后,对高维空间中的Gabor特征通过特征选择和压缩的方法投影到低维空间中。再与训练好的人眼数据进行比较,采用k均值距离分类器进行分类,从而判断出眼睛的开合度。方案二: 采用模式识别的方式在图像中先找出人脸的位置,并对人脸进行追踪,在归一化后的人脸图中根据眼睛在脸部的相对位置,基本能找出眼睛的位置。再对眼睛图像进行一系列的图像处理,最后通过处理得到的二值化图像判断眼睛的开合度。由于人脸在整个图像中所占的比例比较大,追踪起来比较容易,检测的准确率相对比较高。而通常驾驶员在驾驶的过程中头部摆动的角度都比较小的,根据眼睛在脸部的相对位置,基本能找出眼睛的位置。然而用模式识别找眼睛的话,对眼睛的样本要求比较严格,而且在测试过程中发现,对于不同测试者的眼睛,分类所得的结果起伏比较大,稳定性没有二值化处理的好。再次,Gabor特征提取的速度比较慢,而眨眼的时间却很短,容易漏判。综上所述,我们采用第二种方案。2.3 整体方案系统通过摄像头来获取像素为320*240,帧速率为每秒15帧的影像后,传送给计算机。计算机在图像中用Haar分类器自动追踪到人脸,之后把截得到的人脸图像进行大小归一化处理,然后通过图像的绝对坐标找出人眼的位置。分离出左右眼的图像,再分别对左右眼的灰度图进行同态滤波处理,以消除光照影响。然后进行二值化处理,再对眼球中心位置进行区域生长,以消除眉毛的干扰,这样就可以把眼球提取出来。最后通过计算眼球在横坐标上的投影,找出眼球的最大高度,设定一个阈值,用这个高度阈值就可以判断出眼睛的开合状态。通过采集分析眼睛在一段时间内的数据,包括闭眼和半开半闭的持续时间,还有眨眼次数,这样就可以比较科学地判断出人的精神状态,提前对驾驶员将要出现的困倦进行预警。3 特色1、利用Haar特征分类器自动跟踪人脸2、利用积分投影算法,检测判别人眼开合状态3、根据驾驶员的疲劳度,自动发出声音警告或者控制车速4、实时行车记录,时刻对驾驶员精神状况进行跟踪记录4 实现原理综述:首先通过摄像头获取图像,然后通过VC+结合OpenCV和IPP对图像进行处理.首先是使用基于类Haar特征的层叠式分类器来实现人脸检测,然后对人脸图像经行同态滤波,消除光照影响后进行二值化,再在二值化的图像上截取人眼图像,通过眼睛图像的一系列特征,判断是开还是闭眼。在对一定帧数内的开眼闭眼次数经行统计后,根据统计结果判断人是否再困倦状态。行车数据通过VC+的函数记录在计算机的硬盘上。4.1 OpenCV简介OpenCV【3】是Intel公司支持的开源计算机视觉库。它轻量级而且高效由一系列 C 函数和少量 C+ 类构成,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV 具有以下三个特点:l 拥有包括 300 多个C函数的跨平台的中、高层 API。它不依赖于其它的外部库尽管也可以使用某些外部库。l 对非商业应用和商业应用都是免费的。l 为Intel Integrated Performance Primitives (IPP) 提供了透明接口。 这意味着如果有为特定处理器优化的的 IPP 库,OpenCV 将在运行时自动加载这些库。4.2 IPP简介“Intel Integrated Performance Primitives” ( Intel IPP )是一套跨平台的软件函数库,他提供了广泛的多媒体功能:音频解码器(例如: H263 、 MPEG-4 )、图像处理 (JPEG) 、信号处理、语音压缩(例如: G723 、 GSM 、 AMR )和加密机制。“Intel IPP” 包含各种的函数,用于进行向量与图像处理、颜色转换、过滤、分屏、设置域值、变换,以及算术、统计、几何与图形运算。对于每个函数, “Intel IPP” 均支持多种数据类型和分布,同时保持了数据结构的最小化,它提供了丰富的选项供用户在设计与优化应用程序时选用,不必再去编写特定代码。Intel IPP 针对大量的 Intel Microprocessor (微处理器)进行优化: Intel Pentium 4 处理器,采用 Intel Centrino 移动运算技术的 Intel Pentium M 处理器组件, Intel Itanium 2 处理器、 Intel Xeon 处理器以及采用 Intel XScale 技术的 Intel PCA 应用处理器。采用一套跨平台结构的通用 API ,使用者除了不需要担心平台兼容性的问题,更节省了开发成本以及研发时间,使用者可以轻轻松松移植原有应用程序。4.3 DirectX视频捕捉技术Microsoft DirectX是一系列为创建电脑游戏和其他高性能多媒体应用程序而准备的低级应用程序编程接口(APIs)。它包括对二维和三维图形、音效和音乐、输入设备的支持,以及对诸如多人游戏之类的网络应用程序的支持。它由许多部分组成,以我们用到的DirectX8.1为例,它包括DirectX Graphics,DirectX Audio,DirectInput,DirectPlay,DirectShow以及Direct Setup。这里,用于图像捕捉的是DirectShow,所以这里只对它进行介绍。Microsoft DirectShow应用程序界面 (API) 是Microsoft Windows 平台的一种媒体流体系。它提供高品质的媒体流捕捉和回放并支持宽松的格式变化,包括高级流格式 (ASF), Motion Picture Experts Group (MPEG), Audio-Video Interleaved (AVI), MPEG 声音层-3 (MP3)和 WAV 文件。此外,它还支持使用 Windows 驱动模块 (WDM) 或老的 Windows 视屏驱动捕捉。DirectShow整体是以Microsoft COM原件完成,它可以说是数个COM原件组成的,使用DirectShow进行开发就是好比在程序中产生所需要的COM原件。DirectShow是DirectX的一部分,要进行程序开发必须先到微软的官方网站下载DirectX SDK,然后进行安装即可。多媒体技术的发展给人类社会生活带来了深刻的变化,作为一门崭新的领域,多媒体技术刚开始兴起的时候的确风起云涌,发展迅速。然而,经历了早期的迅速发展期之后,多媒体技术的发展速度明显放缓。当前多媒体技术面临的如下几个重大挑战:多媒体流包含大量必须迅速处理的数据。 音频、视频和任何附加流必须同步开始和结束,并以相同的速度播放。数据流可能来自许多不同的地方,包括:本地媒体文件、计算机网络、陆地广播、录像机或其他媒体设备。存在多种格式,如:音频视频交叉存取(AVI)、高级数据流格式(ASF)、电影图片专业组(MPEG)、数码电视(DV)和电影JPEG(MJPEG)。程序无法知道终端用户系统上的硬件设备。针对以上这些问题,DirectShow提出了自己的解决方案.它的主要设计目的是用来简化Windows平台下多媒体程序的开发,避免了数据传输、硬件差别和同步播放的复杂。DirectShow包括了支持多媒体捕捉和调整设备的过滤器,其中调整过滤器是基于Windows驱动模型(WDM)的,象过滤器一样支持Windows传统视频(VFW)捕捉卡和视频压缩过滤器(VCM)接口。图1显示了一个程序中,DirectShow组件、一些DirectShow支持的硬件和软件组件之间的关系。图 1 DirectShow程序的构架【4】如图1所示,DirectShow使程序可以播放来自不同媒介的文件和数据流,包括本地文件、本地CD和DVD驱动器、网络上的远程文件和Windows传统视频捕捉卡。 DirectShow自带一些文件格式的压缩器和解压缩器,而且很多第三方的硬件和软件解码器也和DirectShow兼容。另外,DirectShow支持基于视频压缩管理器和音频压缩管理器接口的传统VFW多媒体数字信号解码器。图 2 DirectShow工作原理图【5】图2给出了DirectShow的工作原理图。其中,这里面有很多关于DirectShow的重要概念,这里将给予具体的说明。(1)过滤器(Filter)图2中大黑体方框为三个过滤器(Filter)。过滤器是DirectShow的基本组成部分。DirectShow将多媒体数据的处理过程分成分离的步骤,然后一个过滤器处理一个(或多个)步骤。这使应用程序可以将过滤器混合搭配从而对不同的媒体格式使用不同的硬件和软件设备执行不同种类的操作。虽然每一个过滤器都有内在完全不同的功能,但从应用程序的角度来看,它们都只是具有一定标准特征的DirectShow过滤器而已。这些标准特征包括:对IBaseFilter接口的支持和同一个或多个DirectShow过滤器连接的一个或多个输入/输出针脚。所有的DirectShow过滤器都可以大致归成以下三类:源过滤器,转换过滤器和渲染过滤器。当然,除此以外,还有一些具备其他特殊功能的过滤器,比如视频捕获程序要用到的SampleGrabber过滤器。(2)过滤器图(Filter Graph)图2中的大黑体方框就是一个过滤器图。过滤器图的定义相当简单,你可以认为一个过滤器图就是所用到的一系列过滤器的集合。当然,过滤器之间必须连接起来才是一个完整的过滤器图。(3)过滤器图管理器(Filter Graph Manager)图2中最上方的方框就代表着一个过滤器图管理器。可以认为过滤器图管理器是DirectShow中对过滤器图进行管理的COM组件。应用程序无需管理一个过滤器图中单个的过滤器,DirectShow提供一个叫做过滤器图管理器的高级部件来替你完成这个任务。过滤器图管理器控制通过图形的数据流动。你的应用程序只需调用某些高级API函数,比如“RUN”(移动数据以通过图形)或者“STOP”(停止数据流动),就可以了。如果你想更直接地得到流操作的控制权的话,你可以通过COM接口直接访问过滤器。过滤器图管理器会传递事件通告给应用程序,于是你的应用程序就可以响应这些事件,比如流的结束。 此外,过滤器图管理器简化了构造一个过滤器图的的过程。比如说,你可以指定一个文件名,然后过滤器图管理器就会根据这个文件名来播放那个文件。(3)引脚(Pin)图2中的过滤器都有出口或者入口,即是图中的A,B,C,D处,这一些都是Filter的Pin(针脚)。如图2所示,过滤器图中的多媒体数据从一个源过滤器开始,经过零个或多个中间过滤器向下级传输,最终到达渲染过滤器。针脚是处理过滤器间数据传输的底层细节.针脚是一个支持IPinCOM 接口的COM对象, 它有一个方向 (输入或输出), 而且它是和图中的一个特定过滤器相关连的. 针脚表示和另一个过滤器的连接点。上级过滤器中的输出针脚和下一个下级过滤器的输入针脚相连。针脚知道它们支持的媒体类型并会在两个过滤器初始连接时协商媒体类型。当媒体类型协商完成后,针脚会进一步商讨当过滤器图运行时如何传输数据。通过图2可以看出,一个典型的DirectShow应用程序要完成三个如下的基本步骤:1) 创建一个过滤器图管理器的实例。2) 使用过滤器管理器图来构造一个过滤器图。3) 控制过滤器图并响应事件。4.4 人脸检测原理人脸检测的方法有很多,本系统中我们使用了基于类Haar特征的层叠式分类器来实现人脸检测。4.4.1 类Haar特征类Haar特征【6】是由Papageorgiou等人在利用Haar小波变换从人脸中提取特征时,提出的局部Haar特征。类Haar特征通常由2至4个矩形组成,分别检测边界、细线或对角线特征。图3 典型的类Haar特征定义: (4-1)为矩形ri的权,RctSum(ri)所围图像的灰度积分,N是组成featurek的矩形个数。图3为4个典型的类Haar特征。其中A和B的特征值是两个具有相同大小和形状的水平或垂直排列的矩形区域的像素值之差,用于检测边界特征;C的特征值是左右两个矩形区域的像素值之和减去中间矩形区域的像素值,用于检测细线特征;D的特征值是由两个对角线上的矩形区域的像素和相减得到,用于检测对角线特征。类Haar特征的优点是计算方便,而且适于多分辨率分析。类Haar特征可以通过图像的快速积分算法快速计算。4.4.2 积分图像及其快速算法积分图像是指在点(x,y)的左上区域的所有像素的像素值之和,即 (4-2)其中,为积分图像,为原始图像。 (4-3)采用以上公式的递归算法可以计算出原始图像的积分图像,其中为每行像素值的累积和,。(a) (b)图4 积分图像算法使用积分图像的概念,任何一个原始图像上矩形区域的像素值之和均可由积分图像中相同的矩形区域的四个角的值来表示。如图4(b)所示,积分图像中点1的值代表了原始图像中区域A的像素值之和,积分图像中点2的值代表了原始图像中区域A+B的像素值之和,积分图像中点3的值代表了原始图像中区域A+C的像素值之和,积分图像中点4的值代表了原始图像中区域A+B+C+D的像素值之和。因此,两个矩形区域之间像素和的差值可以由8个角点的积分值计算。对于由两个矩形组成的类Haar特征(如34(A)、(B),只需通过6个点的值计算,三个矩形区域组成的需8个点,四个矩形区域也只需9个点。4.4.3 Intel IPP库中的Haar分类器Intel IPP(Integrated Performance Primitives)库中提供了现成的高速Haar分类器的C函数,利用该分类器我们能够很方便的搭建高速人脸检测模块。实验表明,在320x240的分辨率下,该分类器能够达到每秒15帧以上的检测速度。Intel IPP库中提供的基于类Haar特征的层叠式分类器的函数:1) HaarClassifierInitAlloc2) TiltedHaarClassifierInitAlloc3) HaarClassifierFree4) GetHaarClassifierSize5) TiltHaarFeatures6) ApplyHaarClassifier7) ApplyMixedHaarClassifier4.4.4 AdaBoost算法简介Boosting算法是20世纪90年代才提出来的,利用该算法可以将弱学习算法提升为强学习算法。利用某学习算法来识别一组概念,如果识别正确率很高,那么这组概念是强可学习的;如果识别正确率仅比随机猜测略好,那么这组概念是弱可学习的。Kearns和Valiant提出了弱学习算法与强学习算法的等价性问题,即是否可以将弱学习算法提升成强学习算法。如果两者等价,那么在学习概念时,只要找到一个比随机猜测略好的弱学习算法,就可以将其提升为强学习算法,而不必直接去找通常情况下很难获得的强学习算法。AdaBoost算法【7】是Freund等人在Boosting算法的基础上提出的,其主要思想是给定一弱学习算法和一训练集(x1,y1),(x2,y2),(xn,yn)。这里xi为第i个训练样本的输入,yi为分类问题的类别标志。算法开始先给每一个训练样本赋以相等的权值1/n,然后用该学习算法对训练集训练T轮,每次训练后,对训练失败的训练样本赋以较大的权值,也就是让学习算法在后续的学习中集中对比较难的训练样本进行学习,从而得到一个预测函数序列h1,h2,hT,其中hj也有一定的权值,预测效果好的预测函数的权值较大,反之较小。最终的预测函数H采用有权值的投票方式对新样本进行判别。4.4.5 层叠式分类器层叠式分类器是一个退化的决策树结构,树的每一个结点为一个训练好的分类器,该分类器可以剔除部分非目标模式,并检测出所有目标模式(如人脸等),而且该分类器的正确目标识别率(hit rate,将目标模式归类为正确目标)非常高(接近100%),误检率(false alarm rate,将非目标模式归类为正确目标)则在一个比较高的水平(如3040%)。如图5所示为一个有N个节点的层叠式分类器,假设每个分类器(结点)可以识别出50%的非目标模式且只有0.2%的目标模式被错误分类,即f=0.5,h=0.998。在N=13时,我们可以得到其误检率为,识别正确率为。也就是说,经过了13个结之后,正确的目标模式有97%被保留了下来,而错误的目标模式只有不到0.01%被保留下来。图 5 层叠式分类器利用AdaBoost算法,我们只需要从所有特征中选出其中一个,训练出一组比随机猜测略好一点的分类器,按照权重组合成一个层叠式分类器。在AdaBoost的每一次迭代中,最好的分类器不断地被加入进来,随着迭代次数的增加,分类器数量也逐渐增加,直到达到所需要的误检率为止。4.4.6 人脸特征的选取构造一个基于AdaBoost算法的层叠式分类器,其正确目标识别率为95%,误检率为1/14084,从200个类Haar特征中选取出适合用于人脸检测的特征。Viola等的实验结果表明,在这些特征中,最适合于人脸检测的是“人的眼睛所在的矩形区域比眼睛以下的面颊区域的灰度值小”,这个特征主要对用于检测的特征窗口的大小比较敏感,而对人脸的大小及其在图像中所处的位置不太敏感;而排在第二位的特征是“两只眼睛的灰度值比两眼中间的鼻梁的灰度值要小”。图6 AdaBoost算法选出的排在前两位的特征在实际训练时,我们采用一个简单的方法来训练一个高效的分类器。从单一特征开始,不断地在每一阶的弱分类器中加入特征,直到该阶弱分类器的正确目标识别率和误检率达到预先设定的要求;然后逐渐加大分类器的阶数,直到总体的正确目标识别率和误检率达到设计的要求为止。4.5 图像预处理由于摄像头传送到电脑上的是视频信号,要对处理这些视频,必须对视频的每一帧图像进行分析。然而每一帧图像都是彩色图像,里面携带了很多对系统用处不大的信息,分析处理起来比较麻烦,因此应该首先对所采集到的人脸图像进行预处理。因为眼睛只可能出现在上半脸,故只取人脸图像的上半部分进行处理即可。预处理流程如图7:同态滤波调整阈值二值化形态学滤波灰度化图7 预处理流程图4.5.1 灰度化灰度图(GrayScale)是指只含亮度信息,不含色彩信息的图像。灰度化处理是把含有亮度和色彩的彩色图像变换成灰度图像的过程。灰度化处理在许多图像处理中是很重要的一步,他的结果就是后续处理的基础。本系统判断驾驶员是否处于疲劳状态的的准则是驾驶员眨眼情况和眼睛开合度,跟驾驶员的脸色无关,因此为了简化图像处理的运算量,要对摄像头传送过来的帧图像进行彩色转成灰度级为256的灰度图像。彩色图像都是有红、绿、蓝三原色构成的。由于人眼对颜色的敏感度不一样,因此在转换成灰度图的时候,三原色的权值就不一样了。具体的转换公式如(4-4): (4-4)OpenCV中已经包含了彩色图转换成灰度图的函数,因此可以直接引用函数cvCvtColor(leftimg,gray,CV_BGR2GRAY);其中,leftimg为彩色图像,gray为转换后的灰度图,CV_BGR2GRAY彩色图转灰度图的入口指令标记。4.5.2 同态滤波为了消除不均匀照度的影响,增强图像的细节,可以采用建立在频域内的同态滤波器对光照不足的或有光照变化的图象进行处理【8】。可以减少因光照不足引起的图像质量下降,并对感兴趣的景物进行有效增强,这样就在很大程度保留图像原貌的同时对图像细节增强。同态滤波效果如图8a) 原图 b)巴特沃思高通滤波 c)同态滤波图8图像处理效果图从图像处理效果中可看出,巴特沃思高通滤波器突出了部分细节部分的变化,,但是图像整体灰度级的变化减少,反而使得暗处图像(人脸后窗格)更加不清晰.。对于同一幅图像,再采用同态滤波后,可以看到既起到了压缩图像动态范围又增强了细节,尤其是暗处细节(人脸后窗格) 。同态滤波算法由如下式表示: (4-5)式中x,y分别为横坐标和纵坐标,T(x,y)为坐标为(x,y)的点的反射率,S(x,y)为滤波前的值,I(x,y)为该点的光照强度,它的值是通过令原图像与一个较大的低通滤波器模板卷积得到: (4-6)式中2N+1用于描述低通滤波器模板的阶数,本设计中对于320x240的图像,取N=10。在得到反射率的图像后,根据反射率的最低值EyeReflectMin,动态调整二值化的阈值为Thresh = (EyeReflectMin+EyeReflectThresh)。其中EyeReflectThresh根据实验结果进行选取,本设计中取EyeReflectThresh = 255。具体同态滤波函数如下:for (int m =10; m height/2-10; m+)for (int n = 10; n width-10; n+)int SumBrightness = 0;for (int m2 = -10; m2 = 10; m2+)for (int n2 = -10; n2 = 10; n2+)SumBrightness += Gray(m + m2)* graystep + (n+n2);EyeBrightness = SumBrightness / 441;/以极低通滤波器(卷积模版为*21的阶跃正方形)对图像滤波,所得结果为图像的环境光照。EyeReflectmn = 256*Graym*graystep+n / EyeBrightness;/图像除以环境光照即为物体本身的反射率。if (EyeReflectmn EyeReflectMin)EyeReflectMin = EyeReflectmn;/寻找反射率的最小值(即最黑的一点)作为二值化的参数for (int m = 10; m height/2-10; m+)for (int n = 10; n width-10; n+)if (EyeReflectmn 240)EyeReflectThresh-; /白色像素大于,阈值降低 return 0;else if(Area(b)(c) (a) (b) (c)图9 不同的二值化阈值下的二值化效果4.5.4 形态学滤波二值化后的图像如图10 所示(较高反射率的区域二值化为黑色,反之则为白色。通俗的讲:即得到的图和真实的刚好相反。比较暗的部分就变成白色,比较亮的部分反而变成黑色。):图10 二值化后的图像可见在二值化之后眼睛的区域块已经初步显现出来了,接下来进行形态学滤波【9】中的闭运算,消除一些毛躁的现状,使眼睛部分的白色块尽量闭合,其滤波效果如图11:图11 形态学滤波后的结果4.6 人眼定位4.6.1 人眼初定位人眼的外部轮廓可以看作是由上下两段圆弧围成,眼球则可以看成是内接的不完整圆形黑块块,其几何特征如图 所示。根据人脸五官的普遍性和对称性,人眼的位置一般只可能出现在人脸的固定的一个区域范围,因此设定人脸区域上的一个相对位置,就可以大概把眼睛的区域截取出来。这部分区域可能包含有眼眶、眉毛还有部分头发。得到这部分信息以后,就可以对人眼进行进一步提取了。图12 人眼的几何特征我们定义的这个区域大小为37*33,对于上半脸图像区域来说,截取空间的相对起始坐标为(25,13)。4.6.2 眼球提取眼睛初定位之后的如图13所示。从图上可以看出,采用相对坐标人眼定位,只是初步把眼睛的区域寻找出来,图中除了有需要提取的眼球之外,还有眉毛和部分眼眶边缘等杂点存在,因此要把这些干扰信息给去除掉。本系统采用的方法是用图像区域生长【10】的方法提取眼球。(1)眼睛区域生长点定位要使经过区域生长后能把眼球完整提取出来,找好一个合理的区域生长点是十分关键的。本系统采用分别在横坐标和纵坐标上算积分投影的方法,分别找出X轴和Y轴上有最大积分值的横坐标值和纵坐标值,这两个值组合成的坐标点就是要寻找的区域生长点。步骤分别如下:a) 分别计算眼睛部分左右眼图像白色像素在垂直和水平方向上的积分投影。图 13 初步定位后的眼图b) 垂直方向上的积分在X坐标轴上的投影会产生一个峰值,以产生这个峰值所在的横坐标点,作为区域生长点的横坐标。水平方向上的积分在Y坐标轴上的投影会有两个峰值,其中选取从下往上第一个峰值所在的纵坐标点,作为区域生长点的纵坐标。这样,区域生长点就确定了。 采用这种方法来确定区域生长点的好处是,基本可以确定区域生长点在眼球范围内,如果区域生长点不在眼球内的话,那么就没办法提取出眼球了。(2)区域生长区域生长(region growing)是指将成组的像素或区域发展成更大区域的过程。从种子点的集合开始,从这些点的区域增长是通过将与每个种子点有相似属性像强度、灰度级、纹理颜色等的相邻像素合并到此区域。它是一个迭代的过程,这里每个种子像素点都迭代生长,直到处理过每个像素,因此形成了不同的区域,这些区域它们的边界通过闭合的多边形定义。由于做区域生长的对象只是二值化图像,因此区域生长的相似属性只有灰度级。效果如图14所示:图14 提取出眼球的效果区域生长的代码如下:void FindThresh_1(int m,int n,int widthstep,LPBYTE GRAY1,LPBYTE GRAY2,int height,int wide)GRAY1m*widthstep+n=0; GRAY2m*widthstep+n=255;if(height-1)m & m1 & (wide-1)n & n1)if (GRAY1(m-1)*widthstep+n-1 thresh) ) FindThresh_1(m - 1, n - 1,widthstep,GRAY1,GRAY2,height,wide); if (GRAY1(m-1)*widthstep+n thresh) ) FindThresh_1(m - 1, n,widthstep,GRAY1,GRAY2,height,wide);if (GRAY1(m-1)*widthstep+n+1 thresh) ) FindThresh_1(m - 1, n+1,widthstep,GRAY1,GRAY2,height,wide);if (GRAY1m*widthstep+n-1 thresh) FindThresh_1(m, n - 1,widthstep,GRAY1,GRAY2,height,wide); if (GRAY1m*widthstep+n+1 thresh) ) FindThresh_1(m, n +1,widthstep,GRAY1,GRAY2,height,wide); if (GRAY1(m+1)*widthstep+n-1 thresh) FindThresh_1(m+1), n -1,widthstep,GRAY1,GRAY2,height,wide); if (GRAY1(m+1)*widthstep+n thresh) ) FindThresh_1(m+1), n ,widthstep,GRAY1,GRAY2,height,wide);if (GRAY1(m+1)*widthstep+n+1 thresh) ) FindThresh_1(m+1), n +1,widthstep,GRAY1,GRAY2,height,wide);其中:m, n为生长点的横坐标与纵坐标;widthstep为图像步长;GRAY1为待处理图像;GRAY2为处理后图像;height,wide为图像的高度和宽度。经过二值化区域生长处理之后,就可以把眼球的色块都完整提取出来,眼球中心因为瞳孔反光产生的杂点,眼球外部的眉毛、眼眶等杂点都全部去除掉。经过这一步骤,眼球就完全提取出来,可以进行眼睛开合状态的判断了。4.7 眼睛状态判断 在经过同态滤波和二值化处理后,睁开眼睛与闭合眼睛的图像在竖直方向积分的最大值有很大的区别。正常睁开的眼睛,在某一个竖直方向上的白点数目至少有7个以上,而闭合的眼睛相应的白点数只有3个以下。根据这些积分值的差别可以很稳定地区分眼睛睁开与闭合两种状态。 闭合 睁开图15 提取出的眼睛的开闭状态4.8 疲劳状态判别通常来说,在平时人的眼睛平均每分钟眨眼15次左右,即平均20秒钟内眨眼为5次左右,若超过8次,则眼睛明显是出现疲劳状态【11】。如果人处于清醒状态,每次眨眼所需要的时间大概为0.2秒左右,当眨眼时,眼睛闭合时间长于1秒,则说明这个人的精神状态并不佳。根据上面的结论,本系统对于疲劳状态的判别,主要有两种方法:第一种是在20秒钟内对眨眼次数进行统计,第二种是在预设定的帧数内统计眼睛的开合状态。在第一种方法中,当在20秒钟内驾驶员眨眼次数超过8次的话,就会认为驾驶员有疲劳的征兆,系统发出一次警告。在第二种方法中,当在预设定帧数内,判断出驾驶员的眼睛状态都是处于闭合的话,也会认为驾驶员有疲劳征兆,系统也会发出一次警告。当疲劳警告超过8次的时候,就会认为驾驶处于深度疲倦状态,系统就会执行自动减速控制。4.8.1 行车记录本系统可以实时记录行车状况,包括当前时间、行车速度、眼睛闭合时间过长警告、眨眼过于频繁警告、当前眨眼时间、自动减速装置状态等都有详细记录。记录情况如表1 表1 行车记录表Time:Speed:(km/h)CloseEyeTimesHigh-FrequencyWarmingBlinkTimesDecelerate05/13/09/18:27:1300000F05/13/09/18:27:311000000F05/13/09/18:27:371500002F05/13/09/18:33:542000007F05/13/09/18:36:402002130F05/13/09/18:36:531957180T05/13/09/18:37:13957181T其中:Time:当前时间;Speed:当前行车速度;CloseEye Times:眼睛闭合时间过长警告次数;High-Frequency:眨眼时间过于频繁警告次数;Warming:总警告次数,当达到8次为上限;Blink Times:当前眨眼次数;Decelerate:自动减速控制状态。当值为F时,自动减速控制关闭,当值为T时,自动减速控制启动。5 系统流程与构建5.1 硬件流程摄像头截取图像计算机视觉处理显示器显示结果5.2 软件流程5.2.1 眼睛检测系统流程速度检测是否超过阀值N启动摄像头捕捉图像人脸检测二值化同态滤波图像数据处理,检测眼睛状态闭眼时间过长发出警告YNY眨眼过于频繁发出警告NY警告次数超过8次自动减速NY5.2.2 行车记录流程图1s时间到NY记录行车数据20s到眨眼次数超过8次YN发出警告车在减速向后面的车发出警告YN车停止减速向后面的车发出警告NYN5.3 系统构建本系统以Microsoft Visual Studio 2005为开发平台,所使用的编程语言为C+。程序完成人脸图像的采集、检测、预处理,眼睛的定位、提取、状态判断,以及计算眨眼次数和闭眼时间,并根据检测结果在界面上作出相应措施示意的全过程,由于C+具有代码效率高,内存操作方便和功能强大的特点,所以能够弥补图像处理中数据量大、操作复杂、耗时长等带来的不便。再加上利用已开发好的关于图像处理的库函数,程序的效率更高,开发周期更短,系统更稳定。本系统运行测试的建立环境为:l 图像采集:普通USB摄像头l 图像分别率:320240(即摄像头监视区域大小)l CPU:P4 3.0G以上l 内存:512MB以上l 软件开发平台:Microsoft Visual 20055.4 界面介绍本系统的界面是用Microsoft Visual Studio 2005软件下面的MFC项目生成的,以下为系统的界面介绍: 视频显示框,视频中蓝色方框为跟踪人脸跟踪框。 通过人脸自动跟踪截取出归一化后的脸图,再经过同态滤波二值化后的图像。 经过自动扑捉眼睛区间,再用区域生长把眉毛干扰去掉后的眼图。 左右两只眼在竖直方向的最大积分值,用于判断眼睛的开合度。数值超过5判断为开,小于5判断为闭。 复位键用于初始化系统的各项数据,包括眨眼次数、警告次数、自适应光照的二值化阈值校准,还有关闭警告声。 自适应光照的二值化的参考值,当初始化的时候,如果这个数值较大,那么阈值就会降低,如果该数值比较小,阈值就会提高。 调节检测速率,可以设置闭眼警告的时间,当检测速率与每秒帧数相等时,则眼睛闭和超过1秒钟系统就会发出警告。 自适应光照,当按下该按钮时,二值化阈值会初始化,然后自动进行自适应光照的二值化阈值校准。 警告提示。当没有警告的时候,文本框会显示“正常”;当出现眨眼过于频繁警告的时候,文本框会显示“频繁眨眼”的警告;当眼睛闭合过长的时候,文本框会显示“闭眼过长”的警告;当自动减速系统启动的时候,文本框会显示“减速”。 警告总次数,当次数达到8次后,进度就会满格。 当前车速显示,可以从0到250km/h间拖动,当车速超过50km/h时,监测系统启动,当警告总次数达到8次时,车速示意条会自动往左移动,示意自动减速装置启动。当前时间,格式为:年/月/日/时:分:秒。图16 系统界面6 系统测试6.1 测试方案概述测试目的:测试系统各项功能是否实现,系统各项指标是否达标;测试步骤:为测试本系统各个功能是否已经实现,分别进行以下四项测试:(1) 300帧内正确识别眼睛状态的次数(2)把摄像头的帧速率设置为15
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025企业购车按揭合同
- 2025【各类商业合作范本】-【专业合同协议模板库】国内专利技术转让合同
- 新人教版必修第四章《细胞的物质输入和输出》教学设计
- 公考西藏真题2025
- 2024年二年级品生下册《我喜欢美好的环境》说课稿 鄂教版
- 马鞍山事业单位笔试真题2025
- 化肥厂办公用品分类细则
- 居民健康医疗服务合同协议
- 高中语文 第四单元 第12课 飞向太空的航程说课稿1 新人教版必修1
- 5.1.降低化学反应活化能的酶教学设计-2023-2024学年高一上学期生物人教版必修一
- 仅销售预包装食品经营者备案信息采集表
- EDA技术概述获奖课件
- 当兵保密协议
- 中小学校园食品安全主题班会课件
- 汽车加油加气站消防安全管理
- DL∕T 1919-2018 发电企业应急能力建设评估规范
- GB/T 24861-2024水产品流通管理技术规范
- 一年级古诗70首(拼音打印)
- DZ∕T 0283-2015 地面沉降调查与监测规范(正式版)
- 人事专员简历模板
- 围手术期安全管理
评论
0/150
提交评论