基于svm的微笑识别

(整期优先)网络出版时间:2018-01-11
/ 2

基于svm的微笑识别

李贵凤

(重庆交通大学,计算机科学与技术)

摘要:人脸表情识别是情感识别的一个重要研究内容,而微笑作为人类基本表情之一,有着重要的研究价值,所以本文采用机器学习支持向量机(SVM)技术和HOG特征提取技术对图像进行分类,来判断图片人物是否微笑。

关键词:SVM,人脸识别

Abstract:Facialexpressionrecognitionisanimportantresearchcontentofemotionrecognition.However,smilinghumanfaceoneofthebasicexpressions,hasanimportantresearchvalue,thisarticleusessvmtechnologyandHOGfeatureextractiontechnologytoclassifytheimagetodeterminewhetherthepicturecharacterssmile.

Keywords:svm,Facerecognition

1.1引言

人脸表情是传递思想情感和一种重要方式,尤其在语言不通的情况之下,起到非常重要的辅助语言交流的作用。心理学研究表明,人脸表情是情感的载体之一,含有丰富的人体行为信息,如果把人们之间交流时传递的信息进行分割,从表情可以感知一个人的情绪、行为动机、个性特点[1]。由此可见,对表情的理解是智能的体现,通过对它的研究可以进一步了解人类的心理特点。

如果计算机能够具有理解表情从而表达情感的能力,将从根本上改变人机交互的方式,使计算机能够更好的为人类服务[2]。随着信息技术的高速发展和人类对计算机依赖性的不断增强,人机的交互能力越来越受到研究者的重视。

1.2技术介绍

1.2.1HOG特征介绍

HOG特征:方向梯度直方图(HistogramofOrientedGradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。Hog特征结合SVM分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功[4]。需要提醒的是,HOG+SVM进行行人检测的方法是法国研究人员Dalal在2005的CVPR上提出的,而如今虽然有很多行人检测算法不断提出,但基本都是以HOG+SVM的思路为主[3]。

主要思想:在一副图像中,局部目标的表象和形状(appearanceandshape)能够被梯度或边缘的方向密度分布很好地描述。(本质:梯度的统计信息,而梯度主要存在于边缘的地方)。具体的实现方法是:首先将图像分成小的连通区域,我们把它叫细胞单元。然后采集细胞单元中各像素点的梯度的或边缘的方向直方图。最后把这些直方图组合起来就可以构成特征描述器。

1.2.2HOG特征提取算法的实现过程

HOG特征提取方法就是将一个image(你要检测的目标或者扫描窗口):

1)灰度化(将图像看做一个x,y,z(灰度)的三维图像);

2)采用Gamma校正法对输入图像进行颜色空间的标准化(归一化);目的是调节图像的对比度,降低图像局部的阴影和光照变化所造成的影响,同时可以抑制噪音的干扰;

3)计算图像每个像素的梯度(包括大小和方向);主要是为了捕获轮廓信息,同时进一步弱化光照的干扰。

4)将图像划分成小cells(例如6*6像素/cell);

5)统计每个cell的梯度直方图(不同梯度的个数),即可形成每个cell的descriptor;

6)将每几个cell组成一个block(例如3*3个cell/block),一个block内所有cell的特征descriptor串联起来便得到该block的HOG特征descriptor。

7)将image内的所有block的HOG特征descriptor串联起来就可以得到该image(你要检测的目标)的HOG特征descriptor。这是最终的可供分类使用的特征向量了。

1.2.3svm支持向量机

SVM(SupportVectorMachine)指的是支持向量机,是常见的一种判别方法。在机器学习领域,是一个有监督的学习模型,通常用来进行模式识别、分类以及回归分析。

Svm主要思想概括为两点:(1)针对线性可分情况进行分析,对于线性不可分的情况,通过使用非线性映射算法将低维输入空间线性不可分的样本转化为高维特征空间使其线性可分,从而使得高维特征空间采用线性算法对样本的非线性特征进行线性分析成为可能。(2)它基于结构风险最小化理论之上在特征空间中构建最优超平面,使得学习器得到全局最优化,并且在整个样本空间的期望以某个概率满足一定上界。

2.工具环境和数据介绍

2.1工具介绍

本实验主要是在visualstudio2015+opencv3.2环境下进行。

2.2数据介绍

实验数据主要是用4000张图片进行实验分析,图片一共分为两类。一类是代表微笑的图片,另外一类代表是不微笑的。由于数据处理是面向分类的,所以结果还有一类数据标签。实验数据用以代表微信和不微笑的。在进行实验时,为了进行训练模型,所以将实验数据进行分为测试集和训练集。

3.核心代码

Svm的主要代码:

boolsvmTrain()

{vector<string>img_path;//图像路径容器

vector<int>img_catg;//图像类别容器

ifstreamsvm_data("D:/1/train/trainsamsPath.txt");//训练样本图片的路径都写在这个txt文件中,使用bat批处理文件可以得到这个txt文件

while(svm_data)//将训练样本文件依次读取进来

{if(getline(svm_data,buf))

{nLine++;

HOGDescriptor*hog=newHOGDescriptor(cvSize(128,64),cvSize(16,16),cvSize(8,8),cvSize(8,8),9);//图片尺寸:40*32;block尺寸:16*16;cell尺寸:8*8;检测窗口的滑动步长:8*8;一个单元格内统计9个方向的梯度直方图

vector<float>descriptors;//存放结果

hog->compute(trainImg,descriptors,Size(1,1),Size(0,0));//Hog特征计算

cout<<"HOGdims:"<<descriptors.size()<<endl;

n=0;

for(vector<float>::iteratoriter=descriptors.begin();iter!=descriptors.end();iter++)

{cvmSet(data_mat,i,n,*iter);//存储HOG特征n++;}

cout<<"处理完毕:"<<img_path[i].c_str()<<""<<img_catg[i]<<endl;}

4.结果和结论

提取正负样本的hog特征,我在这里采用的是64*128的规模的长方形的图片,经过大约5分钟出结果。正确率为70.0162%。

参考文献:

[1]熊辉.基于HOG和矩特征的人眼检测与定位[D].华中师范大学,2013.

[2]慕春雷.基于HOG特征的人脸识别系统研究[D].电子科技大学,2013.

[3]张彬.基于One-classSVM的人脸识别研究[D].江南大学,2016.

[4]郭雅楠.基于SVM和ELM的人脸识别方法[D].太原理工大学,2015.

[5]于真.基于支持向量机的人脸识别技术研究[J].计算机仿真,2011,28(12):296-299.

[6]陈俊.笑脸表情分类识别的研究[D].华南理工大学,2011.