前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >验证码破解之一:定长文本验证码

验证码破解之一:定长文本验证码

作者头像
GavinZhou
发布2018-01-02 16:19:20
1.2K0
发布2018-01-02 16:19:20
举报
文章被收录于专栏:机器学习实践二三事

之前写过一篇验证码的破解,地址在这,其实效果不好,有很多朋友来问,其实我已经说了只是个demo;既然如此,就写下文本验证码的破解;本次的主题是定长的,就是验证码的长度是个定值,也是大家在上网过程中遇到的最多的验证码。

其实挺简单的,网上也有很多的总结性的文章,基本验证码破解就两个思路(deep learning):

  • 定长类:卷积 + 多个Softmax
  • 不定长类: LSTM + CTC

这次的方法就是卷积+多个softmax

与传统的方法的区别

传统的方法是:

  1. 判定长度
  2. 分割单个字符
  3. 单个字符分类

现在我们的方法是:

构建一个网络让其一次性输出所有的字符(定长)

好处是显而易见的,简单啊!!!!同时借助大量的数据可以获得相当高的成功率

破解过程

数据的获取

由于需要大量的数据,所以无法通过网络down下来手写答案,所以只好代码生成;有一个python库可以帮我们搞定这个事情,地址戳这 贴下官方生成验证码的示例:

代码语言:javascript
复制
from captcha.audio import AudioCaptcha
from captcha.image import ImageCaptcha

audio = AudioCaptcha(voicedir='/path/to/voices')
image = ImageCaptcha(fonts=['/path/A.ttf', '/path/B.ttf'])

data = audio.generate('1234')
audio.write('1234', 'out.wav')

data = image.generate('1234')
image.write('1234', 'out.png')

非常简单,同时还可以生成语音验证码

构建网络

大家看下生成的验证码图片就知道了其实很简单,所以网络不需要构建很复杂就可以很有效的搞定这件事,假设字符的固定长度是4,参考代码如下(keras):

代码语言:javascript
复制
for i in range(4):
    x = Convolution2D(32*2**i, 3, 3, activation='relu')(x)
    x = Convolution2D(32*2**i, 3, 3, activation='relu')(x)
    x = MaxPooling2D((2, 2))(x)

x = Flatten()(x)
x = Dropout(0.25)(x)
x = [Dense(n_class, activation='softmax', name='c%d'%(i+1))(x) for i in range(4)]
model = Model(input=input_tensor, output=x)

很简单对吧,其实这个网络就可以工作的很好

训练

代码语言:javascript
复制
model.fit_generator(gen(), samples_per_epoch=51200, nb_epoch=5, nb_worker=2, pickle_safe=True, validation_data=gen(), nb_val_samples=1280)

gen是个生成器,生成训练数据

测试

代码语言:javascript
复制
x, y = next(gen(1))
y_pred = model.predict(X)
plt.title('real: %s\npred:%s'%(decode(y), decode(y_pred)))
plt.imshow(X[0], cmap='gray')

结果

训练了5个epoch,每个epoch大概5W张,acc可以到0.99

代码我是跑了别人使用Keras写的,准备使用Tensorflow复现下,写好后一并拿出来吧,暂时没有!

参考博客:

端到端的OCR

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-04-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 与传统的方法的区别
  • 破解过程
    • 数据的获取
      • 构建网络
        • 训练
          • 测试
            • 结果
              • 参考博客:
          相关产品与服务
          验证码
          腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档