zoukankan      html  css  js  c++  java
  • Opencv haar training-特征训练器

    1.正样本文件采集:

    需要使用到的工具:objectmarker

    用于待识别对象的标注,并生成标注文件。需要注意的是,生成完标注文件之后(通常是info.txt文件),用编辑器打开文件,将所有路径信息删除,只保留文件名和其对应的标注信息,修改完成之后,将文件保存为sample_pos.dat(注意,文件名字不要改变,否则以后会很坑,这个具体还没去研究源码,应该是程序的问题);

    ps:如果已经有了图像的标注信息,那就可以跳过这一步了。

    2.正样本vec文件生成(sample文件)

    工具:opencv_createsamples.exe

    在工具所在目录创建文件夹:pos,将采集到的正样本,以及标注文件放入pos文件夹;

    使用cmd进入工具所在目录,执行命令:

    opencv_createsamples.exe -info ./pos/sample_pos.dat -vec ./pos/sample_pos.vec -num 17 -w 20 -h 20 -show YES

    ps:-num:正样本个数

    3.负样本采集

    建议正负样本比例在1:3(具体还不知道,参考网上提供的数据)。负样本在采集的时候尤其需要注意,尽量保持和正样本环境相似,比如,正样本图像中包含要检测的对象,负样本图像中最好剔除要检测的对象,只保留背景。有条件的同学可以直接写程序,对负样本图片进行切割,标准是40*40(因为我们的正样本采用的是20*20)。

    负样本采集完成之后,在pos目录的统计目录创建文件夹:neg,将负样本拷贝至neg目录,然后使用命令行进入neg目录,执行命令:

    dir /b > sample_neg.dat

    用文本编辑器打开dat文件,删除最后一行:sample_neg.dat,保存文件;

    ps:文件名字不要改变,否则会出错

    4.训练样本

    到此为止,我们要准备的文件都已经准备好,可以进行训练了。

    使用的工具:opencv_haartraining.exe

    进入工具所在目录,先创建目录:cascade,然后执行命令:

    opencv_haartraining.exe -data ./cascade -vec ./pos/sample_pos.vec -bg ./neg/sample_neg.dat -nstage 20 -npos 100 -nneg 300 -mem 256 -mode ALL -w 20 -h 20
    -nstage:要训练多少层
    -npos:每层的正样本个数
    -nneg:每层的负样本个数

    ps:在这一步经常会抛异常,通常都是负样本文件不对,同时dat文件的名字一定要按照上面说的命名,否则会出错;

    5.合并xml文件

    样本训练完成之后,cascade目录下会生成多个子目录,需要将这些目录合并生成xml文件才能使用:

    工具:c-example-convert_cascade.exe(ps:根据opencv的版本不同,这个工具的名字也可能不同)

    执行命令:

    c-example-convert_cascade.exe --size=20x20 ./cascade haar_adaboost.xml

    到此,会在目录中生成haar_adaboost.xml文件!

    done!

    说明:

    1.所有的工具及其依赖文件建议统一放置在一个目录中(比如:build);

    2.除了负样本描述文件的生成命令需要在neg目录中执行,其他命令全部在build(假设你也有这个目录,以各自的实际目录为准)目录中执行;

    3.good luck!

    参考:

    1.http://www.cnblogs.com/wengzilin/p/3845271.html

    2.http://blog.csdn.net/xuejiren/article/details/39493537

    (Opencv Error: Assertion failed (elements_read==1))

  • 相关阅读:
    LeetCode "Palindrome Partition II"
    LeetCode "Longest Substring Without Repeating Characters"
    LeetCode "Wildcard Matching"
    LeetCode "Best Time to Buy and Sell Stock II"
    LeetCodeEPI "Best Time to Buy and Sell Stock"
    LeetCode "Substring with Concatenation of All Words"
    LeetCode "Word Break II"
    LeetCode "Word Break"
    Some thoughts..
    LeetCode "Longest Valid Parentheses"
  • 原文地址:https://www.cnblogs.com/Pure-Land/p/5006993.html
Copyright © 2011-2022 走看看