摘 要

目前已经有很多的基于机器学习的方法用来进行人脸面部表情分析,然而,它们中的大部分都是在公开人脸库上进行测试。这些公开库里面仅有为数不多的几个人的图片,而且通常都是光照条件良好的图片。因此,用这些公开库做的表情分析算法,当应用在实际图片中的情况下,并不见得能取得较好的效果。为提升人工智能环境下笑脸表情识别正确率, 将笑脸表情识别与人工智能更好地结合起来, 进行笑脸识别技术研究。采用Viola-Jones算法检测人脸, 利用Gabor和HOG两种特征提取方法提取人脸特征和嘴部特征, 将提取的特征交叉组合成融合特征, 输入到支持向量机进行分类, 达到笑脸识别目的。另外提出了一种基于嘴角坐标关系的笑脸检测识别方法, 该方法采用Shi&Tomasi角点检测算法对嘴部进行角点检测得到嘴部特征, 再通过计算嘴角坐标平均值进行笑脸识别。实验结果表明, 基于嘴角坐标法识别笑脸正确率为92%, 高于Gabor和HOG特征提取方法。
关键词 角点检测;笑脸检测;特征提取;支持向量机;特征曲线

引言

面部表情是由人脸肌肉的运动形成的, 是情感变化在面部可观察到的表现。面部表情的变化能显示人的心理活动, 调整人之间的社会行为。随着服务机器人产业的兴起, 模式识别走进大众视野, 人们对表情的研究也逐渐增多。其中笑脸识别技术被广泛应用于机器人视觉及数码相机等智能设备。
近年来研究学者提出了多种笑脸检测的方法, 例如深圳华为技术有限公司获得了笑脸检测发明专利权, 其原理主要是通过获取到的人脸视频中嘴部的运动信息来判断是否检测到笑脸;何聪利用一种高层次仿真生物视觉方法来实现笑脸的识别与分类, 该方法主要基于生物启发特征来进行笑脸的特征提取和分类;陈俊研究了基于生物启发特征的真实环境下的笑脸识别, 构造了一个符合人类识别机制的笑脸分类系统;郭礼华等人利用分层梯度方向直方图 (Pyramid Histogram of Oriented Gradients, PHOG) 特征与聚类特征选择进行笑脸识别;严新平融合局部二值模式 (LOCAL BinarPatterns, LBP) 特征与HOG特征来进行笑脸识别研究。
采用Viola-Jones算法来检测人脸, 可将人脸部分提取出来, 采用HOG和Gabor两种特征提取方法提取图片特征, 并送入支持向量机 (support vector machine, SVM) 进行训练。通过观察训练样本中的不同表情, 发现嘴唇的形状变化最能代表不同表情。同时嘴唇外周的特征例如法令纹等, 则不是十分清晰, 不同的图片效果差异很大, 不适合作为判断表情的标准。通过对嘴部特征点拟合曲线进行分析发现, 笑脸的拟合曲线会产生明显的弧度并且拟合曲线两个端点纵坐标的平均值较小, 而其他表情的拟合曲线则接近一条水平线且拟合曲线两个端点纵坐标的平均值较大。故此提出一种基于嘴角坐标平均值变化的笑脸识别方法, 该方法通过对嘴角坐标的计算, 可以准确识别笑脸表情。图1为其主要工作流程。

图1 笑脸识别流程

1 人脸检测

检测采用Viola-Jones算法来识别人脸和嘴部。该算法是由Paul viola和Michael J.Jones共同提出的一种人脸检测框架。它极大地提高了人脸检测的速度和准确率。该算法利用积分图像来提取图像特征值, 利用adaboost分类器的特征筛选特性, 保留最有用特征, 从而有效减少了检测时的运算复杂度, 提升了运算速度。同时将adaboost分类器进行改造, 变成级联adaboost分类器, 提高了人脸检测的准确率。
Viola-Jones算法采用haar-like特征提取方法。Haar-like是由许多黑白块组成的, 分别将白色和黑色区域中的所有像素相加, 然后做差, 就是区域的特征值, 即:

(1)
但是考虑到多尺度问题, 即利用不同大小的扫描窗口去检测不同大小的人脸的问题, 这个特征需要进行归一化处理。首先选定检测窗口的大小, 利用这个窗口对整个图像进行滑动, 每滑动到一个位置, 就在窗口中提取一系列haar-like特征。由于哈尔特征极多, 而这些特征中只有一小部分是有用的, 所以采用adaboost分类器进行特征选择。adaboost分类器的原理就是构造一个由多个弱分类器并联而成的强分类器, 每个弱分类器都根据自己的准确率将自己的分类结果乘以权值, 最后的输出是所有弱分类器输出的加权和。每个弱分类器的分类准确率可以很低, 但是整个强分类器的准确率却会很高。图2为采用Viola-Jones算法提取人脸部分和嘴唇部分。

图2 对人脸和嘴部进行检测提取
2 HOG特征提取
方向梯度直方图 (Histogram of Oriented Gradient, HOG) 特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成图像特征。
HOG特征提取过程如下, 首先要对上述裁剪出来的图片进行Gamma校正来弥补图像光照不均匀的问题。采用平方根的办法进行Gamma标准化, 对标准化后的图像, 求取其梯度及梯度方向。采用的水平和垂直方向的梯度算子为:
垂直方向:
,水平方向:

然后用水平和垂直梯度算子对原图像做卷积运算, 得到x方向 (水平方向, 以向右为正方向) 的梯度分量Gx(x, y) 和y方向 (竖直方向, 以向上为正方向) 的梯度分量Gy(x, y) , 具体为:

(2)

(3)
式中H (x, y) 表示输入图像中像素点 (x, y) 处的像素值。将这两个方向的梯度分量带入下式中即可得到该点的梯度大小和方向:

(4)

(5)
然后将图像划分成若干个cells (单元) , 相邻的cell之间不重叠。在每个cell内统计梯度方向直方图。
随后分别对每个block进行标准化, 一个block内有4个cell, 每个cell含有一个9维特征向量, 故每个block就由4×9=36维特征向量来表征。将所有block的HOG特征结合在一起形成整个图片的HOG特征向量。图3为脸部HOG特征直方图。

图3 脸部HOG特征直方图

3 Gabor特征提取

Gabor变换属于加窗傅立叶变换。Gabor函数可在频域不同尺度、不同方向上提取图片特征。Gabor滤波器的频率和方向类似于人类的视觉系统, 所以常用于纹理识别。在空间域, 二维Gabor滤波器是一个高斯核函数和正弦平面波的乘积, 其复数形式为:

(6)

(7)

(8)

(9)
公式中:λ是正弦函数波长, θ是Gabor核函数的方向, φ是相位偏移, σ是高斯函数的标准差, γ是空间的宽高比。式 (7) 和式 (8) 分别为滤波器的实部和虚部。
首先生成5个尺度和8个方向的Gabor模板, 共计40个模板, 这些模板与样本图像无关。然后利用每一个模板与样本图像做一次卷积运算, 得到对应的40个卷积图像;不同尺度不同方向的Gabor模板对同一幅图像生成了不同视图的数据, 类似于不同的观察角度产生了不同的特征数据, 图4表示了这样的一组脸部Gabor特征。每一个卷积后的样本图像矩阵是9行1列的, 连接在一起就是360行一列的Gabor特征值。本研究共有100张训练样本, 将所有Gabor特征值组合成一个360×100的矩阵, 每一列代表一个图片的Gabor特征。

图4 脸部Gabor特征

4 支持向量机(SVM)

支持向量机 (简称SVM) 是一种新型的机器学习方法, 其主要功能是分类和回归。SVM是由两类线性可分情况下的最优分类面发展起来的。图5为二维线性可分的情况, 其中f (x) 为分类线, f (x1) 和f (x2) 分别为过两类样本中离分类线最近的点且平行于f (x) 的直线, f (x1) 和f (x2) 之间的距离称为两类的分类间隔。

图5 SVM二分类示意图
SVM的基本思想是寻找一个可以将两类样本分开的最优分类线, 使得分类间隔最大。设判别函数为:

(10)
当f (x) =W·x+b的时候, 即为决策边界, f (x1) 和f (x2) 上的样本称为支持向量。对判别函数进行归一化后两类样本都满足︳f (x) ︳≥1, 分类间隔为
,满足
的样本就是

上的支持向量。
因此在支持向量机的训练过程中, 主要目的是获得W, 一旦有了一个训练后的支持向量机 (这个向量机保证了最大的边缘超平面, 使得在此数据集下有较好的分类精度) , 就可以对线性可分的数据进行分类。对于线性不可分的数据, 会添加约束条件进行计算。
通过以下两式可将求W的问题转化为求解拉格朗日乘子αp的问题, 通过对拉格朗日方程求偏导可以得到两个约束条件, 进而求解出αp:

5 嘴角坐标法

5.1 Shi&Tomasi算法

嘴角坐标法首先采用Shi&Tomasi算法对嘴部特征点进行检测, 该算法是Harris算法的改进。Harris角检测器由于能够检测已旋转、缩放、有照明差异或噪声较大的图像中的角点而被广泛应用。Harris算法最原始的定义是将矩阵行列式的值与矩阵特征值的和相减, 再将差值同预先给定的阈值进行比较。后来Shi和Tomasi提出了改进的方法, 若两个特征值中较小的一个大于最小阈值, 则会得到强角点。
设角点检测响应为RH, 对于一个输入图像来说有:




上述四式中α和β为矩阵的特征值, M是一个矩阵, M中的三个矩阵元素如下:




是I关于x方向和y方向的偏导, W是一个高斯窗口, 定义方程如下式, 此处选取σ=0.5。

(20)
当某像素属于一个角时, 该检测器输出RH>0;当像素属于边缘的一部分时, RH<0。

5.2 分类识别

利用Shi&Tomasi算法检测出嘴部的角点特征后, 对这些特征值进行一系列的整合和运算, 得到笑与不笑之间的分界值Pavg, 通过这个值对测试库中的图片进行分类, 分类操作的流程如图6所示。

图6 嘴角坐标法流程图
算法具体过程如下:对于训练阶段来说, 首先通过Shi&Tomasi算法检测出嘴部特征点, 如图7所示;然后计算嘴角部分特征点的数量, 并对这些点进行处理, 去除掉在一个位置上重复的点;根据这些点的坐标画出特征点拟合曲线。

图7 检测嘴部特征点
曲线拟合采用二阶抛物线拟合, 基于最小二乘法曲线拟合原理, 即已知离散的数据集, 构造一个函数, 使原离散点尽可能接近给定的值。最小二乘法是通过最小化误差的平方和, 寻找数据的最佳匹配函数, 如下式所示:

(21)

(22)

通过对上述二式进行计算, 可以得到嘴部特征点的拟合曲线, 如图8所示为笑嘴的角点拟合曲线, 图9则为非笑嘴的角点拟合曲线。再将拟合曲线左右端点的值定义为左右嘴角的特征值, 求这两个点纵坐标的均值, 按此规则操作, 得到所有笑脸及非笑脸嘴角特征点的纵坐标均值。图10即为训练样本纵坐标均值分布曲线。

图8 笑嘴的角点拟合曲线

图9 非笑嘴的角点拟合曲线

图10 训练样本坐标均值分布曲线
通过计算发现, 笑脸的角点纵坐标均值最大为105, 非笑脸的纵坐标均值最小为110, 因此设Pavg=108作为判断图片是否为笑脸的条件。在测试阶段, 如果测试图像左右嘴角的纵坐标均值大于108, 则该图片被判定为非笑脸;如果小于108, 则为笑脸。经过测试, 该方法的准确率达到了92%。

6 实验结果

实验采用Matlab软件进行程序编写及测试, 训练图片为100张, 其中包含50张笑脸图片, 全部来自GENKI笑脸数据库, 50张非笑脸图片, 测试图片100张, 包含多种表情, 非笑脸图片和测试图片皆来自网络搜索。如图11和图12即为截取出的部分人脸图片, 从中可以看出Viola-Jones算法对于检测截取人脸某一部分图片的效果非常好。
将截取出来的图片进行尺寸归一化, 嘴部图片尺寸设置为18×18像素, 单个嘴部的Gabor特征为一个360×1的矩阵, HOG特征为一个1×15的矩阵。应用于Gabor特征提取的脸部图片设置为88×88像素, 每一个图片的Gabor特征为一个360×1的矩阵, 应用于HOG特征提取的脸部图片设置为96×96像素, HOG特征为一个1×1215的矩阵。

图11 脸部截取

图12 嘴部截取
将所有用于训练的图片特征进行交叉组合得到训练总矩阵, 将这个矩阵中代表笑脸图片特征的标签设为1, 代表非笑脸图片特征的标签设为2, 输入到SVM进行训练。用同样的方法求出测试库的特征, 利用训练好的SVM进行分类。
基于角点检测的嘴角坐标法按照上述步骤处理, 得到分类平均值为108, 然后对测试库中的图片进行测试。表1为本方法的正确率。可以看出, 嘴角坐标法的正确率高于Gabor和HOG方法。
表1 不同算法的正确率

7 结论

采用HOG和Gabor这两种特征提取方法来提取脸部特征, 送到SVM进行分类识别, 从而提出一种基于嘴角特征点的微笑检测方法。对于特征提取来说, 提取嘴部的特征比提取整个脸部特征速度更快, 而且数据量比较小, 冗余数据就相对较少, 这会使分类的准确率得到提升。通过融合不同的特征进行测试发现, 提取嘴部Gabor特征的正确率最高, 达到了90%, 而基于嘴角坐标的算法正确率为92%, 高于融合不同特征进行分类的正确率。在今后的研究中, 可以尝试在角点坐标平均值的基础上, 通过计算嘴部张开的面积等方法来进一步细分笑的程度。

参 考 文 献

[1] 视频中面部微表情识别方法研究[D]. 温杰彬.新疆大学 2020.
[2] 面向视频的人脸动态表情识别算法研究[D]. 马奥.吉林大学 2021.
[3] 深度信息交互机制下的微表情识别研究[D]. 朱伟杰.江南大学 2021.
[4] 基于深度学习架构的微表情识别研究[D]. 韦锦涛.曲阜师范大学 2020.
[5] 人脸自发微表情识别方法研究[D]. 郭承玉.国防科技大学 2019.
[6] 基于深度森林的微表情识别方法研究[D]. 滕房儒.哈尔滨工程大学 2020.
[7] 基于小样本学习的微表情识别算法的研究与实现[D]. 王琪.西安电子科技大学 2021.
[8] 基于可解释模型的微表情识别方法研究[D]. 张钥迪.辽宁大学 2020.
[9] 基于时空域深度学习的人脸微表情识别[D]. 任思源.西北大学 2020.
[10] 基于特征融合的动态表情识别算法研究[D]. 黄凯.杭州电子科技大学 2020.
[11] 基于支持向量机的笑脸识别算法研究[D]. 袁成林.广西大学 2015
[12] 基于特征融合的笑脸识别算法研究[D]. 严新平.西安电子科技大学 2012.
[13] 基于LBP的人脸识别研究[D]. 黄非非.重庆大学 2009.
[14] 基于几何特征的表情识别研究[D]. 马飞.云南师范大学 2006.
欢迎大家加我微信交流讨论(请备注csdn上添加)

基于机器学习的笑脸检测相关推荐

  1. [当人工智能遇上安全] 6.基于机器学习的入侵检测和攻击识别——以KDD CUP99数据集为例

    您或许知道,作者后续分享网络安全的文章会越来越少.但如果您想学习人工智能和安全结合的应用,您就有福利了,作者将重新打造一个<当人工智能遇上安全>系列博客,详细介绍人工智能与安全相关的论文. ...

  2. [网络安全自学篇] 二十四.基于机器学习的入侵检测和攻击识别——以KDD CUP99数据集为例

    这是作者的系列网络安全自学教程,主要是关于网安工具和实践操作的在线笔记,特分享出来与博友共勉,希望您们喜欢,一起进步.前文分享了Web渗透的第一步工作,涉及网站信息.域名信息.端口信息.敏感信息及指纹 ...

  3. 二十四.基于机器学习的入侵检测和攻击识别——以KDD CUP99数据集为例

    这是作者的系列网络安全自学教程,主要是关于网安工具和实践操作的在线笔记,特分享出来与博友共勉,希望您们喜欢,一起进步.前文分享了Web渗透的第一步工作,涉及网站信息.域名信息.端口信息.敏感信息及指纹 ...

  4. 卡巴斯基白皮书-基于机器学习的恶意软件检测-笔记

    前言:下文用"我们"表示卡巴斯基实验室,(?)标记尚有疑问处.原文地址.这篇文章描述卡巴斯基实验室基于机器学习的恶意软件检测实践,包括静态分析和行为分析两类检测方法,以及数据预处理 ...

  5. 基于机器学习的入侵检测系统

    导 语 在过去十年中,机器学习技术取得了快速进步,实现了以前从未想象过的自动化和预测能力.随着这一技术的发展促使研究人员和工程师为这些美妙的技术构思新的应用.不久,机器学习技术被用于加强网络安全系统. ...

  6. 基于机器学习的恶意软件检测(二)

    1.恶意软件的基本检测方法 一个有效的,强大的和可扩展的恶意软件识别模块是每个网络安全产品的关键组成部分.基于预执行和执行后两阶段收集的数据,恶意软件识别模块来决定一个对象是否是一个威胁. 预执行阶段 ...

  7. 基于机器学习的webshell检测(一)

    本篇主要讲述,如何使用机器学习的方法来对网络安全中常见的风险点:webshell进行检测 本篇会使用LR ,XGB两种模型进行测试, 下一篇将会使用深度学习方法来解决该问题 (1)首先我们简单介绍一下 ...

  8. 基于机器学习的恶意软件检测(一)

    内容 1.恶意软件的基本检测方法 2.机器学习:概念和定义 1.无监督学习 2.有监督学习 3.深度学习 3.网络安全中的机器学习应用细节 1.需要大规模代表性数据集 2.训练的模型是可解释的 3.误 ...

  9. 基于机器学习进行多阶段全零块检测

    传统的基于阈值的AZB检测算法非常适合死区量化块,但是在RDOQ中错过了部分最优结果,并在RDOQ中有一定的精度下降.本文提出一种新的多级AZB检测算法:第一阶段,通过阈值来预先判断在HDQ和RDOQ ...

  10. [当人工智能遇上安全] 7.基于机器学习的安全数据集总结

    您或许知道,作者后续分享网络安全的文章会越来越少.但如果您想学习人工智能和安全结合的应用,您就有福利了,作者将重新打造一个<当人工智能遇上安全>系列博客,详细介绍人工智能与安全相关的论文. ...

最新文章

  1. 网络编程学习笔记(tcp_connect函数)
  2. ihtml2document能不能根据id获取dom_回到基础:什么是DOM及DOM操作?
  3. maven中spring-boot-dependencies变量名冲突
  4. 使用什么优化器_在机器学习项目中该如何选择优化器?
  5. telnet到设备里 php_金融行业思科设备典型网络故障案例:76系列典型案例(一)...
  6. [学习笔记]上下界网络流
  7. Maven知识点记录 - profile
  8. 架构师软技能之协商(上)
  9. gpu跑普通python程序_普通电脑PC怎样跑TensorFlow的GPU模式
  10. 《梦断代码》阅读笔记03
  11. div 设置a4大小_打印A4网页大小设置
  12. matlab绘制单位球的三维网格图,matlab绘制三维网格图
  13. 信诺计算机怎么算一次函数,excel用一次函数进行计算的方法步骤
  14. word自动更正关闭_如何在OS X中关闭自动更正文本替换
  15. deprecate node-sass@4.9.0 › request@~2.79.0 request has been deprecated, see https://github.com
  16. html.partial mvc5,.net mvc5的 完整源码(深入学习MVC非常有用)
  17. 【几何】计算任意多边形面积
  18. ROS订阅tf并转换坐标
  19. Code bloat has become astronomical
  20. bootstrap-fileinput上传文件插件按钮展示隐藏

热门文章

  1. AAEGan 简介与代码实战
  2. matlab quadratic,请教几个quadratic programming的问题
  3. 自下而上合并排序算法
  4. 雨课堂和微助教比较分析
  5. PDF打印内容缺失问题解决办法
  6. html怎么叠加透明图片,css – 您可以在图片上叠加透明div
  7. 同花顺股票交易接口测试
  8. String 源码浅析————终结篇
  9. Type mismatch in key from map: expected org.apache.hadoop.io.Text, received org.apache.hadoop.io.Lon
  10. 浅谈python运算符运算法则