zoukankan      html  css  js  c++  java
  • 基于opencv2.0的haar算法以人脸识别为例的训练分类器xml的方法

    基于opencv2.0的haar算法以人脸识别为例的训练分类器xml的方法  

    基于opencv2.0的算法
    第一步 采集样本
           1、 将正负样本分别放在两个不同的文件夹下面
            分别取名pos和neg,其中pos用来存放正样本图像,neg用来存放负样本
      基于opencv2.0的haar算法以人脸识别为例的训练分类器xml的方法 - Ao骨ゝ  - Ao骨ゝ --分开后的旅行

    基于opencv2.0的haar算法以人脸识别为例的训练分类器xml的方法 - Ao骨ゝ  - Ao骨ゝ --分开后的旅行
    注意事项:1、正样本要统一切成24*24像素(或者其他)的格式,建议保存成灰度图,节省空间
                        2、正样本的数目越多,训练的时间也将越长,训练出来的效果也就越好
                        3、负样本的数量想对于正样本一定要足够的多,很多朋友在训练的时候,往往出现了CPU占用率达到了100%,但是训练只是停留在一个分类器长达几小时没有相应,问题出现在取负样本的那个函数 icvGetHaarTrainingDataFromBG中; 当剩下所有的negtive样本在临时的cascade Classifier中,evaluate的结果都是0(也就是拒绝了),随机取样本的数目到几百万都是找不到误检测的neg样本了,因而没法跳出循环
           2、建立正负样本的说明文件
                      这里我们假定根目录在D:\boost下面 。
                      在cmd下面进入pos目录,输入  dir /b > pos.txt
    基于opencv2.0的haar算法以人脸识别为例的训练分类器xml的方法 - Ao骨ゝ  - Ao骨ゝ --分开后的旅行

    这个时候会在pos文件加下面生成一个pos.txt文件,打开pos.txt

    基于opencv2.0的haar算法以人脸识别为例的训练分类器xml的方法 - Ao骨ゝ  - Ao骨ゝ --分开后的旅行


    基于opencv2.0的haar算法以人脸识别为例的训练分类器xml的方法 - Ao骨ゝ  - Ao骨ゝ --分开后的旅行

    我们对它进行如下编辑:
    (1)、将BMP 替换成为 BMP 1 0 0 24 24
    注意:1代表此图片出现的目标个数 后面的 0 0 24 24代表目标矩形框(0,0)到(24,24),用户可以根据自身需要调整数值
    (2)、删除文本中最后一行的“pos.txt”


    基于opencv2.0的haar算法以人脸识别为例的训练分类器xml的方法 - Ao骨ゝ  - Ao骨ゝ --分开后的旅行

    2、对负样本进行编辑
    在CMD下输入 dir /b > neg.txt
    基于opencv2.0的haar算法以人脸识别为例的训练分类器xml的方法 - Ao骨ゝ  - Ao骨ゝ --分开后的旅行
    同理,打开neg目录下的neg.txt文件,只需要删除最后一行的neg.txt这一句
    注意:1、负样本说明文件不能含有目标物体
    2、负样本图像尺寸不受到限制,但是尺寸越大,训练所用的时间越长,
    3、负样本图像可以是灰度图,也可以不是,笔者建议使用灰度图,这样处理起来可能更有效率
    4、负样本图像一定不要重复,增大负样本图像的差异性,可以增加分类器的使用范围,笔者建议可以使用网上的素材库,将1000多张不含目标的图片灰度处理后用来训练,效果更佳
    二、使用opencv_createsamples.exe创立样本VEC文件
    1、首先我们将要用的的2个程序opencv_createsamples.exe和opencv_haartraining.exe拷到根目录下
    基于opencv2.0的haar算法以人脸识别为例的训练分类器xml的方法 - Ao骨ゝ  - Ao骨ゝ --分开后的旅行
    在CMD下输入如下命令:
    opencv_createsamples.exe -vec pos.vec -info pos\pos.txt -bg neg\neg.txt -w 40 -h 40 -num 142 
    以上参数的含义如下:
    -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》
    输出样本的高度,以像素为单位。


    基于opencv2.0的haar算法以人脸识别为例的训练分类器xml的方法 - Ao骨ゝ  - Ao骨ゝ --分开后的旅行

    按下回车后我们的正样本
    基于opencv2.0的haar算法以人脸识别为例的训练分类器xml的方法 - Ao骨ゝ  - Ao骨ゝ --分开后的旅行

    三、使用opencv_haartraing.exe进行训练
    参数说明如下:
    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》训练样本的尺寸,(以像素为单位)。必须和训练样本创建的尺寸相同
    在CMD下输入opencv_haartraining.exe -data xml -vec pos.vec -bg neg\neg.txt -w 40 -h 40 -mem 800  


    基于opencv2.0的haar算法以人脸识别为例的训练分类器xml的方法 - Ao骨ゝ  - Ao骨ゝ --分开后的旅行

    然后开始训练
    训练过程如图,呵呵,要是成百上千的样本的话,我们先去吃完泡面休息一下吧
    基于opencv2.0的haar算法以人脸识别为例的训练分类器xml的方法 - Ao骨ゝ  - Ao骨ゝ --分开后的旅行
    好了,休息回来,训练完成提示信息如下:
    基于opencv2.0的haar算法以人脸识别为例的训练分类器xml的方法 - Ao骨ゝ  - Ao骨ゝ --分开后的旅行
    在根目录下就会生成相应的XML文件

  • 相关阅读:
    mysql常用sql语句的练习笔记
    docker-compose使用--config启动mongodb出错的采坑记录
    ubuntu1804安装docker和docker-compose的最新2020详细教程
    ubuntu1804使用国内git源安装fastdfs的笔记
    2020最新nginx+gunicorn+supervisor部署基于flask开发的项目的生产环境的详细攻略
    2020年ubuntu1804安装php7.3最新详细教程
    2020年ubuntu1804安装nginx最新稳定版1.16详细教程笔记
    ubuntu1804python安装mysqlclient的模块报错的解决办法
    ubuntu1804开启mysql远程访问功能和设置root远程访问
    ubuntu1804使用python3 venv 创建虚拟目录和制定Pip国内安装源
  • 原文地址:https://www.cnblogs.com/rosekin/p/2434105.html
Copyright © 2011-2022 走看看