haartraining训练生成xml文件

来源:互联网 发布:揭露淘宝泰妆假货店 编辑:程序博客网 时间:2024/05/13 04:12
haartraining训练生成xml文件
1、尺寸缩放(标准化)
(1)代码:
#include "opencv2/imgproc/imgproc.hpp"#include "opencv2/highgui/highgui.hpp"#include <iostream>using namespace cv;using namespace std;#define DST_IMG_WIDTH 24        //需要的图像宽度#define SRC_IMG_HEIGH 24        //需要的图像高度int main(){cout<<"归一化开始........"<<endl;string output_f;  output_f = string("F:\\opencv练习\\图像缩放\\图像缩放\\yale_faces_size\\");for(int i=1;i<=15;i++)//15个人的人脸数据{for(int j=1;j<=11;j++)//每个人的有11张人脸图像{string path=format("yale_faces/s%d/%d_s%d.bmp",i,i,j);//初始化读取文件路径名Mat src;src=imread(path,1);if(!src.data){cout<<"图像加载失败"<<endl;exit(1);}imshow("src",src);Mat dst(DST_IMG_WIDTH,SRC_IMG_HEIGH,src.type());resize(src,dst,dst.size(),0,0,INTER_LINEAR);string outName=format("%s/%d_s%d.bmp",output_f.c_str(),i,j);//初始化输出文件路径名imwrite(outName,dst);imshow("2",dst);waitKey(100);//延时100ms.为了显示图像}}    cout<<"归一化结束........"<<endl;waitKey(0);return 0;}

(2)变换前图像

在yale_faces目录有15个人的人脸图像s1-s15,每个人有11张头像。


(3)变化后,图像输出24*24大小的图像。


2、准备正负样本

(1)正样本:标准化后24*24的图像用作训练用的正样本。选取其中的135张作为正样本图像,剩余30张作为测试图像。


(2)负样本:要求是:不能包含人脸,且图片大小也不需要归一化到正样本尺寸,只需比正样本尺寸大或者相等即可。建议负样本用灰度图,加快训练速度,且负样本一定不能重复,要增大负样本的差异性。


(3)新建两个文件夹p_images、neg_images和test_imagesp_images中放入的是正样本图片,n_images放入的是负样本图片,test_images放入的是测试样本。并将后面要用到的2个工具.exe(opencv_haartraining.exeopencv_createsamples.exe)文件也拷贝过来(在opencv的安装目录opencv\build\x86\vc10\bin下)。


(4)生成正负样本描述文件:

打开cmd命令行窗口,进入上图所在p_images文件夹内,可以看到此文件夹图片显示如下:


使用命令将图片名导入文件pos_images.txt中。命令为:dir  /b >pos_images.txt


删除最后一行,最后将名字归一化如下所示


其中的p_images/是相对路径名,后面紧接着的是文件名,1代表一个文件,0 0 24 24表示这个文件的2个顶点位置坐标。保存退出即ok!

也是进入n_imgaes后在cmd内使用命令dir /b >n_images.txt,如图所示:


到此为止,训练数据准备完备了。

3、创建vec文件

(1) 在创建vec文件时,需要把pos_images.txt和n_images.txt两个样本描述文件剪切到上一目录,如图所示:


 (2)然后利用opencv_createsamples.exe应用程序在该目录下使用如下cmd命令:

>opencv_createsamples.exe -vec pos.vec -info pos_images.txt -bg n_images.txt -w 24 -h 24 -num 135
有的也用作:>opencv_createsamples.exe -vec pos.vec -info pos_images.txt   -num 135 -w 24 -h 24


其中:-vec是指定后面输出vec文件的文件名,-info指定正样本描述文件,-bg指定负样本描述文件,-w和-h分别指正样本的宽和高,-num表示正样本的个数。执行完该命令后就会在当前目录下生产一个pos.vec文件了。


4、使用opencv_haartraining.exe文件进行训练

(1) 首先在当前目录下新建一个xml文件夹用于存放生成的.xml文件。


 在当前目录使用cmd命令:

>opencv_haartraining -data xml -vec pos.vec -bg n_images.txt -npos 20 -mem 200 -mode all -w 24 -h24 

或者opencv_haartraining -data xml -vec pos.vec -bg n_images.txt  -mem 200  -w 24 -h24

其中:

-mem 256表示允许使用计算机的256内存,-mode all 表示使用haar特征集的种类,BASIC仅仅使用垂直特征,ALL表示使用垂直以及45度旋转特征.-data 指定生成xml的文件目录, -vec vec文件名, -bg 负样本描述文件名称,也就是负样本的说明文件(.dat) -nstage 20 指定训练层数,推荐15~20,层数越高,耗时越长。-nsplits 分裂子节点数目,选取默认值 2 -minhitrate 最小命中率,即训练目标准确度。-maxfalsealarm最大虚警(误检率),每一层训练到这个值小于0.5时训练结束,进入下一层训练,-npos 在每个阶段用来训练的正样本数目,-nneg在每个阶段用来训练的负样本数目 这个值可以设置大于真正的负样本图像数目,程序可以自动从负样本图像中切割出和正样本大小一致的,这个参数一半设置为正样本数目的1~3倍 -w -h样本尺寸,-sym或者-nonsym,后面不用跟其他参数,用于指定目标对象是否垂直对称,若你的对象是垂直对称的,比如脸,则垂直对称有利于提高训练速度

5.实验验证

0 0