第2章 人脸的检测与定位

本论文通过人眼状态来判断疲劳状态,在判断是否疲劳之前要先进行人脸与人眼的检测与定位。整个流程,要先进行人脸的检测,在检测人脸的基础上识别出人眼并定位,在此基础上,实现了对眼球运动的跟踪,从而得到了眼球的状态信息。人体的眼睛有两种常见的检测方式,一种是通过红外光来确定眼球的位置,然后再进行下一步的测量;其次,可以首先识别出脸部,缩小在图片中的搜索范围,然后在被探测到的面部中寻找眼球的所在。第一种是通过硬体进行虹膜的位置,如果眼球的辨识错误,则会导致该系统无法正常工作;如果能够精确的探测到脸部,那么眼睛的具体方位就可以确定了。

本研究的重点在于对人体眼睛和面部的位置进行了研究,因为该研究主要是根据眼睛的状况来判定人体的疲劳程度,因此在此基础上,首先要对脸部和眼睛进行位置的确定。该过程采用了一种基于序列分类的方法,首先对脸部进行识别和定位,然后对眼球进行识别,从而得到眼球的特征信息。眼睛的探测有多种方式,例如利用特殊的仪器,利用红外线光源,可以直接探测到眼睛的具体方位;由此确定眼球位置,并进行下一步的检测;利用级联分类器,首先识别出人脸,减少在图像中的搜寻距离,然后对所探测到的面部进行检索,从而确定人眼位置。第一种方法是采用硬件装置进行位置测量,但精度不高。因此,我们提出了一种基于层次分类算法的人脸识别算法,该算法首先探测到脸部的具体方位,再对脸部进行识别。

2.1 人脸检测技术的概述

人脸识别主要技术就是利用对各种背景信息进行准确识别,并对其实施具体分类,进而识别出人脸的准确位置[3]。光照环境、噪声、摆动头部和其它外界因素是主要的因素。面部准确识别是疲劳驾驶检测的首要步骤,也是最基本的步骤,只要能够精确地检测和定位到图像中的面部,那么接下来的工作就可以进行了。在现实生活中,人脸识别技术已经得到了广泛的运用。主要步骤是通过对被检测的区域进行遍历,然后将其与已建立的人脸模型进行比对,输出我们想要的人脸区域。目前,人脸识别技术主要有两种,一种是基于图像的人脸识别,另一种是基于特征的人脸识别。

2.1.1 基于图像的人脸检测方法

基于图像的人脸检测方法主要是利用常规的模式识别算法,将图像作为输入,经过算法处理,输出结果为人脸和非人脸两种类型,然后用算检测的区域进行模型匹配,实现我们需要的人脸匹配检测出。比较常用的图像检测法主要有以下两种:

(1)线性子空间方法

可以将人脸图像看成处于整幅图像的一个子空间中。通常用神经学的方法表示子空间,也可以用诸如主元分析以及线性判定分析等方法来表示[4]。

(2)神经网络方法

神经网络法由模式识别中提出,也常用于人脸的检测与定位算法,具备统计学习的一般优势,且其自适应性比较好,相较于线性子空间方法,其运算速度大大提升,鲁棒性更好。

2.1.2 基于特征的人脸检测方法

这一类人脸检测方法加入了特征提取与特征匹配,基于特征的人脸检测方法主要有以下三种[5]:

(1)特征分析的方法

基于特征分析主要有两种方法:第一种是依据脸部的固定位置来遍历我们需要的特征信息,再匹配已有的模板。另一种是利用各种常用的人脸模型对人脸特征进行分类,建立不同的分组。例如,它属于特征搜索和构象分析方法。

(2)利用活动形状模型的方法

ASM是目前较为流行的用于面部特征点的识别技术。运动形态模型可以通过对模型进行训练,获得相应的图像特征,从而将待匹配的图像控制在合理的范围内。运动形态模型可分为训练和搜索两大类。在模型的训练阶段,利用人工标定特征点的坐标位置,对全局形状模型进行整体建模,并对其进行局部化处理;在检索过程中,首先利用局部模型来确定目标区域的位置,然后在所有特征点的搜索完成后,利用全局形状模型对目标区域进行约束,直至找到目标的具体位置,或重复次数达到一定程度,则完成搜索。

(3)底层分析的方法

底层分析的关键是提取图像的底层特征,再对其进行比较,来获取我们需要的特征信息。提取良好的特征是模式识别的基本问题。按照特征提取方式的不同,共有自然特征与人工特征两种。

人工特征是经过计算得出的特征,而自然特征是在处理过程中图像本身具有的特征。在人脸识别中,通过对人脸特征进行检测,就能够进行对人脸的另一种表述,也就是用测量空间中的一个点来描述某个人脸。而利用这样的特性,就能够使用基于灰度信息的方式实现检测,即利用在水平方向上或者垂直方向上的积分投影来定位瞳孔或者眉毛以外的部位,从而实现对眼睛的测量和定位。

2.2 利用Viola-Jones算法实现人脸的检测与定位

2.2.1 Viola-Jones 算法背景

Viola-Jones算法由Viola 和 Jones两人合作共同提出,2001年两人在国际会议CVPR上发表有关文章并正式推出,算法核心就是在AdaBoost算法的基础上,利用矩形特征、积分图计算以及级联分类器检测实现人脸识别[6]。

Viola-Jones算法在常规的电脑上其检测速度已经达到了每秒15帧,比之前的算法在速度上有了很大的提升,足以满足此设计的要求。在满足高速率的同时,其检测准确率并没有因此而下降,依旧保持了较高的识别精度。

后来,这个检测器的矩形特征得以扩展,算法效率得到了大幅度的提高,这个算法也被写入到Matlab的视觉工具箱中,可以直接调用,为用Matlab做人脸识别技术提供了很大的便利,Viola-Jones框架也成为了人脸检测的主流技术。

2.2.2 矩形特征

矩形特征即常说的Haar-like特征,是人脸检测中的主要特征,就是利用一个一个的矩形将人脸区域进行划分,比如两个眼睛就可以划分为一个矩形,鼻子也可以化为一个矩形。称之为Haar-like特征,是因为这里所说的特征类似于之前的Haar小波,在矩形特征未出现之前,最流行的是Haar小波用来表示人脸的局部特征,就是利用Haar函数来对人脸进行细节分解,提取所需的特征[7]。后来,Viola和Jones 对这种Haar小波进行了空间变化,即使这种特征更加多样化,经过不断的发展,形成了扩展后的矩形特征。现有的Haar特征模板主要如图2.1所示:

图2.1 Haar特征模板

矩形特征在上图中就是黑色区域与白色区域的像素差值的和。矩形特征对一些简单的图形结构,脸部或者眼睛的一些特征能够由矩形特征简单的描绘[8]。图2.2就可以直观的看出矩形特征在人脸区域特征提取的作用,这是利用算法筛选出来的对人脸检测有实际意义的特征。

图2.2 人脸的有效矩形特征

2.2.3 积分图

在上一小节对人脸区域进行特征提取之后,需要对包围盒进行标注、滤波跟卷积等一系列处理,这里就用到了积分图,核心就是将需要处理的图像内部区域部分矩形的像素和储存,其储存形式是作为数组的元素,在用到这一部分时,直接调用储存在数组的元素即可,无需再进行像素值的计算。

下面为积分图的使用方法:

积分图可以一次性提前算好,当需要求某个子矩阵的和时,只需要查询4个数字,就得以得到子矩阵的和。例如图2.3中,想要计算矩阵内像素的和,在积分图内找到四个位置对应的值,根据公式就可以得到。

图2.3 计算区域内像素值的和

2.2.4 AdaBoost算法

AdaBoost算法于1995年被提出,是一种改进后的人脸检测算法。AdaBoost算法之所以适用于人脸检测,是因为算法训练了大量的弱分类器而组成一个强分类器,在实现过程中同时进行了特征选择,剔除了不利于人脸训练的特征。

算法描述如下:

已知有多个训练样本的训练集:,以及其中对应样本的假与真:。在训练样本中有个假样本,个真样本,待分类物体中有个简单特征,表示为,其中.,对于第个样本,它的个特征的特征值为,对第一个输入的特征的特征值有一个简单二值分类器。对这个特征的弱分类器有一个阈值,由一个特征值和一个分类符构成[9]。

2.2.5 级联检测实现人脸检测与定位

为了减少减少计算中不必要的浪费,将级联检测器加入到Viola-Jones算法中,即在检测过程中,将无效的背景以及窗口都剔除掉,只留下与人脸相关的目标这样,就提高了计算效率。在上一小节中由AdaBoost训练完成的分类器的检测率比较低,这是由于为了保证较低的容错率,在训练分类器时,高检测率会导致高误识率,传统的分类器训练过程是有一个矛盾点的,即检测率与误识率两点是相互冲突的,不能在保证高检测率的同时降低误识率,级联检测器就解决了这一矛盾。

上面已经说到了级联检测器的一大优点,另外利用级联检测还能提高计算效率,节省大量的时间,是因为在经过强分类器时,可以剔除掉分人脸的特征,将类人脸窗口发送到下一过程,从而减少了需要检测的无效人脸样本,将计算更多的利用在人脸窗口的侦测上,从而提高了检测效率。

级联检测的过程可以看成一个树状结构。如图2.4所示:首先将所有的人脸窗口输入,第一个节点处会对人脸窗口进行判别,达到设定的阈值的窗口就会被送到下一个节点,不符合要求的就会被剔除掉,送到下个节点的人脸窗口会进行下一步的判别,然后再进行第三个节点的处理,然后输出深度处理后的结果。上文所说的节点即是级联检测中的分类器。

图2.4 级联分类器的决策树

训练级联分类器是为了能在检测时提高准确度。检测时,需要以现实中的一幅大图片作为输入,然后再进行所需要的检测,一般这种检测是多区域、多尺度的。多区域检测是将检测窗口划分为多个区域进行遍历检测;多尺度检测就是对搜索窗口的多个方向、多个尺度进行遍历搜索,有以下两种方法:第一种缩放照片,但搜索窗口的大小是不变的,每一次搜索都要对窗口内的像素值进行搜索,导致效率并不高,另一种是,不断扩大搜索窗口进行搜索,但不改变图像的大小。

本论文在进行训练级联分类器时利用了筛选子窗口图像的方法,克服了效率不高的问题即第二种方法:

  1. 筛选子窗口图像时,子窗口的缩小只是使图像比例缩小,然后便于对窗口进行检测,如图2.5所示。

(2)检测窗口放大的同时也会时矩形特征随之放大,这时,矩形特征也便于检测。

图2.5 子窗口图像的筛选

2.3 结果分析

经过上述的实验步骤以后,可以快速的检测到人脸并定位,图2.6为网络库的人脸检测与定位的实例效果图,图2.7为本设计的实际检测效果图。可以看出,经过VJ算法处理之后基本可以满足我们对人脸检测与定位的需求。

matlab实现疲劳驾驶监测相关推荐

  1. matlab实现疲劳驾驶实时监测

    matlab实现疲劳驾驶实时监测 博主自己去年做的本科毕业设计,利用聚类分析与klt光流追踪实现. 可有偿分享源码,开题报告,论文. 可提供指导.

  2. 疲劳驾驶监测方案_一种基于手机的疲劳驾驶监测方法与流程

    本发明属于安全驾驶领域,具体涉及一种基于手机的疲劳驾驶监测方法. 背景技术: 疲劳驾驶是指驾驶员在长时间连续行车后,产生生理机能和心理机能的失调,从而在客观上出现的驾驶技能和反应下降的现象.若驾驶员在 ...

  3. 基于MATLAB的疲劳驾驶检测系统

    基于MATLAB的疲劳驾驶检测系统 设计内容(论文阐述的问题)疲劳驾驶检测系统以对驾驶员面部图像进行分析的方式来获取其疲劳信息,是一种智能检测系统.通过在车内安装固定摄像头实时采集驾驶员信息,将驾驶员 ...

  4. 疲劳驾驶监测方案_【Nano Energy】TENG用于驾驶员驾驶状态监测

    01 研究背景 研究表明,驾驶员的疲劳和分心会降低其感知能力和对汽车控制的决策能力.大约20%车祸和30%致命车祸的原因是由于驾驶员疲劳和注意力不集中造成的,同时也会导致单车撞击事故和大型车撞击事故发 ...

  5. 疲劳驾驶监测方案_一种疲劳驾驶检测方法

    一种疲劳驾驶检测方法 [专利摘要]本发明公开了一种疲劳驾驶检测方法,属于汽车安全驾驶领域,通过采集驾驶员的行为指标(主要为方向盘数据.驾驶时间和驾驶车速),进行信息预处理,得到疲劳生理参数作为检测指标 ...

  6. 疲劳驾驶监测方案_疲劳驾驶检测方法

    司机疲劳驾驶容易引起严重的交通事故,根据以往的交通事故案例分析,由于疲劳驾驶造成的交通事故占据37.91%,由此可见疲劳驾驶的危害之大.但是目前还是有很多人不知道自己是否属于疲劳驾驶,下面小编给大家说 ...

  7. 疲劳驾驶监测方案_一种疲劳驾驶检测方法与流程

    本发明涉及一种疲劳驾驶检测方法. 背景技术: :交通安全是与国计民生直接相关的热点问题,其中疲劳驾驶作为交通事故多发的主要问题之一,受到了人们的广泛关注.疲劳驾驶会导致驾驶员精力不集中.肢体反应迟钝. ...

  8. 疲劳驾驶监测方案_盘点疲劳驾驶的几种检测方法

    随着人们生活水平的逐渐提高以及各大城市道路交通系统的不断完善,我国的汽车保有总量也在不断增加,这在为人们的出行带来便捷的同时也导致了交通事故的频频发生,对驾驶员和行人的生命财产安全构成了巨大的威胁. ...

  9. 基于脑电功率的疲劳驾驶检测研究_kaic

    基于脑电功率的疲劳驾驶检测研究 摘  要 在道路交通安全领域,疲劳驾驶是一种常见的交通安全隐患.现有数据统计,全球每年有大约21%的重大交通事故与疲劳驾驶有关,疲劳驾驶成为了诱发交通事故的主要原因之一 ...

最新文章

  1. gst-crypto GStreamer插件
  2. “因人脸识别错误,我被捕了!”
  3. 【分享】分享一款不错的网页视频播放器
  4. vs2015 ctrl 单击 转到定义
  5. Java 洛谷 P1464 Function
  6. hadoop学习01 网址收集
  7. 8.12-14 df 、mkswap、swapon、swapoff、sync
  8. PS图层混合模式中英文对照
  9. console对象的方法log、info、warn、error的区别及几个实用的方法
  10. JAVA内部类示例分析
  11. java 求百分比_java中计算百分比
  12. javaweb学生宿舍管理系统
  13. Linux之执行一个可执行文件
  14. SVN下载项目到本地
  15. 动态交叉表(永洪bi)
  16. 成功解决pyinstaller打包时报错:lib not found的问题
  17. springboot基于Elasticsearch6.x版本进行ES同义词、停用词(停止词)插件配置,远程词典热加载及数据库词典热加载总结,es停用词热更新,es同义词热更新
  18. 如何在物联网平台创建一个千里传音产品?
  19. 手把手教你写Linux I2C设备驱动 tvp5158
  20. HTTP协议报文基本格式

热门文章

  1. html复制并弹窗提示已复制,js复制操做,复制成功弹出提示框
  2. js图片滚动无缝衔接
  3. python or语句使用_Python语句序列: “a = (1, 2, 3, None, ( ), [ ]); print(len(a))的运行结果是( )。_学小易找答案...
  4. 前端学习案例-初识docker
  5. ERROR: Model Parsing the xml failed
  6. MASM 8.0 下载 安装方法
  7. 关于端午节的PPT模板
  8. 六十星系之49武曲天府坐子午
  9. USB,串口(RS232、RS485),UART接口
  10. 全城热8|造节营销,平安信用卡何以“出圈”