深度学习caffe实战(一)验证码识别

狭义上讲验证码识别是将验证码图像转化成字符串值,传统方法常常先对验证码图像进行字符分割,再对验证码进行识别,劣势在于字符分割方法往往针对不同风格的验证码需要做修改,某些验证码加入噪声或线条,字符位置不固定及粘连时,字符分割效果不好,也会影响后续字符识别。除了只包含字母和数字的验证码,国内还有一些识别汉字的验证码,还有你以为考你认字符串实际上考你加减乘除的验证码,还有图像匹配和图像分类的验证码,种类和花样很多。所以验证码识别这种东西不可沉迷,毕竟道高一尺魔高一丈,道再高一尺。你破解了别人的验证码,维护人员立马弄出了新花样,换了一批新的验证码,你之前的方法就不好使了,于是你又破解了他的,他又改了新的…看谁能耗的久…不过博主作为菜鸟,做做验证码识别还是很有意义的,如果你也是搞深度学习的新手,不妨接着看下去,能够把数据集的准备和制作、深度网络模型的设计、训练和测试的流程走一遍。

博主是用深度学习做多任务分类的思路来识别验证码。多任务学习是针对数据给出多个监督信息(标签)进行学习,例如识别一张图像中的脸是否是人脸、脸部表情、性别、年龄等,识别图像中车的颜色、车型、姿态等,都属于多任务分类。项目用深度学习做多标签分类,是用深度神经网络对整张验证码图片进行多标签学习,来完成多任务分类,端到端的识别出验证码中的所有字符。这种思路同样可以用于车牌识别中。

用深度学习来做验证码识别,优势在于,只需要找一个合适的网络模型稍加修改,再给网络送入足够的有标签样本进行训练,就能达到很好的识别效果,无论验证码里面是白的黑的正的歪的、何种字体、粘不粘连都可以,也没必要做去噪、二值化、纠正和调各种阈值等各种处理(不然验证码风格稍微一变,你的处理方法就得改),直接端到端识别验证码的效果完全不比先做字符分割再做识别差。但其劣势也很明显,对不同手段生成的不同风格的验证码,都需要收集、爬取或模仿其验证码风格自己写代码生成大量样本,以维持较高的识别率。

为了满足多任务分类要求,对caffe源码进行针对性的修改满足多标签的输入和训练;然后在2012年ImageNet大赛冠军AlexNet网络模型的基础上进行了修改,作为多任务分类的模型;在windows平台下(ubuntu下当然也可以)利用caffe对两个不同的数据集进行了训练和测试;最后利用caffe的matlab接口,修改classfication_demo.m来做批量验证码图片识别,对caffe自带的classification.cpp做修改,也可以满足多任务分类。如果还没有编译caffe(gpu版本)及matlab接口,请先参照我的博客Windows下编译caffe

第一个验证码数据集条件比较理想,在生成时做了添加随机噪声点、字符变形、旋转缩放、随机赋色等处理。训练集64536张,验证集9096张(验证模型好坏),另外有714张用于做测试(测试模型效果),图片大小为88x28,共有数字0~9和大写字母A~Z共36类,每张验证码图像中包含四个字符,数据集下载。经过训练,该验证集图像上四个字符单个字符的识别准确率都达到了99.5%。而用于测试的714张验证码中,有15个识别出错,验证码整体识别结果准确率接近98%,主要是对0和O比较容易搞混。

这里写图片描述

第二个验证码数据集比较常见,更具有挑战性,生成验证码图像时使用了6种字体并加入随机线条、字体变形、旋转、随机赋色等处理。训练集63926张,验证集11914张,另有4112张用于测试,图片大小为150x40,共有数字0~10和小写字母a~z共36类(实际上该数据集中没有数字0和小写字母o,但并不影响我们用36类做分类),每张验证码图像中包含五个字符,数据集下载,其验证码生成程序来源github链接。经过训练,验证集验证码图像上五个字符单个字符的识别准确率平均达到了88%,最后对4112张图片进行测试,验证码整体识别结果准确率超过63%,虽然效果不是特别理想,但仔细观察下图,会发现随机线条的加入使得很多字符人眼都难以确认。

这里写图片描述

有了数据集之后,下面介绍利用深度学习进行验证码识别的具体步骤,在两种数据集上采用的方法是基本一致的,但第二个数据集似乎更有趣一些,以此为例。

1 数据准备

下载得到的数据集中的前三个文件夹,包括captcha_train、captcha_val和test_images,分别是验证码图像训练集、验证集和用于测试的图片文件夹。
这里写图片描述

captcha_train.txt和captcha_val.txt分别是captcha_train和captcha_val数据集对应的多标签文本文件,可以由matlab实现,生成captcha_train.txt和captcha_val.txt的create_captcha_train_val_txt.m代码如下。

%create_captcha_train_val_txt.m
%创建验证码的多标签标签txt文件
%验证码类别数为36,包括0~9和a~z(a~z的ascii码范围为97~122,减去87对应10~35,构成0~35共36类)
datadir = 'D:\data\Captcha2\captcha_train'; %train数据集
fp=fopen('D:\data\Captcha2\captcha_train.txt','w'); %新建一个txt文件存放结果
% datadir = 'D:\data\Captcha2\captcha_val'; %test数据集
% fp = fopen('D:\data\Captcha2\captcha_val.txt','w'); %新建一个txt文件存放结果
imagefiles = dir(datadir); %列出目录下所有文件
for i = 3:length(imagefiles) %windows系统下所有文件夹下都有两个隐藏文件排在最前面,跳过
    filename = imagefiles(i).name; %获取某张图像文件名
    fprintf(fp,'%s ',filename); %打印文件名
    for j=1:5 %打印多标签(5个)
        if abs(filename(j)) >= 
  • 8
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 38
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值