Amazing Arch机器学习计算机

我的本科毕设:《基于 OpenCV 的高速收费站微笑服务质量评估

2018-08-14  本文已影响464人  月牙眼的楼下小黑

这是我的本科毕设论文(文章和代码均是独立完成),放到简书上做个备份。

开发一个微笑表情识别系统,从实地拍摄 的监控录像中 判别关键帧,对服务人员在收费过程中的面部表情实现 实时 地自动监测,判断其是否微笑,并计算微笑帧比例,向上层管理人员提供微笑服务质量参考评价

接下这个任务时,我仅仅具备一点点图像处理知识。到了毕设中后期,我几乎每天都在失眠,每天都在写代码,看论文。现在回头看看,我用自己的一些小聪明(没有运用深度学习方法)完成了一个这么艰巨的任务,实现了一个原型系统, 还是很自豪的,可以说是我本科阶段最引以为傲的一件事了。事实上直到深度学习泛滥的今天,这个任务也没有被很好的解决。


作 者: 月牙眼的楼下小黑
联 系: zhanglf_tmac (Wechat)
声 明: 欢迎转载本文中的图片或文字,请说明出处


目 录

  • 中文摘要
  • 英文摘要
  • 1 绪 论
    • 1.1 课题背景
    • 1.2 研究现状
    • 1.3 论文组织
  • 2 多姿态人脸的实时检测跟踪
    • 2.1 肤色分割
    • 2.2 肤色背景干扰的去除
    • 2.3 积分图优化的朴素模板匹配
    • 2.4 算法流程和实验结果
  • 3 单目视频下的 90 度侧脸姿态判别
    • 3.1 基于四分图的 HOG 姿态特征提取
    • 3.2 检测速度优化的线性 SVM 分类器
    • 3.3 算法流程和实验结果
  • 4 90 度侧脸的人脸对齐
    • 4.1 基于分水岭算法的侧脸轮廓提取 6
    • 4.2 鼻尖下巴检测和人脸矫正
    • 4.3 算法流程和实验结果
  • 5 侧脸微笑表情识别
    • 5.1 基于 LBP 的表情特征提取
    • 5.2 算法流程和实验结果
  • 6 微笑表情识别系统的实现
    • 6.1 系统开发环境
    • 6.2 GUI 界面演示
  • 结论
  • 参考文献
  • 附录 针对第二类视频的正脸微笑表情识别.



1 绪 论

1.1 课题背景

“保畅收费是根本,微笑服务树形象”。“微笑服务”作为高速公路行业强根固本树形象,对外展示的一张名片、一面旗帜,可以说是各级领导高度重视,社会各界普遍关注,全体职工必须做好的一件大事。 如今各单位对工作人员服务质量的监督主要依靠人力督查的方式, 稽查室与监控室 24 小时对当班人员进行随机抽查,不仅费时费力,而且容易遗漏对不符合标准的收费人员的监察。

基于此背景,本课题开发了一个微笑表情识别系统,从监控录像中判别关键帧,对服务人员在收费过程中的面部表情实现自动监测,判断其是否微笑,并计算微笑帧比例,向上层管理人员提供微笑服务质量参考评价。稽查领导可针对微笑帧比例较低的人员回调视频再次考核,大大减轻了其工作量,增大了考核人员范围和考核时间跨度,促进微笑服务质量的整体提高。

1.2 研究现状

典型的人脸表情识别系统(FER) 可大致分为 3 个环节: 人脸检测和预处理、 表情特征提取、 分类识别[1]。 图 1.1 显示了表情识别系统流程。

(1) 人脸检测

人脸检测方法主要分为三类[2]:基于肤色分割的方法、基于启发式模型的方法和基于统计模型的方法。 第一类方法检测速度快,但是易受到与人体肤色相近的背景的干扰。第二类方法根据人脸几何形状、灰度、纹理等特征,构建人脸模板,设计匹配规则后执行模板匹配算法。杨光正[3]提出的基于镶嵌图的正脸检测算法就是这一类方法的典型。第三类方法将人脸检测转化为机器学习中的二分类器问题,使用大量人脸与非人脸样本训练分类器。 经典算法有Haar+Adaboost。后两类方法主要针对正脸检测,对旋转姿态的人脸检测效果较差, 在检测过程中需引入滑动窗机制并进行整幅图像的遍历, 运算量较大,难以满足实时性需求。

(2)特征提取

表情特征提取方法主要有[4]: 几何特征提取算法、纹理特征提取算法、光流法、特征点跟踪法。几何特征提取算法通过定位人脸特征点, 依据各特征点之间的几何关系进行表情特征的构建。这类方法对图像质量要求较高,限制了其应用范围,且难以做到特征点的精确定位。 纹理特征提取算法主要有 Gabor 小波变化、 局部二值模式(LBP)等。 相较Gabor特征,LBP 特征计算简单,占用内存小,计算速度快, 已经成为一种流行的表情特征描述子。光流法主要用于提取动态图像表情特征。 但是光流法易受噪声影响,且计算复杂度高, 实时性和应用性较差。特征点跟踪算法通过检测跟踪人脸特征点, 综合特征点的位移信息和形变信息提取动态图像表情特征。显然这种方法会遇到跟几何特征提取算法同样的困难。

(3)表情分类

分类方法主要有支持向量机算法(SVM)、 K 最近邻算法(KNN)、AdaBoost算法等。SVM 的目的是在给定训练集下, 寻找最大间隔的最优超平面, 在解决非线性、小样本和高维问题上非常有优势[5]。 KNN的原理是: 若在特征空间中,与待测样本最相似(即特征空间中最邻近)的 k 个训练样本中的大多数属于某个类,则该样本也属于这个类别[6]。 AdaBoost 算法思想是通过级联一系列弱分类得到分类性能提升的强分类器。每种分类方法都有自身的优缺点。为了达到更好的分类效果,一些研究者采用多种分类器融合的方式构建表情分类器[7]。

(4)表情识别的发展方向

表情识别领域的研究取得了不错的进展,但是距离真人识别仍有很大差距。主要体现在[1][4]:在复杂场景和姿态变化下人脸检测技术的局限性;仍集中在基本表情的研究,混合表情、微表情和其他基本表情的识别有待进一步的研究;实验研究主要基于标准表情库,未考虑其他环境因素的影响,开发的表情识别系统实用性不高等。 虽然困难重重, 但是经过国内外学者的共同努力, 新思想、 新方法也层出不穷。 我们有理由相信在未来几年, 表情识别领域将沿着两个主要个方向发展[1][4]: 一是提高表情识别系统对光照变化、头部姿态运动、人脸遮挡、复杂场景的鲁棒性; 二是增加对人脸精细表情、混合表情、 3-D 表情的研究。

1.3 论文组织

该文主要任务是设计实现基于 OpenCV 的微笑服务质量评估系统。全文分为六章。 各章组织结构如下:


2 多姿态人脸的实时检测跟踪

表情识别系统工作原理可分为人脸定位、 人脸对齐、 特征提取、 分类识别 4 个环节,准确获取人脸是进行表情识别的前提条件。 在基于视频序列的人脸检测中,如何做到算法的实时性和对人脸角度旋转的鲁棒性是两个关键问题。 主流的人脸检测方法有[8]模板匹配、 PCA 特征脸、基于统计模型方法及人工神经网络等,这些方法主要针对正脸检测, 而且运算量大, 速度上一般不能满足实时性要求。 人脸肤色在表情姿态变化时仍具有相对稳定性, 且肤色检测速度快,利用肤色信息定位人脸成为人脸实时检测跟踪研究的重要方法.

2.1 肤色分割

大量的研究表明[9-11] :在去除亮度信息的色度空间中,不同种族、不同性别、不同年龄的人脸肤色分布具有很好的聚类性。YCbCr空间具有亮度分离、CbCr两维独立分布的优点, 所以选用YCbCr空间作为检测空间。 源图像从RGB 空间转化到 YCbCr空间的变换矩阵为:

9 段视频序列中截取了 100 幅肤色区域图片,通过实验发现肤色样本在 YCbCr空间内的 Cb值和 Cr 值体现良好的聚类性, Cb值范围为[104123],Cr值范围为[104123], 据此建立肤色聚类模型, 即像素 PYCbCr 空间内, 若同时满足:

则判定 P为肤色点, 从而对彩色图像进行二值化。由于眼睛、鼻孔、嘴唇等非肤色区域的存在,造成分割结果的空洞现象,用 7×7 大小的方形掩码进行形态学闭运算操作,空洞得到一定程度的弥合。肤色分割结果如图 2.1所示。

2.2 肤色背景干扰的去除

在实验中发现, 与人体肤色相近的背景成为极大的干扰因素,如图 2.2所示。宋红[12]提出了一种由粗到细的检测方法,先利用帧差法提取出运动区域, 剔除肤色背景后, 再对运动区域进行肤色检测。但是这种方法不适用于肤色背景和人脸重合的情况。

鉴于此, 设计了一种快速去除肤色背景干扰的方法, 算法具体步骤如下:

1) 利用二帧差法获得前景二值图像D(x,y),即:

2) 将前景二值图像D(x,y)跟肤色二值图像P(x,y) 做“与”操作。

由图 2.3 可以看出,该方法结合了人脸的肤色信息和运动信息,快速去除了肤色背景的干扰, 获得了只包含人脸区域的前景图像。

2.3 积分图优化的朴素模板匹配

在二值化人脸图像中,人脸边缘与背景一般存在明显差异,灰度投影成为人脸边界定位的常用方法[13-14]。 但是在该课题中, 由 2.1 节获得人脸二值图像边缘不连续,利用积分投影确定的外接矩形“漂移”现象严重,如图 2.4 所示。

考虑到投影法的不足, 设计了一种基于朴素模板匹配的方法,并用积分图对其进行了优化,提升了算法执行速度。

2.3.1 模板匹配

模板的构建, 匹配规则的设计是模板匹配算法的两个核心问题。 本文试验了一系列不同形状的二值模板,如图 2.5 所示, 最终选定 250×250 大小的方形模板 g

匹配规则为:

也即:模板在二值化人脸图像中每移动一个步长, 就统计模板白色窗口内的非零像素数和。完成整幅图像的遍历后, 以和最大点作为匹配点。

2.3.2 积分图优化

耗时是模板匹配算法的缺点之一。在 200万像素大小的图像帧上, 一次模板匹配算法要进行约 2×106×250×250≈120亿余次的像素级访问。 本文借鉴用积分图对Haar-like 特征求值进行加速[15]的做法,对模板匹配算法进行了优化.

积分图的定义如下:

得到积分图后,计算矩形区域内的像素和只需四次查找和加减运算即可完成。 如下图 2.6 所示., 设区域D 的四个顶点为a,b,c,d,则区域 D内的像素和为:

模板匹配规则(2-4)修改为:

此时进行一次模板匹配算法,像素访问次数将减至原来的 4/62500≈1/15000,极大地提高了算法执行效率。

2.4 算法流程和实验结果

整个人脸检测跟踪算法流程如下:

为证明该方法的优越性, 选取武汉高速收费站微笑摄像机拍摄的视频序列进行
了实验。视频帧大小为 1920×1080 像素/帧,帧率为 25 fps。图 2.7 显示了部分检测结果。

从实验结果可以看出: 该方法对人脸姿态变化具有很好的鲁棒性,且相较传统的基于肤色分割的人脸检测算法, 该方法较好地解决了肤色背景干扰的难题。 在i3-2370M CPU(2.40GHz),2G内存硬件平台下,检测速度达到 60~80 fps, 能够满足实时性需求。


3 单目视频下的 90 度侧脸姿态判别

高速公路收费工作存在间断性的特点。 只有当收费人员进行服务时,才对其进行微笑识别。故从视频序列中提取关键帧成为合理、必要的环节。 如图 3.1 所示, 当视频中的人脸呈 90 度右侧脸姿态时,就判断为工作人员正在面对司机执行收费服务,当前帧也被视作关键帧。从而关键序列的提取转化为姿态判别的问题。 头部姿态估计方法主要分为两类[16-17]:基于几何模板匹配的方法和基于人脸外观的学习方法。第一类方法建立在人脸特征点的检测基础上,利用眼睛、鼻子、嘴巴等特征点间的几何关系估计姿态。该方法的主要缺陷是:不依赖先验姿态知识的人脸特征点直接定位实现困难,在极大姿态下特征点定位误差较大。 故采取第二类方法,也即统计学习方法,用特征提取+分类器的方式实现姿态判别。

3.1 基于四分图的 HOG 姿态特征提取

方向梯度直方图(HOG)特征在人体检测中获得了成功的应用[18]。 后来学者们将 HOG 特征迁移到人脸姿态估计的研究中。 文献[19-21]均采用了改进的 HOG 特征对人脸实行姿态判别,取得了不错的成果。 但是这些方法为了实现大范围旋转角的人脸姿态估计, HOG算子被设计得十分复杂,以提高其描述能力和姿态区分能力。而本章节的任务的是实现90 度右侧脸的判别, 故只需一种简单高效的 HOG描述子来区分 90度右侧脸和其他姿态即可。鉴于此,在 HOG 特征基础上, 设计了一种基于四分图的HOG姿态特征提取算法。 算法具体步骤如下:

梯度图像求解过程见图 3.2

步骤 5-8 如图 3.4 所示。

3.2 检测速度优化的线性 SVM 分类器

提取姿态特征后,下一步将进行分类器的训练和测试。参考文献[18]和文献[20]的做法,选用经典的支持向量机算法(SVM)作为姿态分类器。

3.2.1 线性 SVM 简介

假设给定线性可分的训练数据集:

SVM 的目的是寻找最大间隔的最优超平面。 设最优超平面为:

易证最大化间隔即最小化 1/2w2。从而得到优化目标函数:

这本质上是一个凸二次规划问题[22]。 一般通过求解对偶问题得到原始问题的最优解。首先引入拉格朗日乘子αi(αi≥ 0),定义拉格朗日函数:

原优化目标函数等价于直接优化对偶问题:


3.2.2 线性 SVM 优化

当训练样本数较多或过拟合现象较严重时,支持向量的数量往往会上升, 在数据维度较大的情况下,将引起明显的测试速度下降。 通过观察决策函数式(3-13)的结构,依据乘法分配律设计了一种优化方法。具体步骤是:

3.3 算法流程和实验结果

整个态判别算法步骤如下:

为验证算法有效性, 挑选了1487张正样本图像和 1059张负样本图像,部分正负样本如图 3.5所示。测试方法采用交叉验证, 统计得到该算法的正确识别率高达98.17%。 表 3.1是不同姿态识别算法的对比。 文献[19]和文献[21]均未直接列出每一类姿态的识别率, 只提供了整体识别率, 且采用的姿态数据库与本文不同。但若仅仅对比识别率,可以发现本文算法识别率与 HOG2nd+LDA方法相当,高于HOG+PCA的方法,且本算法检测速度达到 2-4ms/帧,算法实时性很好。实验表明, 本文提出的90 度右侧脸姿态判别算法具有一定的应用价值。


4 90 度侧脸的人脸对齐

通过前两章检测获得的 90 度侧脸存在俯仰角不一、光照不一、背景冗余等情况,如图 4.1 所示, 需要对其进行人脸对齐。人脸对齐包括光照归一化和几何归一化。 光照归一化采用简单的直方图均衡化算法, 不再赘述。 几何归一化包括对人脸进行旋转、平移、缩放、裁剪等操作,需要建立在人脸特征点的定位基础上。 主流人脸特征点定位算法包括两类[25]:ASM/AAM方法,基于随机森林和深度学习的回归分析方法。 第一类方法检测精度不高, 且实时性差。第二类方法实现复杂,回归模型训练工作量较大。 两类方法主要针对正脸的特征点检测,在极大姿态下检测误差较大。 鉴于此,设计了一种基于轮廓提取和凸点检测的侧脸对齐算法。

4.1 基于分水岭算法的侧脸轮廓提取

轮廓提取的主要方法是边缘检测算法,包括 Sobel 算子、 Laplace 算子、 Canny 算子等。若直接对人脸图像进行边缘检测,势必因为人脸和背景的外观复杂性,引入过多冗余边缘,且检测到的边缘往往不连续,不利于后续侧脸轮廓的提取。 设计了一种新算法,先采用分水岭算法将人脸和背景分离,再对人脸连通域提取边缘,从而获得连续的精确侧脸轮廓。

4.1.1 OpenCV 中的分水岭算法简介

分水岭算法思想来自地形学[26]:它将图像视作拓扑地貌, 像素灰度值表示该点的海拔, 灰度较为连续的区域视作平坦的盆地,灰度变化急剧的边缘视作陡峭的分水岭。分水岭的形成可以解释为:在每一个局部极小值点打孔,让泉水涌出并慢慢淹没极小值点周围区域,形成集水盆;在相邻集水盆汇合处构筑大坝,也即分水岭。

因为噪点或其他因素的干扰, 导致了很多局部极小值点的存在, 所以常常造成传统分水岭算法过度分割的现象。 OpenCV 提供了一种改进的分水岭算法, 即基于标记图像的分水岭算法。 主要思路是通过先验知识来指导分水岭算法, 使得水淹过程从一组预先定义好的标记像素开始。 如果两个标签相同的集水盆汇合, 就不创建分水岭,以避免过度分割。图 4.2显示了传统分水岭算法和 OpenCV 基于标记的分水岭算法的区别。

OpenCV 中的 watershed()函数实现了分水岭算法, 其函数原型是:

C++: void watershed(InputArray image,InputOputArray markers)

第一个参数, InputArray 类型的源图像,填 Mat类型对象即可, 注意必须为 8 位三通道的彩色图像。

第二个参数,InputOputArray 类型的标记图像。 标记图像像素值为32 位有符号整数,每个非零像素代表一个标签。 它的作用是对图像中部分像素作标记,表明它们的所属区域是已知的。 分水岭算法可根据这个初始标签确定其他像素所属的区域。 分割结果也存储在该参数中。

4.1.2 侧脸轮廓的提取

4.1.1 节知,在执行分水岭算法前,需要实现人脸和背景的自动标记。 文献[26]提出了一种自动的前景背景标记方法,主要思路是先利用阈值分割算法初步分割前景和背景,前景像素直接作为前景标记点,然后将白色前景做深度形态学膨胀,紧接着将深度膨胀后的图像中的黑色部分作为背景标记点,即完成了对前景背景的自动标记。 经实验研究, 该方法因为阈值分割算法欠分割或过分割的缺点, 误差太大.

因此设计了一种新的自动标记方法, 结合分水岭算法实现了对侧脸轮廓的提取。具体步骤如下:

4.2 鼻尖下巴检测和人脸矫正

在对人脸进行旋转矫正前, 需要确定旋转的角度。 一种直观的做法是, 根据额头和下巴连线与垂直线之间的夹角确定旋转角度。但是受发际线差异、发型遮挡、 额头形状不一等因素的影响,额头的定位将变得困难和不明确。 因为人脸的鼻尖和下巴外观上比较稳定, 所以设计了一种通过定位鼻尖下巴来确定旋转角的方法。

4.2.1 基于凸点检测聚类的鼻尖下巴检测

观察侧脸轮廓,可以发现额头、鼻尖、下巴、脖颈是其外接凸多边形的顶点。 因此可以通过检测侧脸轮廓凸点来进行鼻尖下巴定位。OpenCV提供了求取轮廓凸点的 convexHull() 函数,其实现原理是基于极角排序和左转判定Sklansky 算法[27]。 凸点检测结果如图 4.7(a)所示,可见在侧脸轮廓的额头、鼻尖、下巴、脖颈处检测到一系列凸点。

接着需要对检测到的凸点进行聚类,求聚类中心。经典的无监督聚类算法复杂度高, 本文从实际出发,设计了一种高效、快速的聚类方法,其思路是:

取第二个、第三个聚类中心即分别为鼻尖和下巴。鼻尖下巴检测结果如图4.8 所示。

4.2.2 基于仿射变换的几何归一化

定位鼻尖和下巴后,可根据两者位置和间距对人脸窗口进行旋转、缩放和剪裁。本文利用仿射变换实现。 仿射变化的本质是线性变化加平移, 可以实现图片的旋转、平移和缩放操作。 一个任意的图像仿射变换都能表示为乘以一个 2×2 矩阵 (线性变换) 接着再 加上一个向量 (平移)。 即:

设鼻尖下巴连线和垂直线之间的夹角为 θ,若 θ 非零,需对人脸图像进行旋转矫正。可以证明,以鼻尖点(a,b)为旋转中心,原图像坐标为(x,y) ,旋转θ 后,图片坐标(x’,y’)为:

由此可以得到旋转变化矩阵为:

我们利用 OpenCV 函数 getRotationMatrix2D( Point2f center, double angle, doublescale ) 求得旋转矩阵。前两个参数分别为旋转中心和旋转角度,第三个参数即为缩放因子, 可由设定的标准脸模板鼻尖下巴距离和原图像两者间距之比确定。 然后调用函数 warpAffine( InputArray src, OutputArray dst,InputArray M, Size dsize) 实现仿射变换,各参数含义: 1) src:输入图像。 2) dst:输出图像 3) M:仿射变换矩阵 4) dsize: 输出图像大小。 几何归一化示意图见图 4-7

4.3 算法流程和实验结果

整个 90 度侧脸对齐的算法流程如下:

侧脸对齐结果见图4.10。 可以发现人脸的鼻尖、 眼睛、 嘴巴等器官几乎在同一水平线上。考虑到嘴部包含了最多的侧脸表情信息, 该算法最大限度地保留了嘴部区域,且使背景区域主要集中在右上角第一象限区域(图 4.9),可以舍弃。

本算法的关键是鼻尖和下巴的定位。为衡量算法的有效性,定义

检出率:成功定位出鼻尖下巴的帧数/检测帧数;
正确率: 正确定位鼻尖下巴的帧数/成功定位出鼻尖下巴的帧数。

选取了2484帧侧脸图像进行实验, 检出率为 84.66%,正确率为 97.01%。 分析造成检出率不够高的原因是设计的分水岭算法对复杂背景、 光照变化鲁棒性不够强。所以采用的基于标记的分水岭算法仍有较大的改进空间。文献[28-31]都提出了改进的基于标记的分水岭算法,这是今后努力的方向。


5 侧脸微笑表情识别

从图像中提取高效的特征表达是实现表情识别的关键一步,表情特征的优劣直接决定了后续表情分类的准确性。利用 Gabor滤波器组提取表情特征是较为成熟的一种手段。文献[32-35 ]通过提取Gabor 特征进行表情识别, 都取得了可观的识别率。但是该特征提取算法耗时、占内存。 相较 Gabor特征, LBP特征计算简单,占用内存小,计算速度快, 在低维子空间仍然保留有效表情信息,同时具有灰度不变性和旋转不变性等显著优点。 因此很多研究者展开了基于LBP 特征的表情识别工作[36-37]。考虑以上情况,本文提取图像的LBP 特征作为人脸表情特征。

5.1 基于 LBP 的表情特征提取

LBP 算子可以描述为[38]:如图 5.1所示, 邻域 8个像素点依次与中心点像素作灰度值比较,若大于中心点像素值,则置 0,否则置 1,然后按顺时针方向得到一个二进制串,称为LBP 码或 LBP模式,作为中心像素点的灰度值,以此描述该3×3区域的纹理特征。

LBP算子可以严格定义为:

易知 LBP 算子将产生 282 =256LBP模式,码值范围为 0-255。 研究发现[39]: 各模式在图像中出现的频率差异较大, 某些 LBP模式比其他模式包含更多纹理信息,Ojala 等人称之为等价模式。 若某一 LBP 码至多包含两次0→11→0 跳变,则被定义为一个等价模式类。如 00000000(0次跳变),00000111(只含一次从 01 的跳变),10001111(先由 1 跳到 0,再由 0 跳到 1,共两次跳变)都是等价模式类。除等价模式类以外剩余模式合并为一类,称为混合模式类。 例如 00010001(三次跳变),10010111(四次跳变)。表5.1 统计了不同跳变情况下的LBP模式个数。

由表5.1 知,等价模式类共有2+14+42=58个,按码值升序排列,重新编码为 1-58。混合模式类则被重新编码为0。这样一共只有 59 类模式,相比原来的 256类模式数大大减小。

LBP算子扫描图像将得到 LBP图谱。然后提取 LBP统计直方图作为表情特征。基于全局图像的直方图将不可避免地丢失空间信息。 所以 Ahonen 等人提出[40],将 LBP 图谱等分成 m 个局部块 R0R1, ⋯,Rm,并提取每个局部块的直方图,然后将这些直方图依次连接在一起形成LBP 统计直方图,即LBPHLBPH的严格定义为:

考虑到识别效果和特征维数,对60×140大小的标准化图像进行 4×7 的分割,如图5.2 所示,图像被均匀分割成 28 个局部块。因为冗余背景主要集中在图像右上角,故舍弃右上角的 6 个局部块,只剩下22个局部块。构建的 LBPH 特征长度为 22×59=1298 维。

由前所述,一幅人脸图像的 LBP 表情特征构建过程总结如下:

考虑到训练速度和分类性能, 仍选用检测速度优化的线性SVM作为表情分类器。关于线性 SVM, 已经在3.2节做过介绍,不再重述。

5.2 算法流程和实验结果

整个微笑表情识别算法步骤如下:

挑选了 1057 张正样本图像, 236 张负样本图像。 部分正负样本如图 5.3所示。为减小正负样本数不平衡带来的影响, 通过提高/降低亮度 10%,放大/缩小 10%的方式增加了764张负样本图像。 测试方式采用交叉验证。

5.2 显示了本算法的各项评估指标值。 可知本算法虚警率、漏警率较低,正确率较高,算法性能在可接受范围内。 联系实际, 应尽可能降低虚警率。 而造成虚警的主要原因是训练正样本中包含了一些微笑程度不高的样本,这些样本在分类时容易与负样本混淆。解决途径之一是增加一个中性表情分类器,将一些“似笑非笑”的难分样本作为正样本,而将“明显微笑”和“明显不微笑”的样本作为负样本。 通过两级级联的表情分类器,对收费人员的表情判别将更准确、更客观。


6 微笑表情识别系统的实现

前四章分别实现了人脸检测跟踪、姿态判别、人脸对齐、表情识别等环节。本章将在前文工作基础上,实现带 GUI界面的演示系统。

6.1 系统开发环境

表 6.1 列出了开发本系统所需的硬件平台和软件平台的相应支持项。

接下来对开源库 OpenCV 和开源框架 Qt做简要介绍。详细内容可参考文献[41-42]。

6.2 GUI 界面演示

本文最终开发的系统界面如图 6.1所示。

主界面从左到右,从上到下分为显示区、截取区、设置区、检测区、 查看区共 5 个功能区。各功能区介绍如表 6.2

下面是各功能区的运行演示。

(1)显示区

如图 6.2 所示, 在设置区“摄像头选择”下拉菜单中选择要打开的监控视频, 显
示区将显示当前监控视频画面。

(2)截取区

提供给管理人员一个直接截取非微笑“证据帧”的功能。 如图6.3所示, 按下“抓取”按钮(按钮变蓝),可以连续截取 2 帧。点击“保存”或“丢弃” 按钮,可以保存或舍弃截取帧。在查看区点击“查看”按钮可以查看保存的截取帧。

(3)设置区

如图 6.4所示, 点击“摄像头选择”下拉菜单,可以选择要打开的监控视频。在“姿态选择”栏,可以设置进行正脸微笑检测还是侧脸微笑检测。拖动“微笑比例设置”滑动条,可以设置微笑帧比例门限,初设值为 50%。当微笑帧比例低于门限时,检测区的“微笑帧比例”显示将被标红。点击“OFF-ON”按钮可开始/停止微笑检测。

(4) 检测区

如图 6.5 所示,检测区显示人脸检测跟踪结果、姿态判别结果、人脸归一化结果、微笑判别结果、 微笑帧比例计算结果等。 本系统在实际应用中,可以考虑去除中间检测结果的显示,只保留微笑帧比例计算结果的显示。关于正脸微笑检测功能的实现见附录 1

(5) 查看区

如图 6.6 所示, 点击“查看结果”,可以查看历史微笑检测结果和保存的抓取帧。点击“帮助文档”,可以查阅用户使用手册。点击“联系我们”可以跳转到合肥工业大学官网。查看区正下方是软件著作权声明。


结 论

人脸表情识别是情感计算和智能化人机交互领域的重要课题,在心理学、智能机器人、智能监控、虚拟现实和合成动画等领域有巨大的应用潜力。本文选取实际拍摄的武汉高速收费站微笑监控视频,进行复杂环境下的侧脸微笑表情识别研究工作,并设计实现了基于 OpenCVQT 的微笑表情识别原型系统。本文主要工作和创新点总结如下:

(1) 提出了一种新的复杂环境下的多姿态人脸实时检测跟踪算法。解决了肤色分割法检测人脸易受肤色背景干扰的难题。 并针对积分投影法确定人脸边缘的不足,设计实现了积分图优化的朴素模板匹配算法。 算法实时性优越。

(2) 提出了一种基于四分图的HOG 姿态特征描述子, 计算简单快速, 对 90 度侧脸具有良好的判别能力,具备一定应用价值。

(3) 提出了一种新的侧脸对齐方法。利用标记分水岭算法实现精确侧脸轮廓提取, 对轮廓进行凸点检测聚类, 实现了鼻尖下巴定位,根据两者位置和间距利用仿射变化实现几何归一化。 该算法对侧脸对齐的进一步研究具有启发意义。

(4) 利用线性 SVM分类器实现了姿态判别和微笑表情识别,并对其进行了检测速度上的优化。

(5) 设计实现了基于QT 的系统GUI 界面。

本文仍有以下问题和不足, 有待进一步的研究和改进:

(1) 分水岭算法提取侧脸轮廓的方法鲁棒性不够强。

(2) 微笑表情分类器的虚警率有待进一步的降低。

(3) 提出的各算法未跟其他现有算法进行严谨的比较。

(4) 未将算法设计与硬件实现相结合,真正使算法走向实用。


附录 针对第二类视频的正脸微笑表情识别

实际上, 本课题要处理两类视频。 如附图 1 所示, 第一类视频在岗亭内拍摄, 需要对其进行侧脸微笑表情识别;第二类视频在车道内拍摄, 需要对其进行正脸微笑表情识别。

考虑到论文内容的创新性和统一性, 在正文仅重点阐述了侧脸表情识别算法的原理和实现。 而本文开发的系统实际上也实现了针对第二类视频的正脸微笑表情识别。采用的方法比较常规,主要步骤如下:

在系统界面设置区“姿态选择” 栏勾选“正脸”,即可进行正脸微笑表情识别。
系统运行结果演示见附图2


参 考 文 献

[1] 邹国锋, 王科俊, 原蕾,等. 人脸表情识别研究新进展[C]// the 25th chinese controland decision conference. 2013.

[2] 梁路宏 , 艾海舟 , 徐光祐 ,等 . 人脸检测研究综述 [J]. 计算机学报 , 2002,
25(5):449-458.

[3] 杨光正, 黄熙涛. 镶嵌图在人面定位中的应用[J]. 模式识别与人工智能 ,
1996(3):213-220.

[4] 黄建 , 李文书 , 高玉娟 . 人脸表情识别研究进展 [J]. 计算机科学 , 2016,
43(S2):123-126.

[5] Vapnik V, Cortes C. Support vector networks[J]. Machine Learning, 1995, 20(3):273-297.

[6] 桑应宾. 基于 K 近邻的分类算法研究[D]. 重庆大学, 2009.

[7] 徐文晖, 孙正兴. 面向视频序列表情分类的 LSVM 算法[J]. 计算机辅助设计与图形学学报, 2009, 21(4):542-548.

[8] Yang M H, Kriegman D J, Ahuja N. Detecting Faces in Images: A Survey[J]. IEEETransactions on Pattern Analysis & Machine Intelligence, 2002, 24(1):34-58.

[9] 姜丽 , 谭峰 , 富爽 ,等 . 肤色在各颜色空间的聚类分析 [J]. 科技与生活 ,
2010(9):116-117.

[10] 陶霖密, 彭振云. 人体的肤色的特征[J]. 软件学报, 2001, 12(7):1032-1041.

[11] 赵明华, 游志胜, 穆万军,等. 基于肤色分割、数学形态学和几何方法的人脸检测[J]. 四川大学学报自然科学版, 2005, 42(3):617-620.

[12] 宋红, 石峰, 王一拙. 视频图像中的实时人脸检测方法[J]. 计算机工程, 2004, 30(19):23-24.

[13] 刘文卿, 朱俊青, 王林泉. 基于积分投影的快速人脸定位[J]. 计算机辅助工程, 2003, 12(2):1-6.

[14] 石东海. 人脸检测和定位方法研究[D]. 国防科学技术大学, 2002.

[15] Viola P, Jones M J. Robust Real-Time Face Detection[C]// Computer Vision, 2001.ICCV 2001. Proceedings. Eighth IEEE International Conference on. DBLP, 2004:747.

[16] 马瑾, 陈立潮, 张永梅. 基于分类的头部姿态估计算法的研究[J]. 图书情报导刊,2006, 16(2):153-154.

[17] 陈书明, 陈美玲. 头部姿态估计技术研究综述[J]. 泉州师范学院学报, 2015,
33(6):78-85.

[18] Dalal N, Triggs B. Histograms of Oriented Gradients for Human Detection[C]// IEEE Conference on Computer Vision & Pattern Recognition. 2005:886-893.

[19]刘坤, 罗予频, 杨士元. 光照变化情况下的静态头部姿态估计[J]. 计算机工程, 2008, 34(10):16-18.34

[20] 臧舒婷. 基于单目相机的头部姿态估计算法研究[D]. 东北大学, 2013.

[21] 董力赓, 陶霖密, 徐光祐. 基于二阶梯度朝向直方图特征的头部姿态估计[J]. 清华大学学报自然科学版, 2011(1):73-79.

[22] 李航. 统计学习方法[M]. 清华大学出版社. 2012-3:100-108

[23] Sim T, Baker S, Bsat M. The CMU Pose, Illumination, and Expression (PIE)database[C]// IEEE International Conference on Automatic Face and Gesture Recognition, 2002. Proceedings. IEEE, 2002:46-51.

[24] Gao W, Cao B, Shan S, et al. The CAS-PEAL Large-Scale Chinese Face Database and Baseline Evaluations[J]. IEEE Transactions on Systems, Man, and Cybernetics - Part A: Systems and Humans, 2007, 38(1):149-161.

[25] 李月龙, 靳彦, 汪剑鸣,等. 人脸特征点提取方法综述[J]. 计算机学报, 2016,
39(7):1356-1374.

[26] 相银初. OpenCV 计算机视觉编程攻略(第二版) [M]. 人民邮电出版社.2015-9:110-116.

[27] Sklansky J. Finding the convex hull of a simple polygon[J]. Pattern Recognition Letters,1982, 1(2):79-83.

[28] 高丽, 杨树元, 李海强. 一种基于标记的分水岭图像分割新算法[J]. 中国图象图形学报, 2007, 12(6):1025-1032.

[29] 胡敏, 蔡慧芬. 基于形态学标记连通的分水岭图像分割[J]. 电子测量与仪器学报, 2011, 25(10):864-869.

[30] 王国权, 周小红, 蔚立磊. 基于分水岭算法的图像分割方法研究[J]. 计算机仿真,2009, 26(5):255-258.

[31] 王洪元, 袁春婉, 赵磊,等. 基于先验知识和标记分水岭的车牌定位算法[J]. 常
州大学学报(自然科学版), 2010, 22(3):64-68.

[32] Zhang Z, Lyons M, Schuster M, et al. Comparison Between Geometry-Based and Gabor-Wavelets-Based Facial Expression Recognition Using Multi-Layer Perceptron[C]//. International Conference on Face & Gesture Recognition. IEEE Computer Society, 1998:454.

[33] 叶敬福, 詹永照. 基于 Gabor 小波变换的人脸表情特征提取[J]. 计算机工程,
2005, 31(15):172-174.

[34] 朱健翔, 苏光大, 李迎春. 结合 Gabor 特征与 Adaboost 的人脸表情识别[J]. 光电子·激光, 2006, 17(8):993-998.

[35] 邓洪波, 金连文. 一种基于局部 Gabor 滤波器组及 PCA+LDA 的人脸表情识别方法[J]. 中国图象图形学报, 2007, 12(2):322-329.

[36] Shan C, Gong S, Mcowan P W. Facial expression recognition based on Local Binary Patterns: A comprehensive study[M]. Butterworth-Heinemann, 2009.

[37] 刘伟锋, 李树娟, 王延江. 人脸表情的 LBP 特征分析[J]. 计算机工程与应用,35 2011, 47(2):149-152.

[38] Ojala T, Harwood I. A Comparative Study of Texture Measures with Classification Based on Feature Distributions[J]. Pattern Recognition, 1996, 29(1):51-59.

[39] Ojala T, Pietikäinen M, Mäenpää T. Multiresolution Gray-Scale and Rotation Invariant Texture Classification with Local Binary Patterns[C]// European Conference on Computer Vision. Springer-Verlag, 2000:404-420.

[40] 毛星云等. OpenCV3 编程入门[M]. 电子工业出版社. 2015-2:4-6

[41] 陆文周. QT5 开发及实例[M]. 电子工业出版社. 2014-1:1-2


致 谢

略略略~

上一篇下一篇

猜你喜欢

热点阅读