使用OpenCV训练级联分类器

       虽然opencv已经自带了人脸、嘴巴、鼻子等分类器,但工作中有时候由于项目需要,还是需要自己训练分类器,最近我做了一下这方面工作,现在把训练分类器的过程写出来,希望对打算做这方面工作的同学有帮助。我主要参考了这篇文章。先介绍下我的工作环境,windows 7 + opencv243,下面是我的工作目录:
                                                
由于这里我的opencv是debug版本的,所以所有文件名都是d结尾,如果opencv是release版本就好了。当然,这并不影响训练,只是debug版本会耗时些。
       1. 搜集样本
       样本分两种:正样本和负样本。正样本即所要检测的目标物(如人脸、嘴巴等),负样本指其他任意图片,只要与正样本相异即可。创建样本这个过程比较耗时,如果以学习为目的,随便玩玩,那就自己写程序截图或者手动截个几十张图作为样本,如果工作上使用,得需要上千张正、负样本,那就得由专人去搜集、整理样本了。
       详细步骤:
       (1)搜集的所有样本(正、负样本)应该统一尺寸,如24*24、30*30等;
       (2)将正、负样本分别放置两个文件夹,如下图所示。本次训练中,我选择的正样本为闭嘴吧图片,负样本为张嘴巴图片,不过训练后的结果不是很理想。
                                                          
                                                
       (3)为正样本创建描述文件。打开命令行,进入正样本目录,命令如下图所示:
                                            
回车运行后,打开正样本目录,发现该目录下多了一个文本文件,这个文件就是上述命令创建的样本描述文件。
                                 
打开该文件后,使用替换功能将所有jpg替换为jpg 1 0 0 30 30,1为正样本标识,(0,0)表示起始坐标,(30,30)为样本宽、高。另外记得删除最后一行的“pos_info.txt”,保存退出即可。至此,正样本描述文件创建完毕,如下图所示:
                                                       
       (4)为负样本创建集合文件。该步骤较简单,首先进入该目录下,然后输入与上面同样的命令,回车运行后,打开负样本目录,即可发现刚刚创建的文本文件,打开后不用做其他操作,删除最后一行“neg_info.txt”后保存退出即可。如下图所示:
                                           
       2. 创建样本
       opencv自带有创建样本的程序,命令如下图:
                                    
这里我的样本数为80,样本宽为30,高为30,生成的文件为my.vec。该命令还有其他可选参数,我没有再去看,大家有兴趣的可以研究下。这个就是刚创建的vec文件,如下图所示:
                                                        
       3. 训练分类器
       命令如下图所示:
                                    
上面命令中,-npos 80为正样本数量,-nneg 112为负样本数量,-nstages 4为训练的分类器级数,-mem 512为缓存大小,-w 30为样本宽,-h 30为样本高。本着玩玩的心态,其他参数详细内容没有再去查。 当出现如下界面时,即训练结束了。
                                                                              
在当前目录下可以发现多了一个data.xml文件,即为训练结果,该结果可以使用OpenCV CascadeClassifier的load()函数加载使用了。当样本很多时,这个训练过程非常耗时。
                                                                                 



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值