一、关于正样本的准备
1、采集正样本图片
因为正样本最后需要大小归一化,在采集样本的时候就直接把它从原图里抠出来了,方便后面缩放嘛,而不是只保存它的框个数和框位置信息(框个数、框位置信息看下一步解释),在裁剪的过程中尽量保持样本的长宽比例一致。比如归一化成64 X 64,在裁剪样本的时候,设置64 X 64(跟我的自身用途有关,对于人头检测这种要保证缩放不变性的样本,肯定就可以超过啦)
2、获取正样本路径列表
在你的图片文件夹里,编写一个bat程序(get route.bat,bat是避免每次都需要去dos框输入,那里又不能复制又不能粘贴!),如下所示:
运行bat文件,就会生成如下dat文件:
把这个dat文件中的所有非图片的路径都删掉,比如上图的头两行,再将bmp 替换成 jpg 1 0 0 64 64,如下:
(1代表个数,后四个分别对应 left top width height,如果之前不是把样本裁剪下来的,那么你的这个dat可能就长成这样1. jpg 3 1 3 24 24 26 28 25 25 60 80 26 26,1. jpg是完全的原图啊,你之前的样本就是从这张图上扣下来的)
3、获取供训练的vec文件
这里,利用opencv里的一个程序叫opencv_createsamples.exe,可以把它拷贝出来。针对它的命令输入也是写成bat文件啦,因为cascade训练的时候用的是vec。如下:
运行bat,就在pos文件夹里生成了如下vec文件:
就此有关正样本的东西准备结束。
二、关于负样本的准备
这个特别简单,直接拿原始图,不需要裁剪抠图,也不需要保存框,只要保证比正样本大小就可以了,只要把路径保存下来。同正样本类似,步骤图如下:
至此有关负样本的也准备完成。
进行训练的话,创建一个classify20.bat
双击运行即可开始训练。
注意:numPos *2