网上提供的级联分类器训练都是基于opencv_haartraining。照着上面的步骤成功训练出了xml,但是用于识别的过程中,识别率很低。改换几次样本后,检测效果还是一般。想想估计是自haar特征不能很好区分,所以想通过opencv_traincascade训练下Lbp。将经验写下来,供自己以后回顾和其它人参考。


工具/原料



  • opencv2.1 (2.0版本以上均可)


方法/步骤



  1. 1
    准备好正负样本图片,正样本就是含有目标的图片,负样本就是不还有目标的图片,建好文件夹,如图所示。其中正样本图片最好是裁剪成同一尺寸,我这里是建成30*30,便于后期的说明文件的建立。图片的编辑我使用的是美图看看,批量编辑工具,可以批量将图片改成同一尺寸。


    opencv 汽车级联器分类 opencv级联分类器训练_opencv 汽车级联器分类


  2. 2
    建立正负样本说明文件,在cmd下进入pos文件夹目录里,输入  dir /b > pos.txt,用editplus打开该文件,删除最后一行,最后将名字归一化如下所示:同样的方法进入neg文件夹内,用同样的方法建立描述文件neg.txt,用editplus打开该文件,只需删掉最后一行



    opencv 汽车级联器分类 opencv级联分类器训练_opencv 汽车级联器分类_02

    opencv 汽车级联器分类 opencv级联分类器训练_当前目录_03

    opencv 汽车级联器分类 opencv级联分类器训练_描述文件_04


  3. 3
    创建vec文件:将opencv_createsamples.exe和 opencv_traincascade.exe放到图片文件夹的上层目录,利用opencv_createsamples.exe应用程序在该目录下使用如图cmd命令:
    其中的-vec是指定后面输出vec文件的文件名,-info指定正样本描述文件,-bg指定负样本描述文件,-w和-h分别指正样本的宽和高,-num表示正样本的个数。执行完该命令后就会在当前目录下生产一个pos.vec文件了。



    opencv 汽车级联器分类 opencv级联分类器训练_cmd命令_05

    opencv 汽车级联器分类 opencv级联分类器训练_cmd命令_06


  4. 4
    使用opencv_traincascade.exe文件进行训练
       首先在当前目录下新建一个dt文件夹用于存放生成的.xml文件。
       在当前目录使用cmd命令:
    D:\>opencv_traincascade.exe -data dt -vec pos.vec -bg neg/neg.txt -numPos 100 -n

    umNeg 300 -numStages 16 -precalcValbufSize 200 -precalcdxBufSize 1000 -featureTy
    pe LBP -w 30 -h 30截图如下:其中-data 输出目录,-numPos正样本数目-numNeg负样本数目-numStages训练级数





    opencv 汽车级联器分类 opencv级联分类器训练_opencv 汽车级联器分类_07

    opencv 汽车级联器分类 opencv级联分类器训练_当前目录_08