基于睡意检测的安全驾驶保障系统(Haar PERCLOS)
基于睡意检测的安全驾驶保障系统研究与
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
基于睡意检测的安全驾驶保障系统研究与设计
摘要
随着计算机图像处理技术的发展,利用图像处理技术来监控驾驶员的行为已经成为可能。利用摄像头持续不断地检测驾驶员的眼睛,提取其特征信息,可以较为有效地分析出驾驶员的精神状况。
本设计是通过在视频中对人脸进行自动跟踪,找出眼部图像,然后进行一系列图像处理,最后得到眼睛的二值化图像,从而判断出眼睛开合状态。总体设计
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
包括图像预处理、人脸检测、人眼定位、人眼状态判断以及疲劳状态分析等主要步骤模块。最后根据采集的数据判断出驾驶员是否出现疲倦,并在出现疲倦特征的时候做出警告。
关键词:人脸检测,OpenCV,Haar分类器,同态滤波,区域生长,疲劳度检测
基于睡意检测的安全驾驶保障系统研究与设计
目录
1 前言 .................................................................................................................................... 1
2 系统方案 .................................................................................................................................. 1
2.1 图像处理器方案 .......................................................................................................... 2 2.2 软件方案 ...................................................................................................................... 2 2.3 整体方案 ...................................................................................................................... 2 2.4 特色 .............................................................................................................................. 2
3 实现原理 .................................................................................................................................. 2
3.1 OpenCV简介 ................................................................................................................. 3 3.2 IPP简介 ....................................................................................................................... 3 3.3 JMF视频捕捉技术 ....................................................................................................... 3 3.4 人脸检测原理 .............................................................................................................. 4
3.4.1 类Haar特征 .................................................................................................... 4
3.4.2 积分图像及其快速算法 .................................................................................. 5
3.4.3 Intel IPP库中的Haar分类器 ..................................................................... 6
3.4.4 AdaBoost算法简介 ......................................................................................... 6
3.4.5 层叠式分类器 .................................................................................................. 6
3.4.6 人脸特征的选取 .............................................................................................. 7 3.5 图像预处理 .................................................................................................................. 8
3.5.1 灰度化 .............................................................................................................. 8
3.5.2 同态滤波 .......................................................................................................... 9
3.5.3 自适应光照强度 ............................................................................................ 10
3.5.4 形态学滤波 .....................................................................................................11 3.6 人眼定位 .................................................................................................................... 12
3.6.1 人眼初定位 .................................................................................................... 12
3.6.2 眼球提取 ........................................................................................................ 12
3.6.3 眼睛状态判断 ................................................................................................ 14
3.6.4 疲劳状态判别 ................................................................................................ 15 4 系统构建和界面介绍 ............................................................................................................ 15
I
基于睡意检测的安全驾驶保障系统研究与设计
4.1 系统构建 .................................................................................................................... 16
4.2 界面介绍 .................................................................................................................... 16 5 系统测试 ................................................................................................................................ 16
5.1 测试方案概述 ............................................................................................................ 16
5.2 测试设备 .................................................................................................................... 17
5.3 测试数据 .................................................................................................................... 17
5.4 结果分析 .................................................................................................................... 18 参 考 文 献 .............................................................................................................................. 19
II
基于睡意检测的安全驾驶保障系统研究与设计
1 前言
近年来,随着人们生活水平的提高、城市化的加速以及经济的快速发展,汽车进入了我们的日常生活并成为我们出行最便利的交通工具之一,给我们提供了极大的方便。但是与此同时也带了很多的问题,其中之一便是交通事故发生量居高不下。据世界卫生组织统计,全世界每年有120多万人死于交通事故,数百万人受伤或致残。全球每年交通事故造成的经济损失高达5180亿美元,其中发展中国家占1000亿美元。同时有资料
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
明,高速公路发生的交通事故中,有50%以上是由于长时间疲劳驾驶或所见目标单调使司机注意力不集中、甚至打瞌睡等原因造成的。
要降低交通意外的发生,最重要的一个途径就是防止驾驶员疲劳驾驶。而要防止疲劳驾驶,最重要的一点是要时刻监测着驾驶员的精神状况。从人体疲劳特征的研究结果看,疲劳驾驶的典型反应包括:眼帘的频繁眨动;瞳孔逐渐变小,甚至闭合;哈欠增多;头部前倾或后仰;方向盘微调,驾车左右摇摆;反应能力下降等。
目前, 已有一些简单实用的疲劳测评方法,如脑电图EEG、肌电图EMG、眼动图EOG、瞳孔测量计等,但这些方法都是接触式的疲劳检测方法,势必会给驾驶员造成一定的影响。为了尽量减少对驾驶员的影响,采取的疲劳检测方法最好是非接触式的。通过摄像头捕捉驾驶员的动作特征来检测驾驶员的精神状况,则是最好的非接触式检测方法,因为在车厢内安装监控摄像头对驾驶员机会是没有影响的。
从以上各种疲劳驾驶典型反应来看,监测瞳孔变化的难度很大,监测头发运动状况,方向盘微调等又很难用一个量化的标准去衡量。而监测眼睛眨动状态比较容易跟踪,眨眼次数和眼睛闭合情况也可以很清晰地监测出来。因此,通过监测眼睛状态来判断驾驶员是否处于疲劳状态这种方法,相对来说是最有效最直观的。
2 系统方案
基于睡意检测的安全驾驶保障系统通过视频采集设备获得驾驶员实时图像,自动分析驾驶员的头部姿态、眼睛运动规律以及面部特征等信息来确定驾驶员精神状态,并给出相应的预警提示。研究表明,相比脸部或头部运动规律而言,眼睛的活动规律,如眨眼频率、眨眼快慢、眼睛张开幅度以及眼睛的注视方向等能更好地反映出当前时刻实验对象的精神状态好坏。 因此,如果能够获得每一帧图像中的双眼大小、位置信息以及运动变化,就可以将一段时间内驾驶员的眼部活动规律统计出来,结合疲劳状态分析指标,就能够对驾驶员疲劳状态进行评价。综上所述,我们系统的总体设计包含了以下几个方
第 1 页 共 20 页
基于睡意检测的安全驾驶保障系统研究与设计
面的内容:获取视频流帧、图像预处理、人脸检测、人眼定位、眼睛状态判断、疲劳分析、结果分析。
2.1 图像处理器方案
本系统选择使用PC机。因为PC机的运算能力足够快,内存空间也足够大,符合图像处理的要求。而且在PC平台上,有不少关于图像处理和视觉识别方面的函数库可以去调用,可以大大地减轻了开发难度和开发成本。
2.2 软件方案
采用模式识别的方式在图像中先找出人脸的位置,并对人脸进行追踪,在归一化后的人脸图中根据眼睛在脸部的相对位置,基本能找出眼睛的位置。再对眼睛图像进行一系列的图像处理,最后通过处理得到的二值化图像判断眼睛的开合度。
由于人脸在整个图像中所占的比例比较大,追踪起来比较容易,检测的准确率相对比较高。而通常驾驶员在驾驶的过程中头部摆动的角度都比较小的,根据眼睛在脸部的相对位置,基本能找出眼睛的位置。
2.3 整体方案
系统通过摄像头来获取像素为320*240,帧速率为每秒15帧的影像后,传送给计算机。计算机在图像中用Haar分类器自动追踪到人脸,之后把截得到的人脸图像进行大小归一化处理,然后通过图像的绝对坐标找出人眼的位置。分离出左右眼的图像,再分别对左右眼的灰度图进行同态滤波处理,以消除光照影响。然后进行二值化处理,再对眼球中心位置进行区域生长,以消除眉毛的干扰,这样就可以把眼球提取出来。最后通过计算眼球在横坐标上的投影,找出眼球的最大高度,设定一个阈值,用这个高度阈值就可以判断出眼睛的开合状态。通过采集分析眼睛在一段时间内的数据,包括闭眼和半开半闭的持续时间,还有眨眼次数,这样就可以比较科学地判断出人的精神状态,提前对驾驶员将要出现的困倦进行预警。
2.4 特色
1、利用Haar特征分类器自动跟踪人脸
2、利用积分投影算法,检测判别人眼开合状态
3 实现原理
首先通过摄像头获取图像,然后通过Myeclipse结合OpenCV和IPP对图像进行处理。
第 2 页 共 19 页
基于睡意检测的安全驾驶保障系统研究与设计
本系统是使用基于类Haar特征的层叠式分类器来实现人脸检测,然后对人脸图像进行同态滤波,消除光照影响后进行二值化,再在二值化的图像上截取人眼图像,通过眼睛图像的一系列特征,判断是开眼还是闭眼。在对一定帧数内的开眼闭眼次数经行统计后,根据统计结果判断人是否处于困倦状态。
3.1 OpenCV简介
OpenCV是Intel公司支持的开源计算机视觉库。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法。 OpenCV 具有以下三个特点:
1、拥有包括 300 多个C函数的跨平台的中、高层 API。它不依赖于其它的外部库——尽管也可以使用某些外部库。
2、对非商业应用和商业应用都是免费的。
3、为Intel Integrated Performance Primitives (IPP) 提供了透明接口。这意味着如果有为特
定处理器优化的的 IPP 库,OpenCV 将在运行时自动加载这些库。 3.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 ,使用者除了不需要担心平台兼容性的问题,更节省了开发成本以及研发时间,使用者可以轻轻松松移植原有应用程序。
3.3 JMF视频捕捉技术
JMF是一个标准的扩展框架,允许用户制作纯音频流和视频流。JMF 技术提供了先进
第 3 页 共 19 页
基于睡意检测的安全驾驶保障系统研究与设计
的媒体处理能力,从而扩展了Java平台的功能。这些功能包括:媒体捕获、压缩、流转、回放,以及对各种主要媒体形式和编码的支持,如M-JPEG、H.263、MP3、RTP/RTSP (实时传送协议和实时流转协议)、Macromedias Flash、IBM的HotMedia和Beatniks的Rich Media Format (RMF)等。
JMF捕获媒体数据需要做以下工作。1.定位所需要用的捕获设备,可以通过查询CaptureDeviceManager来定位。2.获取这个捕获设备的信息CaptureDeviceInfo对象。3.从CaptureDeviceInfo对象中获取捕获设备的位置Medialocator。4.利用MediaLocator创建DataSource。5.使用DataSource创建Player或是Processor。6.然后启动Player就开始了媒体的捕获。
3.4 人脸检测原理
人脸检测的方法有很多,本系统中我们使用了基于类Haar特征的层叠式分类器来实现人脸检测。
3.4.1 类Haar特征
类Haar特征是由Papageorgiou等人在利用Haar小波变换从人脸中提取特征时,提出的局部Haar特征。类Haar特征通常由2至4个矩形组成,分别检测边界、细线或对角线特征。
图1 典型的类Haar特征
定义:
feature,,RctSum(r),kii
i,(1,?,N)
,,Ri为矩形ri的权,RctSum(ri)所围图像的灰度积分,N是组成featurek的矩形个数。图3为4个典型的类Haar特征。其中A和B的特征值是两个具有相同大小和形状
第 4 页 共 19 页
基于睡意检测的安全驾驶保障系统研究与设计
的水平或垂直排列的矩形区域的像素值之差,用于检测边界特征;C的特征值是左右两个矩形区域的像素值之和减去中间矩形区域的像素值,用于检测细线特征;D的特征值是由两个对角线上的矩形区域的像素和相减得到,用于检测对角线特征。
类Haar特征的优点是计算方便,而且适于多分辨率分析。类Haar特征可以通过图像的快速积分算法快速计算。
3.4.2 积分图像及其快速算法
积分图像是指在点(x,y)的左上区域的所有像素的像素值之和,即
ii(x,y),i(x',y'),
x',x,y',y
ii(x,y)i(x,y)其中,为积分图像,为原始图像。
s(x,y),s(x,y,1),i(x,y)
ii(x,y),ii(x,1,y),s(x,y)
s(x,y)采用以上公式的递归算法可以计算出原始图像的积分图像,其中为每行像素
s(x,,1),0,ii(,1,y),0值的累积和,。
(a) (b)
图2 积分图像算法
使用积分图像的概念,任何一个原始图像上矩形区域的像素值之和均可由积分图像中相同的矩形区域的四个角的值来表示。如图2(b)所示,积分图像中点1的值代表了原始图像中区域A的像素值之和,积分图像中点2的值代表了原始图像中区域A+B的像素值之和,积分图像中点3的值代表了原始图像中区域A+C的像素值之和,积分图像中点4的值代表了原始图像中区域A+B+C+D的像素值之和。因此,两个矩形区域之间像素和的差值可以由8个角点的积分值计算。对于由两个矩形组成的类Haar特征(如34(A)、(B)),只需通过6个点的值计算,三个矩形区域组成的需8个点,四个矩形区域也只需
第 5 页 共 19 页
基于睡意检测的安全驾驶保障系统研究与设计
9个点。
3.4.3 Intel IPP库中的Haar分类器
Intel IPP(Integrated Performance Primitives)库中提供了现成的高速Haar分类器的C函数,利用该分类器我们能够很方便的搭建高速人脸检测模块。实验表明:在320x240的分辨率下,该分类器能够达到每秒15帧以上的检测速度。 Intel IPP库中提供的基于类Haar特征的层叠式分类器的函数:
1) HaarClassifierInitAlloc
2) TiltedHaarClassifierInitAlloc 3) HaarClassifierFree
4) GetHaarClassifierSize
5) TiltHaarFeatures
6) ApplyHaarClassifier
7) ApplyMixedHaarClassifier
3.4.4 AdaBoost算法简介
Boosting算法是20世纪90年代才提出来的,利用该算法可以将弱学习算法提升为强学习算法。利用某学习算法来识别一组概念,如果识别正确率很高,那么这组概念是强可学习的;如果识别正确率仅比随机猜测略好,那么这组概念是弱可学习的。Kearns和Valiant提出了弱学习算法与强学习算法的等价性问题,即是否可以将弱学习算法提升成强学习算法。如果两者等价,那么在学习概念时,只要找到一个比随机猜测略好的弱学习算法,就可以将其提升为强学习算法,而不必直接去找通常情况下很难获得的强学习算法。
AdaBoost算法是Freund等人在Boosting算法的基础上提出的,其主要思想是给定一弱学习算法和一训练集(x1,y1),(x2,y2),„,(xn,yn)。这里xi为第i个训练样本的输入,yi为分类问题的类别标志。算法开始先给每一个训练样本赋以相等的权值1/n,然后用该学习算法对训练集训练T轮,每次训练后,对训练失败的训练样本赋以较大的权值,也就是让学习算法在后续的学习中集中对比较难的训练样本进行学习,从而得到一个预测函数序列h1,h2,„,hT,其中hj也有一定的权值,预测效果好的预测函数的权值较大,反之较小。最终的预测函数H采用有权值的投票方式对新样本进行判别。 3.4.5 层叠式分类器
第 6 页 共 19 页
基于睡意检测的安全驾驶保障系统研究与设计
层叠式分类器是一个退化的决策树结构,树的每一个结点为一个训练好的分类器,该分类器可以剔除部分非目标模式,并检测出所有目标模式(如人脸等),而且该分类器的正确目标识别率(hit rate,将目标模式归类为正确目标)非常高(接近100%),误检率(false alarm rate,将非目标模式归类为正确目标)则在一个比较高的水平(如30~40%)。如图5所示为一个有N个节点的层叠式分类器,假设每个分类器(结点)可以识别出50%的非目标模式且只有0.2%的目标模式被错误分类,即f=0.5,h=0.998。在N=13
13130.5,1.2e,040.998,0.97时,我们可以得到其误检率为,识别正确率为。也就是说,经过了13个结之后,正确的目标模式有97%被保留了下来,而错误的目标模式只有不到0.01%被保留下来。
图4 层叠式分类器
利用AdaBoost算法,我们只需要从所有特征中选出其中一个,训练出一组比随机猜测略好一点的分类器,按照权重组合成一个层叠式分类器。在AdaBoost的每一次迭代中,最好的分类器不断地被加入进来,随着迭代次数的增加,分类器数量也逐渐增加,直到达到所需要的误检率为止。
3.4.6 人脸特征的选取
构造一个基于AdaBoost算法的层叠式分类器,其正确目标识别率为95%,误检率为1/14084,从200个类Haar特征中选取出适合用于人脸检测的特征。Viola等的实验结果表明,在这些特征中,最适合于人脸检测的是“人的眼睛所在的矩形区域比眼睛以下的面颊区域的灰度值小”,这个特征主要对用于检测的特征窗口的大小比较敏感,而对人脸的大小及其在图像中所处的位置不太敏感;而排在第二位的特征是“两只眼睛的灰度值比两眼中间的鼻梁的灰度值要小”。
第 7 页 共 19 页
基于睡意检测的安全驾驶保障系统研究与设计
图5 AdaBoost算法选出的排在前两位的特征
在实际训练时,我们采用一个简单的方法来训练一个高效的分类器。从单一特征开始,不断地在每一阶的弱分类器中加入特征,直到该阶弱分类器的正确目标识别率和误检率达到预先设定的要求;然后逐渐加大分类器的阶数,直到总体的正确目标识别率和误检率达到设计的要求为止。
3.5 图像预处理
由于摄像头传送到电脑上的是视频信号,要对处理这些视频,必须对视频的每一帧图像进行分析。然而每一帧图像都是彩色图像,里面携带了很多对系统用处不大的信息,分析处理起来比较麻烦,因此应该首先对所采集到的人脸图像进行预处理。
因为眼睛只可能出现在上半脸,故只取人脸图像的上半部分进行处理即可。预处理
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
如图6:
灰同态调整二形态
滤波 阈值 度值学滤
化 化 波
图6 预处理流程图
3.5.1 灰度化
灰度图(GrayScale)是指只含亮度信息,不含色彩信息的图像。灰度化处理是把含有亮度和色彩的彩色图像变换成灰度图像的过程。灰度化处理在许多图像处理中是很重要的一步,他的结果就是后续处理的基础。
本系统判断驾驶员是否处于疲劳状态的的准则是驾驶员眨眼情况和眼睛开合度,跟
第 8 页 共 19 页
基于睡意检测的安全驾驶保障系统研究与设计
驾驶员的脸色无关,因此为了简化图像处理的运算量,要对摄像头传送过来的帧图像进行彩色转成灰度级为256的灰度图像。
彩色图像都是有红、绿、蓝三原色构成的。由于人眼对颜色的敏感度不一样,因此在转换成灰度图的时候,三原色的权值就不一样了。具体的转换公式如:
Gray,0.3,Red,0.59,Green,0.11,Blue
OpenCV中已经包含了彩色图转换成灰度图的函数,因此可以直接引用函数:
cvCvtColor(leftimg,gray,CV_BGR2GRAY);
其中,leftimg为彩色图像,gray为转换后的灰度图,CV_BGR2GRAY彩色图转灰度图的入口指令标记。
3.5.2 同态滤波
为了消除不均匀照度的影响,增强图像的细节,可以采用建立在频域内的同态滤波器对光照不足的或有光照变化的图象进行处理。可以减少因光照不足引起的图像质量下降,并对感兴趣的景物进行有效增强,这样就在很大程度保留图像原貌的同时对图像细节增
: 强。同态滤波效果如图7
a) 原图 b)巴特沃思高通滤波 c)同态滤波
图7 图像处理效果图
从图像处理效果中可看出,巴特沃思高通滤波器突出了部分细节部分的变化,,但是图像整体灰度级的变化减少,反而使得暗处图像(人脸后窗格)更加不清晰.。对于同一幅图像,再采用同态滤波后,可以看到既起到了压缩图像动态范围又增强了细节,尤其是暗处细节(人脸后窗格) 。同态滤波算法由如下式表示:
T(x,y),S(x,y)/I(x,y)
第 9 页 共 19 页
基于睡意检测的安全驾驶保障系统研究与设计
式中x,y分别为横坐标和纵坐标,T(x,y)为坐标为(x,y)的点的反射率,S(x,y)为滤波前的值,I(x,y)为该点的光照强度,它的值是通过令原图像与一个较大的低通滤波器模板卷积得到:
y,Nx,N1,I(x,y)S(u,v),,2,(2N1)u,x,Ny,N
式中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的阶跃正方形)对图像滤波,所得
结果为图像的环境光照。
EyeReflect[m][n] = 256*Gray[m*graystep+n] / EyeBrightness;
//图像除以环境光照即为物体本身的反射率。
if (EyeReflect[m][n] < EyeReflectMin)
EyeReflectMin = EyeReflect[m][n];
//寻找反射率的最小值(即最黑的一点)作为二值化的参数
}
}
for (int m = 10; m < height/2-10; m++)
{
for (int n = 10; n < width-10; n++)
{
if (EyeReflect[m][n] < EyeReflectMin + EyeReflectThresh)
dst[m*widthstep1+n] = 255;//二值化的阈值=反射率最小值+EyeReflectThresh
else dst[m*widthstep1+n] = 0;
}
}
3.5.3 自适应光照强度
当消除了一部分不均匀光照影响之后,接着下来就是进行二值化了。当光照强度不同时,人脸的光暗程度也会随之不同,光照强的时候,人脸会比较白,光照弱的时候就
第 10 页 共 19 页
基于睡意检测的安全驾驶保障系统研究与设计
会显得比较黑。如果要取得相同的二值化效果的话,那么二值化的判断阈值就要随着光照强度的改变。
本系统调整二值化阈值的方法是:先采用一个经验阈值进行预二值化,然后计算白点的数量。由于最佳的二值化效果是只把灰度图中的眼珠、眉毛和头发等黑色像素都保留(二值化后黑色像素都变成白色),而人脸图像的这部分的黑色像素基本上都是差不多的,也就是二值化后白色像素的数量是在一个固定的范围里面的。经过反复测试,这个范围大概在60~240之间。二值化的阀值初始化的函数为:
int EyeReflectThreshInit(IplImage* img)
算法简化后的程序为:
if(Area>240)
{
EyeReflectThresh--; //白色像素大于,阈值降低
return 0;
}
else if(Area<60)
{
EyeReflectThresh++; //白色像素小于,阈值提高
return 0;
}
return 1;
当得到一个新的阈值后,再执行一次预二值化,计算白点数量,如此不断循环,直到数量在经验范围,返回值为1,即停止二值化阈值调整。
while(!EyeReflectThreshInit(Face_img.GetImage()));
图8为不同的二值化阈值下的二值化效果,其中EyeReflectThresh中,
(a)>(b)>(c)
(a) (b) (c)
图8不同的二值化阈值下的二值化效果
3.5.4 形态学滤波
二值化后的图像如图10 所示(较高反射率的区域二值化为黑色,反之则为白色。通俗的讲:即得到的图和真实的刚好相反。比较暗的部分就变成白色,比较亮的部分反而变成黑色。):
第 11 页 共 19 页
基于睡意检测的安全驾驶保障系统研究与设计
图9 二值化后的图像
可见在二值化之后眼睛的区域块已经初步显现出来了,接下来进行形态学滤波中的闭运算,消除一些毛躁的现状,使眼睛部分的白色块尽量闭合,其滤波效果如图10:
图10 形态学滤波后的结果
3.6 人眼定位
3.6.1 人眼初定位
人眼的外部轮廓可以看作是由上下两段圆弧围成,眼球则可以看成是内接的不完整圆形黑块块,其几何特征如图 所示。根据人脸五官的普遍性和对称性,人眼的位置一般只可能出现在人脸的固定的一个区域范围,因此设定人脸区域上的一个相对位置,就可以大概把眼睛的区域截取出来。这部分区域可能包含有眼眶、眉毛还有部分头发。得到这部分信息以后,就可以对人眼进行进一步提取了。
图11 人眼的几何特征
我们定义的这个区域大小为37*33,对于上半脸图像区域来说,截取空间的相对起始坐标为(25,13)。
3.6.2 眼球提取
眼睛初定位之后的如图12所示。从图上可以看出,采用相对坐标人眼定位,只是初步把眼睛的区域寻找出来,图中除了有需要提取的眼球之外,还有眉毛和部分眼眶边缘等杂点存在,因此要把这些干扰信息给去除掉。
本系统采用的方法是用图像区域生长的方法提取眼球。
(1)眼睛区域生长点定位
第 12 页 共 19 页
基于睡意检测的安全驾驶保障系统研究与设计
要使经过区域生长后能把眼球完整提取出来,找好一个合理的区域生长点是十分关键的。本系统采用分别在横坐标和纵坐标上算积分投影的方法,分别找出X轴和Y轴上有最大积分值的横坐标值和纵坐标值,这两个值组合成的坐标点就是要寻找的区域生长点。
步骤分别如下:
分别计算眼睛部分左右眼图像白色像素在垂直和水平方向上的积分投影。
图12 初步定位后的眼图
垂直方向上的积分在X坐标轴上的投影会产生一个峰值,以产生这个峰值所在的横坐标点,作为区域生长点的横坐标。水平方向上的积分在Y坐标轴上的投影会有两个峰值,其中选取从下往上第一个峰值所在的纵坐标点,作为区域生长点的纵坐标。这样,区域生长点就确定了。
采用这种方法来确定区域生长点的好处是,基本可以确定区域生长点在眼球范围内,如果区域生长点不在眼球内的话,那么就没办法提取出眼球了。
(2)区域生长
区域生长是指将成组的像素或区域发展成更大区域的过程。从种子点的集合开始,从这些点的区域增长是通过将与每个种子点有相似属性像强度、灰度级、纹理颜色等的相邻像素合并到此区域。它是一个迭代的过程,这里每个种子像素点都迭代生长,直到处理过每个像素,因此形成了不同的区域,这些区域它们的边界通过闭合的多边形定义。
由于做区域生长的对象只是二值化图像,因此区域生长的相似属性只有灰度级。效果如图13所示:
图13 提取出眼球的效果
第 13 页 共 19 页
基于睡意检测的安全驾驶保障系统研究与设计
区域生长的代码如下:
void FindThresh_1(int m,int n,int widthstep,LPBYTE GRAY1,LPBYTE GRAY2,int
height,int wide)
{
GRAY1[m*widthstep+n]=0;
GRAY2[m*widthstep+n]=255;
if((height-1)>m && m>1 && (wide-1)>n && n>1)
{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 ((GRAY1[m*widthstep+n-1] >thresh)) FindThresh_1(m, n - 1,widthstep,GRAY1,GRAY2,height,wide);
if ((GRAY1[m*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为图像的高度和宽度。
经过二值化区域生长处理之后,就可以把眼球的色块都完整提取出来,眼球中心因
为瞳孔反光产生的杂点,眼球外部的眉毛、眼眶等杂点都全部去除掉。经过这一步骤,
眼球就完全提取出来,可以进行眼睛开合状态的判断了。
3.6.3 眼睛状态判断
在经过同态滤波和二值化处理后,睁开眼睛与闭合眼睛的图像在竖直方向积分的最
第 14 页 共 19 页
基于睡意检测的安全驾驶保障系统研究与设计
大值有很大的区别。正常睁开的眼睛,在某一个竖直方向上的白点数目至少有7个以上,而闭合的眼睛相应的白点数只有3个以下。根据这些积分值的差别可以很稳定地区分眼睛睁开与闭合两种状态。
闭合 睁开
图14 提取出的眼睛的开闭状态
3.6.4 疲劳状态判别
人脸检测,人眼定位和眼睛状态的判断就是为了确定驾驶员的疲劳状态。系统需要建立一个能够预测驾驶疲劳进程的数学模型,以便有效的监控驾驶疲劳的情况。该系统将使用PERCLOS的变形作为检测依据。疲劳与否的判断公式为:
F =
公式中F表示单位时间内眼睛处于闭合状态的总帧数占所获取的视频流的总帧数的比例,N表示单位时间内获取的视频流的总帧数,p(t)表示当前帧图像中人眼的睁闭状态。
根据前面的分析,每一帧图像驾驶员眼睛状态分为开、闭两种,我们不能只根据当前一帧驾驶员眼睛的状态来判断疲劳,这就需要根据驾驶员眼睛状态的连续时间系列数据统计驾驶员疲劳状态。用“0”、“1”表示闭眼和睁眼,则驾驶员眼睛状态就是由“0”、“1”组成的一个时间状态系列。此时,PERCLOS为一分钟内“0”所占的比例。
本系统不断选取连续20帧进行一次疲劳程度判断。我们约定:
1、当PERCLOS的值小于0.4时,系统判断驾驶员处于正常驾驶状态,不做任何处理;
2、当PERCLOS的值大于0.4时,系统判断驾驶员处于轻度疲劳状态,给出提示音,若驾驶员经提示后清醒,PERCLOS会在下一阶段的判断中降至0.4以下,提示音消失;
3、当驾驶员被轻度提示后仍无法保持清醒,PERCLOS的值会继续增加,当其大于0.7时,说明驾驶员已经进入疲劳状态,系统会给出急促的干扰噪音,强烈警告驾驶员停车休息。
4 系统构建和界面介绍
第 15 页 共 19 页
基于睡意检测的安全驾驶保障系统研究与设计
4.1 系统构建
本系统是以Myecilpse、matlab为开发平台,所使用的编程语言为和java、C++。程序完成人脸图像的采集、检测、预处理,眼睛的定位、提取、状态判断,并根据检测结果在界面上作出相应
措施
《全国民用建筑工程设计技术措施》规划•建筑•景观全国民用建筑工程设计技术措施》规划•建筑•景观软件质量保证措施下载工地伤害及预防措施下载关于贯彻落实的具体措施
示意的全过程,由于Java具有代码效率高,内存操作方便和功能强大的特点,所以能够弥补图像处理中数据量大、操作复杂、耗时长等带来的不便。再加上利用已开发好的关于图像处理的库函数,程序的效率更高,开发周期更短,系统更稳定。
本系统运行测试的建立环境为:
, 图像采集:普通USB摄像头
, 图像分别率:320×240(即摄像头监视区域大小)
, CPU:P4 3.0G以上
, 内存:512MB以上
, 软件开发平台:Myeclipse
4.2 界面介绍
本系统的界面是用java代码的gui知识制作界面的,以下为系统的界面介绍:
1、首先进入欢迎界面,欢迎界面将引导用户如何体验系统。
2、当用户按下欢迎界面的开始体验按钮,则弹出提示框,提示用户开始录制5张自己的睡眠照片用作图片相似度对比的表情库。按下确定之后则进入拍照界面,当用户拍完5张照片之后则退出该界面,并返回欢迎界面。
3、此时再按下欢迎界面的开始录制按钮,则会开始进行视频采集,如果表情识别结果判定为睡眠,则会出现相应的提示。
5 系统测试
5.1 测试方案概述
测试目的:测试系统各项功能是否实现,系统各项指标是否达标。
测试步骤:为测试本系统各个功能是否已经实现,分别进行以下四项测试:
(1)300帧内正确识别眼睛状态的次数。
(2)把摄像头的帧速率设置为15帧每秒,分别在不同的光照环境下,记录一秒钟内找到脸的帧数。
第 16 页 共 19 页
基于睡意检测的安全驾驶保障系统研究与设计
(3)把检测速率设置为与帧速率一样,即预设响应时间为1秒钟,记录持续闭合眼
睛系统发出警告所需要的响应时间。
(4)20秒钟内闭实际闭眼次数和检测到的闭眼次数,以及警告情况。
5.2 测试设备
PC机一台,像素为320*240的USB摄像头一个,秒表一个。
5.3 测试数据
表1 300帧内正确识别眼睛状态的次数
检测出的
眼部状态 开 闭 识别率 实际的眼
部状态
开 297 3 99% 闭 6 294 98%
表2 1秒钟内找到脸的帧数(摄像头速率为每秒15帧)
光照 白天 晚上 极强 昏暗 前景背景不均无光
环境 室内 室内 光照 环境 光线光线匀光环境
光照 光照 较强 较强 照
找到
脸的 10 14 8 8 13 5 1 0
帧数
表3 眼睛持续闭合系统发出警告所需要的响应时间(预设时间1S)
光照 白天 晚上 极强 昏暗 前景背景不均无光
环境 室内 室内 光照 环境 光线光线匀光环境
光照 光照 较强 较强 照
响应 3s 1s 3s 2s 1s 4s 10s ?
时间
第 17 页 共 19 页
基于睡意检测的安全驾驶保障系统研究与设计
表4 20秒钟内闭实际眼次数和检测到的闭眼次数以及警告情况
实际次数 系统识别次数 是否有警告 识别率误差
率
3 3 N 0
5 5 N 0
8 8 Y 0
10 9 Y -0.1
12 11 Y -0.083
14 14 Y 0 5.4 结果分析
(1)由测试1可以知道,系统对开闭眼这两种状态的识别率相对较高,接近于100%,所以判断眼睛状态的算法是比较可靠的。
(2)由测试2可以知道,光照会对该系统的灵敏度产生一定的影响。当处于光线比较均匀的环境时,系统比较灵敏,基本上大部分帧都可以找到人脸。当背景光太强,或者光照不均匀的环境下,人脸就比较难自动跟踪,所以在这种光照的情况下,系统识别率比较低。
(3)由测试3可以知道,系统响应时间受光照影响,而各项结果都是跟测试2相对应的。这是因为光照会影响跟踪人脸的效率,效率降低,响应时间自然会相应延长。出现响应时间比预设值要长还有另外两个原因。首先是当眼睛闭合的时候,由于人脸分类器中训练的样本大部分都是睁开眼的人脸,眼睛闭合的比较少,因而跟踪脸的效率就会相应下降。另外,当系统检测出眼睛闭合时间过长时,加载警告声的程序也会占用一定的时间。由于以上几种原因,所以导致了响应时间比预设的要长,但在普通光照情况下,结果还是可以接受的。
综合上面的测试结果,该系统在光照比较均匀,司机背景光线较弱环境下,准确率最高,在光照比较昏暗的环境效果也比较理想。而车内环境正正满足了以上几个条件,因此,该系统合适用于车内环境。
第 18 页 共 19 页
基于睡意检测的安全驾驶保障系统研究与设计
参 考 文 献
[1] 中国公路网 2010年全国道路交通事故
[2] NHTSA.Expert Panel on Driver Fatigue & Sleepiness[R].Drowsy driver and automobile
crashes Report.2004.8.
[3] 李志春,何仁,林谋有,李佩林.驾驶员疲劳检测技术的研究现状及发展趋势[J].农机化
研究.2006,5:197-199.
[4] 黄福珍,苏剑波. 人脸检测[M]. 上海:上海交通大学出版社,2006:1-68,137-156. [5] GaryBradski,Adrian Kaebler. 学习OpenCV(中文版)[M]. 北京:清华大学出版社,
2009.
[6] 刘瑞祯,于仕琪. OpenCV教程(基础篇)[M]. 北京:北京航空航天大学出版社,2008.
[7]郭磊,王秋光. Adaboost人脸检测算法研究及OpenCV实现[J].哈尔滨理工大学学报,
2009,5:123-126.
[7] 孔凡芝,张兴周,谢耀菊.基于Adaboost的人脸检测技术[J].应用科技.2005,6:7-9.
9:109-110. [8] 李悦,任育.图像分割的阈值法简述[J].计算机科学.2006,
[9] 刘瑞安,靳世久,张希坤,宋维,吴晓荣. 眨眼检测与眼睛跟踪[J].计算机应用,2006,
12:2835-2837.
[10]牛杰,沈晓锋. 疲劳状态监控系统中眼睛状态检测方法[J].计算机工程,2009,17:195-197.
[11]武英.利用同态滤波改善光照不足图像. 南京晓庄学院,2007.
[12]柳国普,张桂林.基于FPGA的灰度形态学滤波器实现.微型机与应用,2004. [13]朱振华,吴晓娟.基于眨眼持续时间的司机疲劳检测方法.计算机工程,2008 [14]郝永江,高金华.基于图像的驾驶员疲劳监测系统.<
>2008年4月 [15]陶亮、庄镇泉.复杂背景下人眼自动定位.计算机辅助设计与图形学学报.2003年1月
第 19 页 共 19 页
基于睡意检测的安全驾驶保障系统研究与设计
第 20 页 共 19 页