小白学习之haar训练

来源:互联网 发布:网络安装维护 编辑:程序博客网 时间:2024/04/29 09:25

流程整理

    1.准备正负样本。

Ø  正样本要求如下:图片大小20*20、主要为要识别的特征,尽量不含有不需要识别的特征。比如识别人脸,正样本仅为人脸图像。截取样本建议使用光影助手,可以方便的获取正方形区域。

Ø  负样本要求简单些,不能含有重复图像、不能含有要识别的特征、图像尺寸大于等于20*20即可。

Ø  我的实验中正样本1000幅,负样本28000幅。

2.生成样本描述文件

将第一步中收集的正样本图像放到DoorPost文件夹下,负样本图像放到DoorNeg,文件夹的根目录为F:\OPENCV2.4.11\HAAR,如下图所示。



 所谓的正样本描述文件,其实就是一个文本文件。正样本描述文件中的内容包括:文件名 目标个数 目标在图片中的位置(x,y,width,height)

典型的正样本描述文件如下所示:

0.jpg 1 0 0 30 40

1.jpg 1 0 0 30 40

2.jpg 1 0 0 30 40

那么描述文件如何生成呢?最简单的方式就是使用dos命令。首先打开命令提示符页面,输入f:,将根目录切换到f盘。接着输入cd opencv2.4.11,回车。再输入cd HAAR,回车。(返回上一级菜单的方式为输入cd..)

下一步就是利用dos命令生成样本描述文件了。生成正样本的时候 输入cd DoorPost,回车。

再输入dir /b >pos_image.txt,回车之后在DoorPost文件夹内即可看到文件pos_image.txt。文件内容如下图所示。



editplus打开该文件,删除文件的最后一行。点击替换,按照下图输入替换内容。切记选择regular rxpression,中文意思好像是正则替换。



替换后的pos_image.txt文件内容变成下图所示。



负样本的替换过程类似,不过替换内容改成下图所示。



替换后的负样本描述文件如下图所示。



替换后的txt文件需要检查一下,有可能会出现第一行没有进行替换,或者最后一行多替换一个的现象。检查完后将两个描述文件复制到上一级目录下,准备进行下一步操作。

3.生成vec文件

生成vec文件需要opencv_createsamples.exe,该文件在opencv中,使用搜索功能可以检索到。将opencv_createsamples.exe拷贝到haar文件夹内,在命令提示符中输入

 

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

4.进行训练

在haar文件夹下创建一个文件夹xml文件夹,用于存在训练过程中生成的中间文件。将opencv中的opencv_haartraining.exe复制到haar文件夹内。在命令提示符中输入如下命令。

 

其中-data为输出xml中间文件的位置,-sym表示训练的目标为垂直对称,-nsplits 1表示使用简单的stump classfier分类。-mem1280表示允许使用计算机的1280M内存,-mode all表示使用haar特征集的种类既有垂直的,又有45度角旋转的。

训练过程中经常会陷入死循环,这个时候就需要终端训练重新调整正负样本比例或者更改样本。更改样本比例是更改nposnneg的值。更改样本需要重新进行上文中的几步。

 

ps.训练终于运行起来后,发现opencv_haartraining这个exe已经被下堂了。opencv_traincascade凭借多特征同时快速的训练特性迅速上位了。

0 0
原创粉丝点击