这是我的本科毕设论文(文章和代码均是独立完成),放到简书上做个备份。
- 毕设要解决的任务是:
开发一个微笑表情识别系统,从实地拍摄 的监控录像中 判别关键帧,对服务人员在收费过程中的面部表情实现 实时 地自动监测,判断其是否微笑,并计算微笑帧比例,向上层管理人员提供微笑服务质量参考评价
-
实验设备:
13
年以1800
人民币入手的笔记本电脑
接下这个任务时,我仅仅具备一点点图像处理知识。到了毕设中后期,我几乎每天都在失眠,每天都在写代码,看论文。现在回头看看,我用自己的一些小聪明(没有运用深度学习方法)完成了一个这么艰巨的任务,实现了一个原型系统, 还是很自豪的,可以说是我本科阶段最引以为傲的一件事了。事实上直到深度学习泛滥的今天,这个任务也没有被很好的解决。
- 实地拍摄的视频:红色框是我的人脸检测算法的实验结果。
-
我用
C ++
实现的原型系统:
作 者: 月牙眼的楼下小黑
联 系: 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
的微笑服务质量评估系统。全文分为六章。 各章组织结构如下:
-
第 1 章 绪论
介绍了课题背景和研究意义,对表情识别系统各环节的主流方法和技术做了简要介绍, 并对表情识别领域未来研究方向做了展望。 最后对本文组织结构做了概述。 -
第 2 章 多姿态人脸实时检测跟踪
提出了一种新的复杂环境下的多姿态人脸实时检测跟踪算法。介绍了肤色分割方法;设计了一种快速去除肤色背景干扰的方法;设计了一种新的基于朴素模板匹配的人脸边界确定方法, 同时用积分图对其做了优化,提高了算法执行速度。 -
第 3 章 单目视频下的 90 度侧脸姿态判别
提出了一种新的基于四分图的HOG
姿态特征描述子, 经实验验证对90
度侧脸具有优良的判别能力。 对线性SVM
做了简要介绍,并对其做了检测速度上的优化;最后利用HOG+SVM
实现了90
度侧脸的姿态判别。 -
第 4 章 90 度侧脸的人脸对齐
提出了一种新的侧脸对齐方法。简介了OpenCV
中的分水岭算法;设计实现了基于标记分水岭算法的侧脸轮廓提取算法;设计实现了基于凸点检测聚类的鼻尖下巴检测算法, 最后利用仿射变化实现侧脸的几何归一化。 -
第 5 章 侧脸微笑表情识别
介绍了LBP
特征, 采用线性SVM
实现了微笑表情判别。 -
第 6 章 微笑表情识别系统的实现
展示了设计实现的微笑表情识别原型系统。介绍了系统运行的支持环境; 进行了系统GUI
界面的功能演示。最后对主要工作内容和创新点做了总结, 并指出了存在的问题和今后改进的方向。 为做到系统功能的完整性描述, 在附录中补充介绍了针对第二类视频的正脸微笑表情识别算法。
2 多姿态人脸的实时检测跟踪
表情识别系统工作原理可分为人脸定位、 人脸对齐、 特征提取、 分类识别 4
个环节,准确获取人脸是进行表情识别的前提条件。 在基于视频序列的人脸检测中,如何做到算法的实时性和对人脸角度旋转的鲁棒性是两个关键问题。 主流的人脸检测方法有[8
]模板匹配、 PCA
特征脸、基于统计模型方法及人工神经网络等,这些方法主要针对正脸检测, 而且运算量大, 速度上一般不能满足实时性要求。 人脸肤色在表情姿态变化时仍具有相对稳定性, 且肤色检测速度快,利用肤色信息定位人脸成为人脸实时检测跟踪研究的重要方法.
2.1 肤色分割
大量的研究表明[9-11
] :在去除亮度信息的色度空间中,不同种族、不同性别、不同年龄的人脸肤色分布具有很好的聚类性。YCbCr
空间具有亮度分离、CbCr
两维独立分布的优点, 所以选用YCbCr
空间作为检测空间。 源图像从RGB
空间转化到 YCbCr
空间的变换矩阵为:
从 9
段视频序列中截取了 100
幅肤色区域图片,通过实验发现肤色样本在 YCbCr
空间内的 Cb
值和 Cr
值体现良好的聚类性, Cb
值范围为[104
, 123
],Cr
值范围为[104
,123
], 据此建立肤色聚类模型, 即像素 P
在 YCbCr
空间内, 若同时满足:
则判定 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 算法流程和实验结果
整个人脸检测跟踪算法流程如下:
- 1) 根据肤色聚类模型进行肤色分割,对分割结果进行闭运算操作。
- 2) 根据二帧差法获得前景二值帧。
- 3) 将前景二值帧和肤色二值帧进行与操作, 获得人脸二值图像。
- 4) 计算人脸二值图像积分图
- 5) 在人脸二值图像中执行模板匹配算法,获得人脸边界
为证明该方法的优越性, 选取武汉高速收费站微笑摄像机拍摄的视频序列进行
了实验。视频帧大小为 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
姿态特征提取算法。 算法具体步骤如下:
- 1) 将人脸图像灰度化,并归一到
96×96
像素大小。 - 2)对图像进行
Gamma
校正, 减少光照因素影响。 公式如下:
- 3)计算梯度图像。水平边缘算子: [
-1, 0, 1
];垂直边缘算子: [-1, 0, 1
]T。
像素点(x,y
) 的梯度计算公式为:
梯度图像求解过程见图 3.2
。
- 4)将梯度图像分成
2×2
个窗口(win
),每个窗口大小为48×48
像素。 然后将每个窗口分为3×3
个块(block
), 每个块的大小为16×16
像素。再将每个块分为2×2
个单元(cell
), 每个单元的的大小为2×2
像素。 窗口(win
)、块(block
)、单元(cell
)与梯度图像的关系如图3.3
所示。
-
5) 统计每个
cell
的加权梯度方向直方图。 考虑方向范围[0°,180°
],每隔20°
分为一个区间, 共分为9
个bin
。每个像素的方向用梯度幅度加权后,累加到对应bin
区间,得到每个cell
的梯度方向直方图。 -
6) 将每个
block
内的4
个cell
的梯度方向直方图连在一起成为该block
的梯度方向直方图,再对其进行二范数归一化。 归一化因子可以表示如下:
-
7 ) 将每个
win
内的9
个block
的梯度方向直方图连在一起成为该win
的梯度方向直方图。 -
8)将
4
个win
的梯度方向直方图连在一起成为最终的姿态特征描述子。最终的HOG
描述子维数是:(2×2)win×(3×3)block×(2×2)cell×(9)bin=1296
维。
步骤 5-8
如图 3.4
所示。
3.2 检测速度优化的线性 SVM 分类器
提取姿态特征后,下一步将进行分类器的训练和测试。参考文献[18
]和文献[20
]的做法,选用经典的支持向量机算法(SVM
)作为姿态分类器。
3.2.1 线性 SVM 简介
假设给定线性可分的训练数据集:
SVM
的目的是寻找最大间隔的最优超平面。 设最优超平面为:
易证最大化间隔即最小化 1/2
‖w‖2。从而得到优化目标函数:
这本质上是一个凸二次规划问题[22
]。 一般通过求解对偶问题得到原始问题的最优解。首先引入拉格朗日乘子αi
(αi
≥ 0),定义拉格朗日函数:
原优化目标函数等价于直接优化对偶问题:
3.2.2 线性 SVM 优化
当训练样本数较多或过拟合现象较严重时,支持向量的数量往往会上升, 在数据维度较大的情况下,将引起明显的测试速度下降。 通过观察决策函数式(3-13
)的结构,依据乘法分配律设计了一种优化方法。具体步骤是:
3.3 算法流程和实验结果
整个态判别算法步骤如下:
- 1) 从检测得到的人脸中,选取
90°
右侧脸姿态人脸为训练正样本,其他所有姿态人脸为训练负样本。 - 1)提取正负样本的
HOG
姿态特征,训练线性SVM
得到姿态分类器。 - 2) 加载已经训练好的姿态分类器, 提取待测样本的
HOG
姿态特征, 送入分类器得姿态到判别结果。
为验证算法有效性, 挑选了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
]提出了一种自动的前景背景标记方法,主要思路是先利用阈值分割算法初步分割前景和背景,前景像素直接作为前景标记点,然后将白色前景做深度形态学膨胀,紧接着将深度膨胀后的图像中的黑色部分作为背景标记点,即完成了对前景背景的自动标记。 经实验研究, 该方法因为阈值分割算法欠分割或过分割的缺点, 误差太大.
因此设计了一种新的自动标记方法, 结合分水岭算法实现了对侧脸轮廓的提取。具体步骤如下:
-
1) 将检测到的人脸窗口向右移动一定宽度,保证侧脸轮廓的完整性。
-
2) 求人脸肤色区域的外接凸多边形,将此凸多边形的中心作为前景标记,中心仿射变化
n
倍后作为背景标记, 执行分水岭算法, 分割结果如图4.3
所示。
-
3)肤色背景干扰了外接凸多边形的求解,导致了分割结果的不理想, 如图
4.4
所示。
-
4) 如图
4.5
, 将初次分割的结果和肤色图做与操作, 获得修正的肤色图, 然后重复步骤2
,即执行第二次分水岭算法。
- 5)获得人脸连通域后, 利用
OpenCV
中的findContours()
函数对分割结果进行轮廓检测, 获得精确的侧脸轮廓,如图4.6
所示:
4.2 鼻尖下巴检测和人脸矫正
在对人脸进行旋转矫正前, 需要确定旋转的角度。 一种直观的做法是, 根据额头和下巴连线与垂直线之间的夹角确定旋转角度。但是受发际线差异、发型遮挡、 额头形状不一等因素的影响,额头的定位将变得困难和不明确。 因为人脸的鼻尖和下巴外观上比较稳定, 所以设计了一种通过定位鼻尖下巴来确定旋转角的方法。
4.2.1 基于凸点检测聚类的鼻尖下巴检测
观察侧脸轮廓,可以发现额头、鼻尖、下巴、脖颈是其外接凸多边形的顶点。 因此可以通过检测侧脸轮廓凸点来进行鼻尖下巴定位。OpenCV
提供了求取轮廓凸点的 convexHull()
函数,其实现原理是基于极角排序和左转判定Sklansky
算法[27]
。 凸点检测结果如图 4.7(a)
所示,可见在侧脸轮廓的额头、鼻尖、下巴、脖颈处检测到一系列凸点。
接着需要对检测到的凸点进行聚类,求聚类中心。经典的无监督聚类算法复杂度高, 本文从实际出发,设计了一种高效、快速的聚类方法,其思路是:
- 1) 对所有凸点按纵向高度值排序。
- 2) 若相邻点纵向距离小于一定阈值,则聚为一类。 聚类结果见图
4.7(b)
。
取第二个、第三个聚类中心即分别为鼻尖和下巴。鼻尖下巴检测结果如图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 度侧脸对齐的算法流程如下:
- 1 ) 调整人脸窗口位置,保证侧脸轮廓完整性。
- 2 ) 求肤色二值图的外接凸多边形, 中心做为前景标记,放大 n 倍后作为背景标记。
- 3 ) 执行分水岭算法获得分割图像。
- 4 ) 将第一次的分割结果和肤色图做与,获得修正肤色图,重复步骤 2 和 3。
- 5 ) 求前景区域的轮廓,获得侧脸的精确轮廓。
- 6 ) 检测侧脸轮廓的凸点。
- 7 ) 对凸点进行聚类,求聚类中心,根据先验知识确定鼻尖下巴位置。
- 8 ) 根据鼻尖下巴位置和距离对侧脸图像进行旋转、缩放、裁剪,实现侧脸对齐。
侧脸对齐结果见图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
算子将产生 28
2 =256
个LBP
模式,码值范围为 0-255
。 研究发现[39
]: 各模式在图像中出现的频率差异较大, 某些 LBP
模式比其他模式包含更多纹理信息,Ojala
等人称之为等价模式。 若某一 LBP
码至多包含两次0→1
或 1→0
跳变,则被定义为一个等价模式类。如 00000000
(0
次跳变),00000111
(只含一次从 0
到 1
的跳变),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
个局部块 R0
, R1
, ⋯,Rm,
并提取每个局部块的直方图,然后将这些直方图依次连接在一起形成LBP
统计直方图,即LBPH
。 LBPH
的严格定义为:
考虑到识别效果和特征维数,对60×140
大小的标准化图像进行 4×7
的分割,如图5.2
所示,图像被均匀分割成 28
个局部块。因为冗余背景主要集中在图像右上角,故舍弃右上角的 6
个局部块,只剩下22
个局部块。构建的 LBPH
特征长度为 22×59=1298
维。
由前所述,一幅人脸图像的 LBP
表情特征构建过程总结如下:
- 1) 计算
LBP
图谱。 - 2) 对
LBP
图谱分块,我们采用4×7
的分割策略,并舍弃右上角的6
个局部块。 - 3) 计算每个局部块的
LBP
统计直方图cell_LBPH
,并对其进行归一化。 - 3) 所有的
cell_LBPH
按分块的空间顺序依次排列成一行,形成LBP
表情特征。
考虑到训练速度和分类性能, 仍选用检测速度优化的线性SVM
作为表情分类器。关于线性 SVM
, 已经在3.2
节做过介绍,不再重述。
5.2 算法流程和实验结果
整个微笑表情识别算法步骤如下:
- 1) 从归一化侧脸中,选取微笑人脸为训练正样本,非微笑人脸为训练负样本。
- 2)提取正负样本的
LBP
表情特征,训练线性SVM
得到表情分类器。 - 3) 加载已经训练好的表情分类器, 提取待测样本的
LBP
表情特征,送入分类器得微笑判别结果。
挑选了 1057
张正样本图像, 236
张负样本图像。 部分正负样本如图 5.3
所示。为减小正负样本数不平衡带来的影响, 通过提高/降低亮度 10%
,放大/缩小 10%
的方式增加了764
张负样本图像。 测试方式采用交叉验证。
表 5.2
显示了本算法的各项评估指标值。 可知本算法虚警率、漏警率较低,正确率较高,算法性能在可接受范围内。 联系实际, 应尽可能降低虚警率。 而造成虚警的主要原因是训练正样本中包含了一些微笑程度不高的样本,这些样本在分类时容易与负样本混淆。解决途径之一是增加一个中性表情分类器,将一些“似笑非笑”的难分样本作为正样本,而将“明显微笑”和“明显不微笑”的样本作为负样本。 通过两级级联的表情分类器,对收费人员的表情判别将更准确、更客观。
6 微笑表情识别系统的实现
前四章分别实现了人脸检测跟踪、姿态判别、人脸对齐、表情识别等环节。本章将在前文工作基础上,实现带 GUI
界面的演示系统。
6.1 系统开发环境
表 6.1 列出了开发本系统所需的硬件平台和软件平台的相应支持项。
接下来对开源库 OpenCV
和开源框架 Qt
做简要介绍。详细内容可参考文献[41-42
]。
-
OpenCV 简介
OpenCV
是一个开源的计算机视觉库, 采用优化的C/C++
语言编写,实现了图像处理和计算机视觉方面的很多通用算法, 并具有良好的移植性。OpenCV2.4.x
被划分为19
个功能模块。用户使用时只须添加所需模块的相应头文件即可。 -
Qt 简介
Qt
是一个跨平台的C++
图形用户界面应用程序框架。它为应用程序开发者提供
建立艺术级图形用户界面所需的所有功能。 相比MFC
,Qt
完全面向对象, 语法结构清晰, 且具备优良的跨平台性能。Qt
提供的GUI
工具QT Designer
是强大的拖拽式图形化用户界面排版和设计工具,极大地提高了界面开发效率。
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
所示, 点击“查看结果”,可以查看历史微笑检测结果和保存的抓取帧。点击“帮助文档”,可以查阅用户使用手册。点击“联系我们”可以跳转到合肥工业大学官网。查看区正下方是软件著作权声明。
结 论
人脸表情识别是情感计算和智能化人机交互领域的重要课题,在心理学、智能机器人、智能监控、虚拟现实和合成动画等领域有巨大的应用潜力。本文选取实际拍摄的武汉高速收费站微笑监控视频,进行复杂环境下的侧脸微笑表情识别研究工作,并设计实现了基于 OpenCV
和 QT
的微笑表情识别原型系统。本文主要工作和创新点总结如下:
(1) 提出了一种新的复杂环境下的多姿态人脸实时检测跟踪算法。解决了肤色分割法检测人脸易受肤色背景干扰的难题。 并针对积分投影法确定人脸边缘的不足,设计实现了积分图优化的朴素模板匹配算法。 算法实时性优越。
(2) 提出了一种基于四分图的HOG
姿态特征描述子, 计算简单快速, 对 90 度侧脸具有良好的判别能力,具备一定应用价值。
(3) 提出了一种新的侧脸对齐方法。利用标记分水岭算法实现精确侧脸轮廓提取, 对轮廓进行凸点检测聚类, 实现了鼻尖下巴定位,根据两者位置和间距利用仿射变化实现几何归一化。 该算法对侧脸对齐的进一步研究具有启发意义。
(4) 利用线性 SVM
分类器实现了姿态判别和微笑表情识别,并对其进行了检测速度上的优化。
(5) 设计实现了基于QT
的系统GUI
界面。
本文仍有以下问题和不足, 有待进一步的研究和改进:
(1) 分水岭算法提取侧脸轮廓的方法鲁棒性不够强。
(2) 微笑表情分类器的虚警率有待进一步的降低。
(3) 提出的各算法未跟其他现有算法进行严谨的比较。
(4) 未将算法设计与硬件实现相结合,真正使算法走向实用。
附录 针对第二类视频的正脸微笑表情识别
实际上, 本课题要处理两类视频。 如附图 1
所示, 第一类视频在岗亭内拍摄, 需要对其进行侧脸微笑表情识别;第二类视频在车道内拍摄, 需要对其进行正脸微笑表情识别。
考虑到论文内容的创新性和统一性, 在正文仅重点阐述了侧脸表情识别算法的原理和实现。 而本文开发的系统实际上也实现了针对第二类视频的正脸微笑表情识别。采用的方法比较常规,主要步骤如下:
- 1)利用
OpenCV
自带的Haar+Adaboost
人脸检测器获得正面人脸图像。 - 2)对人脸图像进行灰度化和直方图均衡化。
- 3)提取图像的
LBP
表情特征,训练SVM
分类器。 - 4)利用已经训练好的表情分类器实现正脸微笑识别。
在系统界面设置区“姿态选择” 栏勾选“正脸”,即可进行正脸微笑表情识别。
系统运行结果演示见附图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
致 谢
略略略~
网友评论