java-opencv-训练自己的物体分类器

参考:
https://blog.csdn.net/qq_32502511/article/details/79010509
https://blog.csdn.net/lileiyang12/article/details/10155813
https://blog.csdn.net/YK_LaNce/article/details/100576560

本文使用opencv-3.4.1
第一步:准备文件
    新建目录:negdata(存放负样本),posdata(存放正样本),xml(存放生成的xml),如下:


    收集正,负样本(刚开始可以先用50~100左右的样本量试试看,正,负样本数量最好大于1000,具体看个人感觉)。
    正样本,需要做识别物体的图片(本文收集60张):


    正样本负样本,任意不包含正样本的图片(本文收集106张):

 



第二步:调整样本,并生成样本描述文件

    调整样本----将正,负样本转换灰度(本文采用:IMREAD_GRAYSCALE),调整大小(本文采用:正20X20,负50X50)(据说,正20X20最佳)。
    调整后正样本:

 


   调整后负样本:

 
    生成样本描述文件:
    cmd 进入posdata目录,执行 dir /b/s/p/w *.jpg > pos.txt
    同理进入negdata目录,执行 dir /b/s/p/w *.jpg > neg.txt
    pos.txt内容如下:

    neg.txt内容如下:

    修改pos.txt文件(neg.txt不用修改)如下:

    “1 0 0 20 20”,为固定格式,其中20指的是照片的像素大小。

第三步:生成.vec文件

    将opencvuildx64vc14in 下的所有文件复制到posdata目录同级目录下;将上一步最后生成的pos.txt,neg.txt文件也放入该同级目录,如下:
 
    cmd 进入该目录,执行:
    opencv_createsamples.exe -vec pos.vec -info pos.txt -num 60 -w 20 -h 20


    其中-num 60,指的是图片的数量,-w 20 -h 20,指的是图片的规格。
    创建traincascade.bat文件,添加内容:
    opencv_traincascade.exe -data xml -vec pos.vec -bg neg.txt -numPos 48 -numNeg 80 -numStages 10 -w 20 -h 20 -mode ALL
    pause
    其中-numPos 48为训练取的正样本的样本(取样本数量的0.8~0.9,本文取48),-numNeg 80为训练取的负样本的样本(取样本数量的0.8~0.9,本文取80),-numStages 10 表示训练的层数(建议15~20,本文取10),此时目录中文件如下;
   
    双击运行traincascade.bat,如下:
   


    在xml目录下生成的cascade.xml文件就是训练出来的分类器。

原文地址:https://www.cnblogs.com/interdrp/p/15485105.html