使用OpenCV的Haar特征训练身份证级联分类器

以下是我参考的几个人脸分类器的文章:


http://blog.csdn.net/yangleo1987/article/details/52883864

http://m.blog.csdn.net/duhaomin/article/details/10155813

http://blog.csdn.net/autoliuweijie/article/details/51911289


训练工作主要分为如下几步:

  • 配置训练环境
  • 制作训练数据集
  • 生成正样本描述文件(.vec)
  • 训练身份证分类器
  • 使用分类器进行身份证识别分类


配置训练环境


      训练过程主要依靠OpenCV自带的两个可执行程序opencv_createsamples.exeopencv_haartraining.exe操作完成的。可以直接下载我已经配置好的文件进行训练。文件地址为:http://download.csdn.net/download/u010782875/10033202

         文件目录如下:


id_24x16_10目录:新建的一个目录,存放之后训练生成的分类器文件

negdata目录:存放负样本的目录

posdata目录:存放正样本的目录

negdata.txt:负样本的文件路径

posdata24x16.txt:正样本的文件路径

posdata24x16.vec:生成的正样本描述文件

opencv_createsamples.exe:生成正样本描述文件的可执行程序

opencv_haartraining.exe:训练样本的可执行程序


制作训练数据集


      将要训练的正样本放入posdata目录,这里为身份证图片,像素大小为24x16(经多次尝试该尺寸效果最佳);将负样本放入negdata目录下,负样本的像素尺寸要大于正样本,正负样本比例1:3效果最佳。我这里使用了110张正样本和300张负样本。

      接下来需要正负样本的文件路径,用于训练中找到每个样本。进入正负样本目录,新建一个文本文档num.bat,内容如下。


双击运行后生成当前图片的绝对路径,然后将正样本的路径格式进行如下替换(负样本路径文件可不做修改):


将绝对路径改为相对路径,然后添加的1代表个数,后面四个分别表示样本的left  top  width  height


生成正样本描述文件


      打开cmd.exe,进入上述目录,然后运行指令:opencv_createsamples.exe -info posdata24x16.txt -vec posdata24x16.vec -num 110 -w 24 -h 16


-info  样本说明文件

-vec  正样本描述文件的名字及路径

-num  样本数量

-w-h  样本尺寸大小

执行结束后将生成正样本描述文件posdata24x16.vec


训练身份证分类器


      接着执行指令:opencv_haartraining.exe -data id_24x16_10 -vec posdata24x16.vec -bg negdata.txt -npos 110 -nneg 300 -nstages 10 -nsplits 1 -sym -w 24 -h 16 -mode all -mem 1024

         

        

      这里用到了OpenCV自带的工具opencv_haartraining.exe,该工具封装了haar特征提取以及adaboost分类器训练过程,并合并各级分类器成为最终的xml文件

-data  指定生成的文件目录,用于存放各级分类器文件

-vec  正样本描述文件

-bg  负样本路径文件

-npos  每个阶段用来训练的正样本数目

-nneg  每个阶段用来训练的负样本数目

-nstages  指定训练层数,层数越高,识别粒度越小,耗时越长

-nsplits  分裂子节点数目,1表示使用简单地stump classifier分类

-sys  后面不用跟其他参数,用于指定目标对象是否垂直对称

-mode  all指定haar特征的种类,basic仅仅使用垂直特征,all表示使用垂直特征以及45度旋转特征

-mem  表示允许使用计算机的1024M内存进行训练

      运行结束后,目录下会生成最终的xml文件

        


使用分类器进行身份证识别分类


      将生成的xml文件放到相关项目中(这里放在安卓客户端验证),分类结果如下:


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值