opencv 训练分类器(opencv_traincascade和opencv_createsamples)

  • 使用opencv_traincascade和opencv_createsamples生成自己的训练文件并进行训练
     opencv_createsamples.exe#生成 训练集的vec文件
opencv_createsamples.exe -info posdata -vec data\pos.vec -num 你所需要创建的正样本数量(一般为正样本内文件数目的0.9倍) -w 20 -h 20
    首先需要建立包含所有图片目录的文件(正负样本各一个),eg:

pos.txt  (负样本为neg.txt)

opencv 训练分类器(opencv_traincascade和opencv_createsamples)_第1张图片

然后修改为
     opencv 训练分类器(opencv_traincascade和opencv_createsamples)_第2张图片

#利用文本编辑器的 查找替换 jpg 为 1 0 0 20 20   ,1为标记,0 0 20 20 为样本中所需物品的坐标,因为我是一张图片就是一个物品,而且图片为20*20像素,所以直接批量替换为 0 0 20(width) 20(height) ,

opencv_traincascade.exe #训练分类器
opencv_traincascade . exe -data data1 -vec data \ pos . vec -bg 64 negdata numPos 243 -numNeg 300 -minHitRate 0.9999 -maxFalseAlarmRate 0.5 -featureType HA

通用参数:

-data

目录名,如不存在训练程序会创建它,用于存放训练好的分类器


-vec

包含正样本的vec文件名(由 opencv_createsamples 程序生成)


-bg

背景描述文件,也就是包含负样本文件名的那个描述文件


-numPos

每级分类器训练时所用的正样本数目


-numNeg

每级分类器训练时所用的负样本数目,可以大于 -bg 指定的图片数目


-numStages

训练的分类器的级数。


-precalcValBufSize

缓存大小,用于存储预先计算的特征值(feature values),单位为MB


-precalcIdxBufSize

缓存大小,用于存储预先计算的特征索引(feature indices),单位为MB。内存越大,训练时间越短


-baseFormatSave

这个参数仅在使用Haar特征时有效。如果指定这个参数,那么级联分类器将以老的格式存储


级联参数:

-stageType

级别(stage)参数。目前只支持将BOOST分类器作为级别的类型


-featureType<{HAAR(default),LBP}>

特征的类型: HAAR - Haar特征;LBP - 局部纹理模式特征


-w

-h

训练样本的尺寸(单位为像素)。必须跟训练样本创建(使用 opencv_createsamples 程序创建)时的尺寸保持一致


Boosted分类器参数:

-bt<{DAB,RAB,LB,GAB(default)}>

Boosted分类器的类型: DAB - Discrete AdaBoost,RAB - Real AdaBoost,LB - LogitBoost, GAB - Gentle AdaBoost


-minHitRate

分类器的每一级希望得到的最小检测率(正样本被判成正样本的比例)。总的检测率大约为 min_hit_rate^number_of_stages。可以设很高,如0.999


-maxFalseAlarmRate

分类器的每一级希望得到的最大误检率(负样本被判成正样本的比例)。总的误检率大约为 max_false_alarm_rate^number_of_stages。可以设较低,如0.5


-weightTrimRate

Specifies whether trimming should be used and its weight. 一个还不错的数值是0.95


-maxDepth

弱分类器树最大的深度。一个还不错的数值是1,是二叉树(stumps


-maxWeakCount

每一级中的弱分类器的最大数目。The boosted classifier (stage) will have so many weak trees (<=maxWeakCount), as needed to achieve the given-maxFalseAlarmRate


Haar特征参数:

-mode

选择训练过程中使用的Haar特征的类型。 BASIC 只使用右上特征, ALL 使用所有右上特征和45度旋转特征


  • 生成XML文件在data(自己设置的文件目录)
  • 测试分类器

  • import cv2
     
    mouse_haar = cv2 . CascadeClassifier ( "data/cascade.xml" )
     
    cam = cv2 . VideoCapture ( 0 )
     
    while True :
    _ , img = cam . read ( )
    gray_img = cv2 . cvtColor ( img , cv2 . COLOR_BGR2GRAY )
            
             #http://docs.opencv.org/2.4/modules/objdetect/doc/cascade_classification.html
    mouse = mouse_haar . detectMultiScale ( gray_img , 1.2 , 3 ) # 调整参数
     
    for mouse_x , mouse_y , mouse_w , mouse_h in mouse :
    cv2 . rectangle ( img , ( mouse_x , mouse_y ) , ( mouse_x + mouse_w , mouse_y + mouse_h ) , ( 0 , 255 , 0 ) , 2 )
     
    cv2 . imshow ( 'img' , img )
    key = cv2 . waitKey ( 30 ) & 0xff
    if key == 27 :
    break
     
    cam . release ( )
    cv2 . destroyAllWindows ( )




你可能感兴趣的:(opencv 训练分类器(opencv_traincascade和opencv_createsamples))