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)

然后修改为
    

#利用文本编辑器的 查找替换 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<cascade_dir_name>

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


-vec<vec_file_name>

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


-bg<background_file_name>

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


-numPos<number_of_positive_samples>

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


-numNeg<number_of_negative_samples>

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


-numStages<number_of_stages>

训练的分类器的级数。


-precalcValBufSize<precalculated_vals_buffer_size_in_Mb>

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


-precalcIdxBufSize<precalculated_idxs_buffer_size_in_Mb>

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


-baseFormatSave

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


级联参数:

-stageType<BOOST(default)>

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


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

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


-w<sampleWidth>

-h<sampleHeight>

训练样本的尺寸(单位为像素)。必须跟训练样本创建(使用 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>

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


-maxFalseAlarmRate<max_false_alarm_rate>

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


-weightTrimRate<weight_trim_rate>

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


-maxDepth<max_depth_of_weak_tree>

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


-maxWeakCount<max_weak_tree_count>

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


Haar特征参数:

-mode<BASIC(default)| CORE|ALL>

选择训练过程中使用的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 ( )




  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值