haartraining生成.xml文件过程


文中加载图片一直失败,就上传为pdf格式了,点击这里下载吧

1、首先建立好文件夹,把图片拷贝好,如下所示:

    

     Pos_image中放入的是正样本,neg_image放入的是负样本,test_image放入的是测试样本。并将后面要用到的2个工具.exe文件也拷贝过来(在opencv的安装目录  ..\opencv2.4.9\build\common\x86下)。

2生成正负样本描述文件

建立正样本的描述文件:

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

     

进入pos_img文件夹的方式:

 

 然后,使用命令dir /b >pos_image.txt。如图所示

 

且用editplus(记事本)打开该文件,删除最后一行,最后将名字归一化如下所示:

 

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

负样本的描述文件类似,只是不需要考虑其大小位置。

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

     

     同样删除最后一行文字,且将文件相对路径加入如下所示:

  

     至此,训练数据准备完备了。

备注:

正样本个数:165

负样本个数:196

3、创建vec文件:

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

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

E:\haar>opencv_createsamples.exe -vec pos.vec -info pos_img.txt -bg neg_image.txt -w 24 -h 24 -num 165

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

生成成功后的结果是这样的:

 

至此,pos.vec文件生成成功了。

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

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

 

在当前目录使用cmd命令:

E:\haar>opencv_haartraining.exe -data xml -vec pos.vec -bg neg_img.txt -nsplits 1 -npos 165 -nneg 196 -w 24 -h 24 -mem 1024 -mode ALL

其中-data为输出xml中间文件的位置,-sym表示训练的目标为垂直对称,-nsplits 1表示使用简单的stump classfier分类。-mem 1024 表示允许使用计算机的1024M内存,-modeALL 表示使用haar特征集的种类既有垂直的,又有45度角旋转的-npos 165表示每次训练从.vec文件中随机选取npos个正样本。

     因为数据量不是很多,5分钟就训练好了。在当前目录下生产了一个xml.xml文件,将其重名为face_test.xml。

5.实验结果:

     利用上面训练出来的face_test.xml文件来检测下人脸,试试自己训练得到的.xml文件检测效果如何!

本文参考自:http://www.cnblogs.com/tornadomeet/archive/2012/03/28/2420936.html

(部分内容有修改)

===================================================================

在训练时,经常会遇到下面的错误:

OpenCV Error: Assertion failed (elements_read == 1) in icvGetHaarTraininDataFromVecCallback, file C:\builds\2_4_PackSlave-win64-vc12-shared\opencv\apps\haartraining\cvhaartraining.cpp, line 1859

解决方法:将npos和nneg都减少。

 

其它可能出现的错误参考:

http://blog.csdn.net/u014365862/article/details/53000619

 

你可能感兴趣的:(OpenCV)