• opencv 构造训练器


    D:/face   构造face训练器为例

    一:样本创建

     训练样本分为正例样本和反例样本,其中正例样本是指待检目标样本,反例样本指其它任意图片。

    负样本可以来自于任意的图片,但这些图片不能包含目标特征。负样本由背景描述文件来描述。背景描述文件是一个。

    创建 正 负 样本目录

    mkdir D:faceposdata

    mkdir D:face egdata

    把正负样本图片,分别放入2个文件夹下。

     

    生成负样本描述文件

    cd  D:face egdata

    dir /b > negdata.dat   #删除negdata.data的最后一行,因为最后一样是描述文件本身。

    生成正样本描述文件

    cd  D:faceposdata

    dir /b > posdata.dat   #删除posdata.data的最后一行,因为最后一样是描述文件本身

    然后为 posdata.dat 中的每一行后加上文件描述擦数(图片个数,目标开始,结束位置,高,宽),例如  

    1.jpg  1 1 1 23 23

    2.jpg  1 1 1 23 23

    使用createsamples命令生成正例训练.vec文件。

    opencv_createsamples  -info  D:faceposdataposdata.data

                                      -vec   D:facedatapos.vec

                                       -num 10 -w 20 -h 20

    运行后生成的pos.vec 文件作后面的训练用

     

    二:训练分类器 

    使用 traincascade(opencv2 中只有haartrainning命令,注意版本2个3的参数格式稍有不同)。 

    命令如下:

    opencv_traincascade   -data D:facedatacascade        #分类器的存放路径

                                    -vec  D:facedatapos.vec          #正样本的vec文件

                                    -bg  D:face egdata.dat             #付样本描述文件

                                    -numPos 10                                #正样图片文件本个数   

                                    -numNeg 10                               #付样本图片文件个数

                                    -numStages 5                              #训练阶段数,根据样本数量而定,太大,会提示错误:Train dataset for temp stage can not be filled. .

                                    -mode ALL       #训练的haar特征集的种类。basic仅仅使用垂直特征。all使用垂直和45度角旋转特征。

                                     -w   20    -h 20    #样本宽和高

    如果参数都设置对了,任然报错误:Train dataset for temp stage can not be filled. Branch training terminated.

    可能是 -gb 参数不带文件名称, 那可以付样本的描述文件放到执行目录,负样本的描述内容增加图片位置的路径来解决。

    最后没有报错,会在-data的路径下生成训练文件。

     

    三:利用训练好的分类器,做检测

    ##TODO 还没有找到performance.exe程序
    performance.exe   

     

    使用python-cv2 调用生成的分类器:

    import cv2

    cascade = cv2.CascadeClassifier('D:facedatacascadecascade.xml')

    faces = cascade .detectMultiScale(gray, 1.3, 5)

     

     

  • 相关阅读:
    HTML5你必须知道的28个新特性
    localStorage使用总结
    Oracle分页查询排序数据重复问题
    servlet,RMI,webservice之间的区别
    远程通信的几种选择(RPC,Webservice,RMI,JMS的区别)
    几种通讯协议的比较
    http、TCP/IP协议与socket之间的区别
    Oracle修改序列(Sequence)起始值问题
    mybatis开启二级缓存小记
    使用canvas绘制渐变色矩形和使用按键控制人物移动
  • 原文地址:https://www.cnblogs.com/alangwansui/p/5505255.html
Copyright © 2020-2023  润新知