分类器训练——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的菜鸟,刚刚在机器学习上有所收获,发这篇文章仅供参考,为的只是相互学习,错误的地方还望大家慷慨指正!!!
相关文章推荐
- OpenCV3.2.0中使用HOG特征训练SVM分类器时重点注意事项
- opencart产品批量上传插件及使用方法注意事项
- HashMap的使用方法及注意事项
- PHP中$_FILES的使用方法及注意事项说明
- MYSQL Query-cache使用方法及注意事项
- new与delete函数使用方法以及注意事项
- iOS 关于调整状态栏方向方法setStatusBarOrientation的使用注意事项
- thinkphp3.2 U方法 使用与注意事项
- SVN代码管理使用方法和注意事项
- .NET中lock的使用方法及注意事项
- android有关SharedPreferences的使用方法及注意事项
- android使用代码生成LayerDrawable的方法、源码分析和注意事项
- PopUpWindow的使用方法及注意事项
- BufferedWriter的使用方法分和注意事项
- 使用ILSpy软件反编译.Net应用程序的方法及注意事项
- google glog在程序中使用方法与注意事项
- Objective-C类方法中使用self注意事项
- mybatis selectMap方法使用注意事项
- 【转】Oracle Outline使用方法及注意事项
- PHP使用静态方法的几个注意事项