1、在D盘或者其他盘根目录下新建一个文件夹,我新建的文件夹取名为“test”,在test中新建两个子文件夹分别为neg和pos,neg中存放不含人脸的负样本图片,pos中存放正样本。(我只是做实验,所以正负样本数量都选的较少,负样本10个,正样本5个,这里样本数量越多,训练时间越久!但是分类器效果更好)
2、分别生成neg.dat文档和pos.dat文档。
cmd进入DOS命令界面。输入d: 回车,输入cd test\neg 回车,进入neg目录,输入 dir /b > neg.dat
到test\neg目录中最后一行可以看到neg.dat文档,使用记事本打开,将文档最后一行的neg.dat删除,保存文档。
同样的方法生成pos.dat文档:cmd进入DOS命令界面。输入如下图:
回到test\pos目录中最后一行可以看到pos.dat文档,使用记事本打开
(1)将文档最后一行的neg.dat删除;
(2)使用记事本的编辑-替换功能,将文档全选,把jpg换成jpg 1 0 0 36 36
说明:1代表此图片出现的目标个数
后面的 0 0 36 36代表目标矩形框(0,0)到(36,36),可以根据自身需要调整数值。
3、生成pos.vec文件
(1)在opencv2.2.0安装文件夹(即解压文件夹)中的bin文件夹中,找到opencv_createsamples.exe和opencv_haartraining.exe这两个程序,复制到D:\test目录下。(因为我的opencv2.2.0和vs2008配置在一起了,所以我的这两个程序在D:\OpenCV-2.2.0\vs2008\bin目录下找到,程序的命名最后多了一个字母d,复制过去后如下图:)
(2)cmd进入DOS命令界面。输入如下图:
点击回车,结果如下:
此时回到D:\test目录下,看到pos.vec文件已经生成。
以上参数的含义如下:
-vec <vec_file_name>
训练好的正样本的输出文件名。
-img<image_file_name>
源目标图片(例如:一个公司图标)
-bg<background_file_name>
背景描述文件。
-num<number_of_samples>
要产生的正样本的数量,和正样本图片数目相同。
-bgcolor<background_color>
背景色(假定当前图片为灰度图)。背景色制定了透明色。对于压缩图片,颜色方差量由bgthresh
参数来指定。则在bgcolor-bgthresh 和bgcolor+bgthresh 中间的像素被认为是透明的。
-bgthresh<background_color_threshold>
-inv
如果指定,颜色会反色
-randinv
如果指定,颜色会任意反色
-maxidev<max_intensity_deviation>
背景色最大的偏离度。
-maxangel<max_x_rotation_angle>
-maxangle<max_y_rotation_angle>,
-maxzangle<max_x_rotation_angle>
最大旋转角度,以弧度为单位。
-show
如果指定,每个样本会被显示出来,按下"esc"会关闭这一开关,即不显示样本图片,而创建过程
继续。这是个有用的debug 选项。
-w<sample_width>
输出样本的宽度(以像素为单位)
-h《sample_height》
输出样本的高度,以像素为单位。
4、生成xml文件
(1)cmd进入DOS命令界面。输入如下图:
点击回车,等待。。如果样本数量1000以上,等待的时间得5个小时以上。。。(因为我用的样本很少,正样本5个,负样本10个,所以几秒钟就出来了结果)最后面的结果如下图:
最后出现Cascade performance这一项就完成了XML文件的生成。
Haartraining 的命令行参数如下:
-data<dir_name>
存放训练好的分类器的路径名。
-vec<vec_file_name>
正样本文件名(由trainingssamples 程序或者由其他的方法创建的)
-bg<background_file_name>
背景描述文件。
-npos<number_of_positive_samples>,
-nneg<number_of_negative_samples>
用来训练每一个分类器阶段的正/负样本。合理的值是:nPos = 7000;nNeg = 3000
-nstages<number_of_stages>
训练的阶段数。
-nsplits<number_of_splits>
决定用于阶段分类器的弱分类器。如果1,则一个简单的stump classifier 被使用。如果是2 或者更
多,则带有number_of_splits 个内部节点的CART 分类器被使用。
-mem<memory_in_MB>
预先计算的以MB 为单位的可用内存。内存越大则训练的速度越快。
-sym(default)
-nonsym
指定训练的目标对象是否垂直对称。垂直对称提高目标的训练速度。例如,正面部是垂直对称的。
-minhitrate《min_hit_rate》
每个阶段分类器需要的最小的命中率。总的命中率为min_hit_rate 的number_of_stages 次方。
-maxfalsealarm<max_false_alarm_rate>
没有阶段分类器的最大错误报警率。总的错误警告率为max_false_alarm_rate 的
number_of_stages 次方。
-weighttrimming<weight_trimming>
指定是否使用权修正和使用多大的权修正。一个基本的选择是0.9
-eqw
-mode<basic(default)|core|all>
选择用来训练的haar 特征集的种类。basic 仅仅使用垂直特征。all 使用垂直和45 度角旋转特征。
-w《sample_width》
-h《sample_height》
训练样本的尺寸,(以像素为单位)。必须和训练样本创建的尺寸相同
(2)回到D:\test目录下,就可以看到多了一个xml文件夹和一个xml类型的文档:
至此我们就完成了xml文档的训练。