haartraining训练生成xml文件

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值