您的位置:首页 > 其它

分类器训练——haar分类器的使用方法及注意事项

2011-11-28 12:47 330 查看

一、简介

Harr分类器是一个很有用的工具,它主要是用来实现对刚性物体的检测的分类器的训练。Harr分类器使用了harr特征或更准确的描述是类Harr的小波特征,该特征由矩形图像区域的加减组成。

Opencv的harr分类器位于...\OpenCV\bin中,bin中的文件就是我们训练自己的分类器是要用到的东西。

二、分类器训练的方法与步骤

分类器的训练主要分为四步:

1、样本的创建

2、分类器的训练

3、Xml文件生成

4、对训练好的分类器的效果的检测

一个好的分类器能够很灵敏的对目标物体进行识别和跟踪,但它的训练需要数量庞大的正样本与负样本。在这里我只选取少量的样本来进行试验演示。

1、样本的创建

样本的创建分为正样本的创建与负样本的创建。

(1)正样本的创建

A、样本的制作

对于正样本,通常的做法是先把所有正样本裁切好,并对尺寸做规整(即缩放至指定大小),如图所示:



B、样本描述文件的生成

方法有两种:

1、采用Dos命令行的方式生成。具体方法如下:

采用Dos命令生成样本描述文件。具体方法是在Dos下的进入你的图片目录,比如我的图片放在D:\face\posdata下,则:按Ctrl+R打开Windows运行程序,输入cmd打开DOS命令窗口,输入 d:回车,再输入cd D:\face\negdata进入图片路径,再次输入dir /b > negdata.dat,则会图片路径下生成一个negdata.dat文件,打开该文件将最后一行的negdata.dat删除,这样就生成了负样本描 述文件。dos命令窗口结果如下图:


完成后正样本文件夹内会生成一个txt的文件,打开文件,删除面posdata.txt这一项,保存即可。

1、编写批处理指令实现(推荐):

在正样本文件夹下新建create.bat(先创建txt文件在改为bat文件)文件,执行“编辑”命令,在改文件中写入:

dir /b >posdata.txt

Pause

保存即可。

运行create.bat文件即可生成posdata.txt文件,同样删除其中多余部分。

2、将生成的txt文件改为:

image1.jpg 1 0 0 24 24

image2.jpg 1 0 0 24 24

image3.jpg 1 0 0 24 24

image4.jpg 1 0 0 24 24

image5.jpg 1 0 0 24 24

image6.jpg 1 0 0 24 24

image7.jpg 1 0 0 24 24

image8.jpg 1 0 0 24 20

image9.jpg 1 0 0 24 24

image10.jpg 1 0 0 24 24

(2)负样本的创建

负样本的具体要求为:负样本可以来自于任意的图片,但这些图片不能包含目标特征。

负样本由背景描述文件来描述。背景描述文件是一个文本文件,每一行包含了一个负样本图片的文件名(基于描述文件的相对路径)。创建方法跟上面方法相同。但最后的第3步无需执行。

2、分类器的训练

利用正样本文件输出一个格式的训练文件pos.vec

方法同样有两种,此处只讲一种:

在bin目录下创建一个批处理文件createsamples.bat,并在里面写入:

createsamples.exe -info posdata\posdata.txt -vec data\pos.vec -num 10 -w 18 -h 18

Pause

保存后运行,结果如下:



3、haartraining生成分类器

在此处同样只讲一种方法:

方法同上,创建haartraining.bat文件,并输入:

haartraining.exe -data data\cascade -vec data\pos.vec -bg negadata\negadata.txt -npos 10 -nneg 10 -mem 200 -w 18 -h 18

Pause

执行程序,结果如下:



结果可能跟这个不完全相同,但也足够了!!!

4、xml文件的生成

完此步需要另外几个文件,如下图:



其中convert.bat是批处理文件,代码如下:

haarconv.exe cascade output.xml 18 18

执行即可生成xml文件,即为目标文件。

5、对训练好的的分类器进行测试

这一步需要用到facedetect.exe等一下文件:



Start文件中指令如下:

facedetect.exe --cascade="output.xml" 0

运行该文件即可生成一个xml文件!!

三、题外话

本人只是学习opencv的菜鸟,刚刚在机器学习上有所收获,发这篇文章仅供参考,为的只是相互学习,错误的地方还望大家慷慨指正!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: