Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于python语言的tensorflow的‘端到端’的字符型验证码识别源码整理(github源码分享)

基于python语言的tensorflow的‘端到端’的字符型验证码识别源码整理(github源码分享)

作者头像
用户1170933
发布于 2018-01-05 09:18:34
发布于 2018-01-05 09:18:34
1.6K00
代码可运行
举报
文章被收录于专栏:python开发者python开发者
运行总次数:0
代码可运行

基于python语言的tensorflow的‘端到端’的字符型验证码识别

1   Abstract

验证码(CAPTCHA)的诞生本身是为了自动区分 自然人 和 机器人 的一套公开方法, 但是近几年的人工智能技术的发展,传统的字符验证已经形同虚设。 所以,大家一方面研究和学习此代码时,另外一方面也要警惕自己的互联网系统的web安全问题。

Keywords: 人工智能,Python,字符验证码,CAPTCHA,识别,tensorflow,CNN,深度学习

2   Introduction

全自动区分计算机和人类的公开图灵测试(英语:Completely Automated Public Turing test to tell Computers and Humans Apart,簡稱CAPTCHA),俗称验证码,是一种区分用户是计算机或人的公共全自动程序 [1]

得益于基于卷积神经网络CNN的人工智能技术的发展,目前基于主流的深度学习框架的直接开发出 端到端不分割 的识别方式,而且在没有经过太多trick的情况下,已经可以达到95%以上的识别率。

传统的机器学习方法,对于多位字符验证码都是采用的 化整为零 的方法:先分割成最小单位,再分别识别,然后再统一。 卷积神经网络方法,直接采用 端到端不分割 的方法:输入整张图片,输出整个图片的标记结果,具有更强的通用性。

具体的区别如下图:

端到端 的识别方法显然更具备优势,因为目前的字符型验证码为了防止被识别,多位字符已经完全融合粘贴在一起了,利用传统的技术基本很难实现分割了。本文重点推荐的就是 端到端 的方法。

3   引用声明

本文代码都参考自此文:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://blog.topspeedsnail.com/archives/10858

斗大的熊猫--《WTF Daily Blog》

本项目主要解决的问题是对某一模式的字符型验证进行端到端的识别。

输入内容:

模型预测结果:

4   本文工作

  • 解释了原作者代码注释中提到的关于sigmoid选型的困惑问题并应用到代码中
  • 将原作者的代码进行模块工程化,成为整体项目,方便研究的同学直接进行模式套用

原作者代码中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def train_crack_captcha_cnn():
    output = crack_captcha_cnn()
    # loss
    #loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(output, Y))
    loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=output, labels=Y))
        # 最后一层用来分类的softmax和sigmoid有什么不同?
    # optimizer 为了加快训练 learning_rate应该开始大,然后慢慢衰
    optimizer = tf.train.AdamOptimizer(learning_rate=0.001).minimize(loss)
    ……

作者在代码的注释中出提出了这样的疑问:

对 softmax 和 sigmoid 的使用方式有疑问。

然后在文章下面读者评论区也都提到了此问题,在此进行整体解释一下。

原文中CNN的输出的维度是 MAX_CAPTCHA*CHAR_SET_LEN ,其实这些维度并不都是完全独立分布的, 但是使用sigmoid loss也是仍然可以的,相当于先用sigmoid进行了一次归一化,然后再将各个维度的值向目标值进行 回归 , 最后loss越小,两个向量的对应的值也越接近。 其实sigmoid是可以看成是一个多分类的问题,在这个例子上也能起到比较好的收敛效果

当然,关于分类的问题,看所有的机器学习框架里面,都是建议使用softmax进行最后的归一化操作,这其实相当于是一种 马太效应 : 让可能性大的分类的值变得更大,让可能性小的分量值变得更小。但是这有个前提,就是参与到softmax运算的一组数据,必须是 相关联 的, 所以如果要使用 softmax_cross_entropy_with_logits ,只需要将网络进行简单修改即可。把输出的维度做成二维[MAX_CAPTCHA, CHAR_SET_LEN], 然后使用softmax loss。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
output = crack_captcha_cnn()#36×4
predict = tf.reshape(output, [-1, MAX_CAPTCHA, CHAR_SET_LEN])  # 36行,4列
label = tf.reshape(Y, [-1, MAX_CAPTCHA, CHAR_SET_LEN])

最后使用GPU训练的实验结果对比:

  • sigmoid方式。训练6000个step就能达到95%的准确率。
  • softmax方式。训练8千个step,达到90%的准确率;训练8万个step,达到94.7%(跑了大半天)

使用tensorboard对accuracy进行监控:

sigmoid-6千个step:

softmax-8千个step:

softmax-8万个step:

整体来说,在这个例子里面,好像 sigmoid的收敛速度快些,当然这个可能是本项目里面的外界因素有利于sigmoid吧,至于具体原因,等后续再进行研究和解释吧,当然有可能根本解释不了,因为对于CNN,目前主流的意见都是:,反正效果就是好,但是不知道为啥, 科幻得近于玄幻 的一种技术。

github源码地址:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://github.com/zhengwh/captcha-tensorflow

项目文件介绍:

  • cfg.py 配置信息文件
  • cnn_sys.py CNN网络结构
  • data_iter.py 可迭代的数据集
  • gen_captcha.py 验证码生成器,直接使用程序生成带标记的数据
  • predict.py 加载训练好的模型,然后对输入的图片进行预测
  • train.py 对模型进行训练
  • utils.py 一些公共使用的方法

5   小结

本文主要只写原作者没有提到的内容,想了解原文的,可以直接去原作者页面。

6   Reference

[1]

wiki-CAPTCHA https://en.wikipedia.org/wiki/CAPTCHA

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
tf21: 身份证识别——识别身份证号
上一篇: 身份证识别——生成身份证号和汉字 代码直接参考,验证码识别 #!/usr/bin/env python2 # -*- coding: utf-8 -*- """ tf 训练识别身份证数字(18个字符)图片 @author: 刘鹏 """ from genIDCard import * import numpy as np import tensorflow as tf #obj = gen_id_card() #image,text,vec = obj.gen_image() #图像大小
MachineLP
2018/01/09
6K0
我深度学习0基础,还训练出一个识别验证码模型!
最近一直没出文,是因为最近在写一个爬虫项目,这个项目里面,碰到了一个比较棘手的事情,那就是验证码。各种方法用尽,最后我还是决定去训练自己的模型,但是,有一个问题---我深度学习可以说是0基础,这可咋弄?想来想去,我只能靠着百度&谷歌两位大佬来写了。
Python进击者
2019/07/11
1.2K0
我深度学习0基础,还训练出一个识别验证码模型!
TensorFlow验证码识别
本节我们来用 TensorFlow 来实现一个深度学习模型,用来实现验证码识别的过程,这里我们识别的验证码是图形验证码,首先我们会用标注好的数据来训练一个模型,然后再用模型来实现这个验证码的识别。 验证码 首先我们来看下验证码是怎样的,这里我们使用 Python 的 captcha 库来生成即可,这个库默认是没有安装的,所以这里我们需要先安装这个库,另外我们还需要安装 pillow 库,使用 pip3 即可: pip3 install captcha pillow 安装好之后,我们就可以用如下代码来生成一个
崔庆才
2018/04/04
3K1
TensorFlow验证码识别
Tensorflow实战:Discuz验证码识别
本文将使用深度学习框架 Tensorflow 训练出一个用于破解 Discuz 验证码的模型。
机器学习算法工程师
2018/03/06
9.7K11
Tensorflow实战:Discuz验证码识别
多任务验证码识别
使用Alexnet网络进行训练,多任务学习:验证码是根据随机字符生成一幅图片,然后在图片中加入干扰象素,用户必须手动填入,防止有人利用机器人自动批量注册、灌水、发垃圾广告等等 。 Tensorflow
瓜大三哥
2018/02/26
1.6K0
多任务验证码识别
Python验证码识别 | 源码+通用模型
项目地址:https://github.com/kerlomz/captcha_trainer
用户4738238
2020/06/02
6.1K0
Python验证码识别 | 源码+通用模型
[TensorFlow深度学习深入]实战二·使用CNN网络识别破解数字验证码
参考博客。 在此基础上做了小修改。 其中CNN网络部分仿照我们入门实战六的内容,如果不太清楚CNN可以再去回顾一下。 本博文数据集。
小宋是呢
2019/06/27
4850
深度学习_1_神经网络_3_验证码识别
​ N ------>[0.01,0.02,0.03.......] 概率 N------->[0,0,0,0,1.......] one-hot编码
Dean0731
2020/05/08
3170
基于Tensorflow的验证码识别
最近在入门机器学习,本文作为入门阶段的 "Hello World",旨在学习一些Tensorflow的API和机器学习概念。 步骤 采集验证码图片 处理图片:灰度、去噪、分割 分类图片,准备训练数据:将0-9数字图片放入对应文件夹,转化成数据 编写训练模型 调用模型,形成识别系统 采集验证码图片 随便找一个需要输入图像验证码的网页,最好先简单一点的只有数字的,并且人眼识别也比较容易的。 这步比较简单,关键是去网页上识别验证码接口url,然后按照一些网上教程写个简单的Python程序抓取那些图片。pyt
alexqdjay
2018/05/11
1.2K0
强智教务系统验证码识别 Tensorflow CNN
首先需要手打码,自动获取验证码,并在powershell手动输入验证码,注意目录中的文件夹需要手动建立 引入Convert是为了处理图片,二值化并降噪 手工打200多张验证码,然后开始训练,设置的停止条件低一些,ACC到50%就停止训练 获取一定准确率的模型后再自动获取训练集,再训练,重复过程提高准确率 我重复上述过程三次,最后一次吃了个饭,得到了大约3000张图片的训练集
WindRunnerMax
2020/08/27
5380
强智教务系统验证码识别 Tensorflow CNN
大佬说 | 写给程序员的TensorFlow教程-编码篇
原文 | https://blog.csdn.net/youmumzcs/article/details/79684634
咸鱼学Python
2019/09/25
4580
大佬说 | 写给程序员的TensorFlow教程-编码篇
深度学习之卷积神经网络(CNN)的应用-验证码的生成与识别
本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/10755361.html
用户7225427
2020/09/03
7290
深度学习之卷积神经网络(CNN)的应用-验证码的生成与识别
简单的验证码识别(三)----------------代码实现
此处使用了双层的LSTM作为隐含层,保留最后四个cell的输出结果,加一层full connection,并concat得到最后的输出。
andrew_a
2019/07/30
9030
简单的验证码识别(三)----------------代码实现
python2.7搬运--->TensorFlow - 深度学习破解验证码
谷歌的开源深度学习工具 --py 简介 验证码主要用于防刷,传统的验证码识别算法一般需要把验证码分割为单个字符,然后逐个识别,如果字符之间相互重叠,传统的算法就然并卵了,本文采用cnn对验证码进行整体识别。通过本文的学习,大家可以学到几点:1.captcha库生成验证码;2.如何将验证码识别问题转化为分类问题;3.可以训练自己的验证码识别模型。 安装 captcha 库 sudo pip install captcha 生成验证码训练数据 所有的模型训练,数据是王道,本文采用 captcha 库生成验证码,
98k
2018/04/11
1.2K0
使用Python+Tensorflow的CNN技术快速识别验证码
2018年1月26/1月12日 NVIDIA 深度学习学院 带你快速进入火热的DL领域 正文共2929个字,17张图,预计阅读时间:8分钟。 近年来,机器学习变得愈加火热,中国选手柯洁与AlphaGo的人机大战更是引起热议。目前,在图像识别和视觉分析研究中,卷积神经网络(CNN)技术的使用越来越多。Tensorflow 是由 Google 团队开发的神经网络模块,短短几年间, 就已经有很多次版本的更新。最近我也在自学Tensorflow,想通过卷积神经网络快速识别整块验证码(不分割字符)。期间也碰到许多
企鹅号小编
2018/01/24
1.4K0
使用Python+Tensorflow的CNN技术快速识别验证码
如何“爆破检测”加密密码字段和存在验证码的Web系统
*本文原创作者:shystartree,本文属FreeBuf原创奖励计划,未经许可禁止转载
FB客服
2018/08/20
2.9K0
如何“爆破检测”加密密码字段和存在验证码的Web系统
TensorFlow识别字母扭曲干扰型验证码-开放源码与98%模型
转载请附:博文网址: urlteam   ,github 网址:tensorflow_cnn
十四君
2019/11/24
1.5K0
Tensorflow搭建CNN实现验证码识别
采用三层卷积,filter_size均为5,为避免过拟合,每层卷积后面均接dropout操作,最终将
Awesome_Tang
2019/01/28
8640
Tensorflow搭建CNN实现验证码识别
利用深度学习实现验证码识别-1
验证码(CAPTCHA)是网络安全中常用的一种机制,用于区分人类用户和自动化程序。然而,随着人工智能技术的发展,计算机视觉和深度学习算法在识别验证码方面取得了显著进展。本文将介绍如何使用PyTorch框架实现一个深度学习模型来识别简单的数字验证码。
井九
2024/10/12
1790
利用深度学习实现验证码识别-1
基于Python使用SVM识别简单的字符验证码的完整代码开源分享
本文介绍了一个基于Python使用SVM识别简单的字符验证码的完整代码,包括数据集、原理、代码环境、数据解释和方案思路。通过这个案例,可以学习到如何利用机器学习技术解决验证码识别问题。
用户1170933
2018/01/05
1.8K0
基于Python使用SVM识别简单的字符验证码的完整代码开源分享
相关推荐
tf21: 身份证识别——识别身份证号
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验