由于毕设需求,需要用到opencv的机器学习模块,从网上搜索到opencv已经集成好了两个模块,分别是opencv_createsamples.exe和opencv_haartraining.exe,它们一般都在opencv\build\x86\vc10\bin文件目录下,作用是生成样本vec文件和训练数据集,生成一个分类器。其配置过程比较复杂,现做如下总结:
1、首先准备两套数据集,一个是正例样本,一个是反例样本。正例样本就是要进行识别的数据集,要求是必须统一大小,反例样本不需要特殊要求,只要不含有识别物体即可,大小无所谓。至于正例反例的样本数量,参见http://bbs.csdn.net/topics/390388465
2、生成文档说明文件,在Windows下cmd切换到样本所在目录,输入命令dir /b > info.txt,然后打开该文件,删除文件最后一行,ctrl+h替换文件后缀名,比如是jpg文件替换为jpg 1 0 0 20 20,1代表是正例,0 0 20 20代表图像取图像的区域,一般图像大小不要太大,我机子跑64*64就已经爆内存了。然后切换到反例样本目录下,输入命令dir /b > bg.txt,生成反例样本,删除最后一行,除此之外无需再做改动。
3、执行opencv_createsamples.exe -info E:\openCV\opencv\build\x86\vc10\bin\people\info.txt -vec a.vec -num 50 -w 20 -h 20,注意这里最后两个参数就是之前设置的图像大小,num是指的生成样本数量,需要与文件夹中的文件数目一致。这一步之后会生成一个.vec文件。
4、执行opencv_haartraining.exe -data data -vec E:\openCV\opencv\build\x86\vc10\bin\a.vec -bg E:\openCV\opencv\build\x86\vc10\bin\car\bg.txt -npos 250 -nneg 800 -nstages 4 -nsplits 2 -mem 512 -nonsym -w 20 -h 20 -minpos 100,前一步生成样本向量问题应该都不大,但是这一步出现的错误就会千奇百怪了。
首先,如果是提示断言错误,调整样本数量和参数,如果提示内存不足,缩小样本图像的大小,如果提示找不到反例样本,查看bg.txt是否符合要求,或是其路径是否正确。
5、执行完该步之后,会生成一个文件夹和xml文件,至此训练完成。