分类器的训练分为两个阶段:
A:创建样本,用OpenCV自带的createsamples.exe来完成。
B:训练分类器,生成xml文件,由OpenCV自带的haartraining.exe完成。
(以上用到的两个可执行文件在OpenCV的bin目录下:C:/Program Files/OpenCV/bin。以下的所有操作均在该目录下完成。)
1. 先准备好大量的正样本和负样本图片,分别存入文件夹img和-img。
2. 创建正样本文件img.txt,文件的内容如下:
img/1.jpg 1 0 0 60 40
img/2.jpg 1 0 0 60 40
img/3.jpg 1 0 0 60 40
img/4.jpg 1 0 0 60 40
img/5.jpg 1 0 0 60 40
……
其中,后面的两个参数分别表示样本的大小为60×40。可修改
3. 创建负样本文件-img.txt,文件内容如下:
-img/1.jpg
-img/2.jpg
-img/3.jpg
-img/4.jpg
-img/5.jpg
……
4. createsamples训练样本:
//----- --从DOS命令行输入以下参数,生成w.vec文件-------
createsamples.exe -vec Vec_Directory.vec -num Num -w Width -h Height
l Vec_Directory:建立此信息文件的文件名及位置。
l Num_:正样本的数量。
l Width:目标object最佳宽度,单位为pixel。
l Height:目标object最佳高度,单位为pixel。
例如,输入参数为:
opencv_createsamples.exe -info ./haartraining.txt -vec ./w.vec -num 25 -w 60 -h 40
5. haartraining训练分类器
//--------从DOS命令行输入以下参数,生成data/cascade文件夹和cascade.xml文件--------
haartraining.exe -data classifier_directory –vec data/ Vec_Directory.vec -bg negatives_info_directory.txt -npos Num_of_Positives -nneg Num_of_Negatives -nstages Num_of_Stages -nsplits Num_of_Splits -mem Mem_Allocated -mode Mode -w Width -h Height
l classifier_directory:cascade classifier的数据夹位置。
l Vec_Directory.vec:create samples时所建立信息文件的位置。
l negatives_info_directory.txt:negative images的信息文件。
l Num_of_Positives:positive images的数量。
l Num_of_Negatives:negative images的数量。
l Num_of_Stages:the number of stages you want to train。(-nstages最后的s一定要记得)
l Num_of_Splits:默认值为1,使用2时,效果明显比1好很多,但耗时。(-nsplits亦同)
l Mem_Allocated:分配使用的内存。
l Mode: BASIC(预设)| CORE | ALL,BASIC用于正立的object,ALL旋转的也适用。
l Width:目标object的宽度,必须与create samples时设定的相同。
l Height:目标object的高度,必须与create samples时设定的相同。
例如,输入参数为:
训练结果如下: