您的当前位置:首页正文

基于SVM的人脸检测研究

2021-09-18 来源:客趣旅游网
ARTIFICIAL INTELLIGENCE AND IDENTIFICATION TECHNIQUES 人工智能及识别技术 基于SVM的人脸检测研究 胡萍萍 (桂林电子科技大学网络中心,广西桂林541004) 摘要:支持向量机(SVM)是在统计学习理论基础上发展起来的一种新的机器学习算法。依据SVM良好识别和 泛化能力,实现了一种基于支持向量机的图像人脸识别方法。利用Opencv提取样本类的低层特征,训练具有径向 基核函数的SVM分类器,在VS2008和Qt平台下实现识别软件开发。运行结果表明,软件具有良好的图像人脸检 测能力。 关键词:SVM;低层特征;Opencv;人脸检测 Research on Human Face Detection Based on SVM HU Pingping (Network Center,Guilin University of Electronic and Technology,Guangxi Guilin 541004) Abstract:Support Vector Machine(SVM)is a new machine learning algorithms in the ifeld of statistical learning theory.Ac— cording to its good identifying and generalization ability,to implement an image face recognition method based on Support Vector Machine。first to extract low—level features of samples Using Opencv,then train SVM classiifer with RBF kerne1. achieve recognition software development in V¥2008 and Qt platform.Result show that the software has the ability to accu— rately detect human face in image. Key words:SVM;lOW—level features;Opencv;Human Face detection 随着网络技术的发展,数字多媒体数据的日益增多。图 用VS2008打开Cmake生成的OpenCV.sin,在Debug下, 像做多媒体数据的主体,每天都在成级数增长,系统对全部 选择Solution Explorer里的Solution OpenCV,点右键,运行 图像进行索引、查询的速度越来越慢。如果能把图像按类别 “Rebuild Solution”;如编译无错误,再选择INSTALL项目, 分开索引,检索图像的检索系统的性能将得到大幅提高Ill。无 运行“Build”;然后在Release下,重复执行。VS2008调用的 人工参与的图像自动分类技术可以过滤掉别不相关的图像, Opencv动态库生成完毕。 人脸识别技术做为人物类别图像分类的主要方法得到了广泛 1.1.2配置环境 的理论研究。 (1)将VS2008 ̄bin目录加入Windows系统环境变量Path 利用开源类库Opencv和跨平台的c++图形用户界而应用 中。 程序框架Qt,在VS2008编译器下实现了一种基于SVM的人 (2)打开VS2008 Express,逐一打开菜单Tools一>Op— 脸检测方法。 tions一>Projects and Solutions一>Vc++Directories,在右倾0对 l 平台搭建 话框Show directories for下,选择executable files,加入目录 Opencv作为开源跨平台的计算机视觉库,实现了很多图 VS2008下bin目录;再选择include ifles,加入目录VS2008 像处理、计算机视觉、机器学习等方面算法。但其HighGUI 下的include中opencv目录;再选择library flies,加入目录 类库只是用来建立快速软件原形或是试验用的,它的设计意 VS2008下的1ib目录。 图是为用户提供简单易用的图形用户接El[21。于是选用Qt和 1.2 VS2008集成Ot Opencv组合,充分发挥一处编译,处处运行的优势。 在windows上开发,MinGW编译出的debug版本Ot— 1.1 Opencv2.2在VS2008下安装和配置 Cored4.dll很大,故选用快捷的VS编译器和调试器。 在Opencv China网站下载最新Opencv2.2源代码和 1.2.1编译安装 CMake。 下载Ql源代码和Qt Visual Studio Integration,用Visual 1.1.1编译Opencv Studio 2008 Command Prompt进入到命令行,切换至Qt目录 (1)用CMake导出VC++项目文件 输入configure—platform win32一msvc2008,选择版本并开始编 运行cmake—gui,设置路径为OpenCV安装路径,并创建 译qmake工具,输出工程等,然后输入nmake命令编译所有 子目录VS2008,用于存放编译结果。然后点击configure,选 工程。安装Qt Visual Studio Integration。 择Visual Studio 9 2008,如果是VC++2008的Express版本, 则不支持OpenMP,需要取消ENABLE—OPENMP选项,取消 作者简介:胡萍萍(1980一),女,本科,助理工程师,研究 后再次选择“Congfigure”,完成后选择“Generate” 方向:计算机网络与管理。 (2)编译Opencv Debug和release版本库 收稿日期:2011-06—15 黼淼 电脑编程技巧与维护 1.2.2配置环境 增加QTDIR路径为4.6一tpl目录,把4.6一tp下bin和lih 目录加入到PATH中。 在新建项目选择Properties,在LINKER中的INPUT中添 加依赖库opencv—core220d.1ib、 opencv_highgui220d.1ib、 opencv_video220d.1ib、opencvm1220d.1ib、openevlegacy220d. 1ib、opencvimgproc220d.1ib等所需类库。 2 分类器一支持向量机 支持向量机(SVM,Support Vector Machines)是Vapnik 等人根据统计学习理论提出的一种机器学习方法,它以结构风 险最小化原则为理论基础。其主要思想是针对两类分类问题, 在高维空间寻找一个最优分类超平面作为分类平面,以保证 最小的分类错误率。 2.1线・陛可分支持向量机 设SVM算法的输入是一个线性可分样本集合: {(xi, yi)Ixi∈Rd,yi E{一1,1},i=l,2,…,n},其中yi是样本xi的 所属类别标,d是样本的维数,N是训练样本的个数。d维空 间中线性判别函数一般形式为g(x)=w・x+b,分类面方程为 W・x+b=O。其中x输入的样本,W和b分别称为权重向量和偏 置。要求分类函数对所有样本正确分类,即满足: yJ(w・Xi)】+b I, =1.2,…,17 (1) 解minffwTI/2,满足上述条件得到的分类间隔最大,对应 在离分类而最近的各类样本集的边界上的训练样本称为支持 向量131。利用Lagrange优化方法可以将上述最优分类面问题转 换对偶问题,即在约束条件: Yia =0 ,≥o, ‘,,7 r,、 =1 … 求解函数p( 一 1ct,ct iY ̄Y )的最大值 .,解 后得到的最优函数是: _f _厂( )=sgn{(W )+bj=sgn{ aiy,(x ̄’ )+b} f 、 i:I … 其中:sgn 0为符号函数,其取值决定x所属类别。 2.2非线性支持向量机 如果支持向量机解决的是非线性问题,需要通过非线性 映射把数据从非线性空间转化到高维的线性特征空间,由于 支持向量机把原问题转化为对偶问题,计算复杂度不在取决 于空间维数,而取决于样本数,因此可以在高维线性空问求 解最优分类面。根据泛函的有关理论,只要一种核函数满足 Mercer条件,它就对应一变换空间内积,即存在适当的核函 数 (一,X,)= ( ) ( ,),就可以实现某一非线性变换后的 线性分类[41。线性分类中的最优函数可以写成: 0 .J,’ )=sgn{ (誓 )+ } f4) ,=l 由公式(4)可知,核函数的选择影响非线性支持向量机 的分类性能。目前SVm常用的核函数有4种:线性核函数、 多项式核函数、径向基(RBF)核函数、Sigmoid核函数。采 用RBF核函数。 、 毫麓编程技巧与 2011.16 熊 3 程序设计 3.1软件流程  ‘人脸检测程序分为分类器训练、样本检测两个部分,整 个程序的运行流程如图1所示。 图1程序流程 3.2程序实现 3.2.1检测方法训练模块 (1)根据指定样本路径,加载训练样本。其中人脸图像 (正例样本)数为500,非人脸图像(负例样本)数为1000, 通过CV—LOAD—IMAGE—GRAYSCALE参数将输入图像转换为 单通道二值图像,调整图像为指定大小,然后进行平滑处理, 减小噪声的影响,记录样本图像每个像素的像素值作为特征 向量,特征向量维数为19"29,存储在数组中。正例样本加载 代码如下: ,,载入正样本 for(i=0;i<pimage_num;i++) { img—org=cvLoadImage (filename,CV_LOAD_IM— AGE_GRAYSCALE); sample—img=cvCreateImage(cvSize(width,height), IPL_DEPTH_8U,1); cvResize(img_org,sample_img); cvSmooth(sample_img,sample_img,CV_GAUSSIAN, 3,0,0,0); ofr(ii=0;ii<height;ii++) { for(Jj=0;JJ<width;jj++) { data[i image_dim+(ii width)+JJ】= float((int)((uchar)(sample_img->imageData[ii sampleimg一>widthStep+jj】)),255.0); (2)将像素值数组转换为矩阵,初始化分类器训练参数, CvSVM::RBF参数指明使用径向基核函数。Svm.train 0方法执 行支持向量机的训练,迭代次数为1000次,训练结果保存在 face.xml文件中,方便保存和加载,代码如下: 腑玎始化参数 cvlnitMatHeader(&data_mat,all_image_num,image_dim, CV32FC1,data); cvlnitMatHeader (&res_mat, all_image_num, 1, CV_32SC1,res); criteria=cvTermCriteria(CV_TERMCRIT_EPS,1000, FLTEPSILON); param=CvSVMP ̄ams (CvSVM:_L—SVC,CvSVM:: RBF,10.0,0.09,1.0,10.0,0.5,1.0,NULL,criteira); 删【l练,保存到face.xml svm.train f&data_mat,&res_mat,NULL,NULL, param); svm.save(”face.xml”); 3.2.2检测模块 (1)按照指定路径,读取测试样本,依据cvLoadImage 0 (下转到84页) 电脑编程技巧与维护 ( y) ,( , )+MO (x,Y) (5) 于背景技术进行分割算法的关键问题。 . 用第m帧和完整背景作差分得到 FD(x J )一I, ,( .Y)一B(x,Y)l—l MO, (x, )一O ( .J )l(6) 由式(6)可以看出,第m帧和完整背景的差分结果是运 动物体和被运动物体所遮挡住的背景之间的差值,二者是完 全重合的,从而克服了I类误差,即不会把遮挡 显露背景检 参考文献 【1]Wang Chengru,Gu Guanghua.A video object segmentation algorithm with background statistical technonlgy.Opto—Elec— tronic Engineering,August 2004. 测成运动物体。 根据引理2所述,运动物体和背景之间的灰度值差别较 大,即MO, ( 川0 (x, )的值较大,而背景的灰度值在差 分模板中将为零。因此,不会将运动物体内部的像素检测为 背景,即克服了Ⅱ类误差。 【2】Yang Gaobo,Zhang Zhaoyang.An eficifent video object seg- mentation algorithm based on background registration and change detection.Journal of Shanghai University,April 2003. [3]Yu Yuelong.Key technologies on video semantic information extraction,[doctoral dissertation].National University of Defense Technology,April 2005. 3 结语 通过以上的理论推导证明,只要得到可靠的背景信息, 利用这些可靠的背景信息重构出完整的背景图像,再用当前 帧和重构的背景图像相减,就可以消除遮挡问题的影响,得 到比较准确的分割结果。因此得到准确可靠的重构背景是基 E・ E・ E・ E・ E●!E● e・S E E・ E・ E・I [4]Wang Jun,Sha Yun,Wu Yushu.Auto video segmentation algo- irthm based on background method.Computer engineering and application,September 2004. (上接第82页) 的参数转换为灰度或彩色图像。用svm.1oad f’.face.xml”)加 载已经训练好的xml文件。 (2)缩放测试图像,每隔3个像素,提取测试图像的部 利用Qt编写简单的图形用户界面窗口,拖放button按钮, 并实现其响应事件。 4 运行结果 执行基于SVM的人脸检测软件,选择多人脸图像进行测 试,检测结果如图2所示。 一……一……一__ 固i盈l 分图像,存储到19"29的像素值数组中,然后用cvSetData 0 存储到m矩阵中,主要代码如下: srctmp=cvCreatelmage(cvSize((int) (tw/steps),(int) cvResize(src,src_tmp); tw=srctmp->width; (th/steps)),IPL_DEPTH_8U,1); th=srctmp一>height; —for(sy=0;sy<=src_tmp一>height—height;sy+=stepy) { or(SX=0;sx<=src_tfmp一>width—width;SX+=stepx) l诩璃持菊器1 l^艟 箍I { for(i=0;i<height;i++) { 图2检测结果图 fr(oj=0;J<width;j++) { a[i width+J】= lfoat((int) ((uchar) (src_tmp一>imageData【(i+ 从文中可以看出,实现的检测方法几乎能够检测全部人 脸,取得了较好的检测效果,表明SVM分类算法的优良性能。 图中未检测出来的人脸,由于图像中的人脸结构不完整,受 到部分图像划分方式的影响。今后,应在特征向量多样化、 sy) src—tmp一>widthStep+(j+sx)]))/255.0); }} cvSetData(&m,a,sizeof(float) image_dim) 减少背景因素影响方面进一步改进算法,编写更实用、高效 的系统。 (3)svm.predict 0引用保存在矩阵中的图像特征进行预 测,判断测试样本所属的类别。如果测返回结果为1,则用绿 参考文献 [1】王陈飞,肖诗斌.基于SVM的图像分类研究【JJ.计算机 与数字工程,2005,f34):74—76. 色矩型标记。主要代码如下: ret=svm.predict(&m); if((int)ret==1) { scale=(lfoat)src->width/tw; cvRectangle(srccolor,cvPoint((inO (SX scale), [2]于仕琪,张兆翔.Opencv中文参考手册.http://www.opencv. org.on/index.php/Template:Doc,2010. [3]薛明东,郭立.基于SVM算法的图像分类IJ】.计算机工 程与应用,2004,(30):230—232. [4】高丽.基于FBT的改进SVM多类分类方法研究[D】.哈 (int) (sy scale)), cvPoint((int) ((sx+width) +height) scale),(int) ((sy scale)),CV_RGB(0,255,0),2); 3.2_3 0t编写GUI 2011.16 尔滨:哈尔滨理工大学,2009. 毫麓鳙程技巧与 雅 

因篇幅问题不能全部显示,请点此查看更多更全内容