使用opencv2.2.0的Haar算法训练人脸xml文档

本文详细介绍了如何在D盘或其他盘根目录下新建文件夹,并在其中创建负样本和正样本图片文件。通过使用命令提示符命令,生成neg.dat和pos.dat文档,进而利用opencv工具生成pos.vec文件和XML分类器文件。最后完成人脸检测分类器的训练。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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文档的训练。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值