TensorFlow练习20: 使用深度学习破解字符验证码

news/2024/11/30 10:34:24/

验证码是根据随机字符生成一幅图片,然后在图片中加入干扰象素,用户必须手动填入,防止有人利用机器人自动批量注册、灌水、发垃圾广告等等 。

验证码的作用是验证用户是真人还是机器人;设计理念是对人友好,对机器难。

TensorFlow练习20: 使用深度学习破解验证码

上图是常见的字符验证码,还有一些验证码使用提问的方式。

我们先来看看破解验证码的几种方式:

  1. 人力打码(基本上,打码任务都是大型网站的验证码,用于自动化注册等等)
  2. 找到能过验证码的漏洞
  3. 最后一种是字符识别,这是本帖的关注点

我上网查了查,用Tesseract OCR、OpenCV等等其它方法都需把验证码分割为单个字符,然后识别单个字符。分割验证码可是人的强项,如果字符之间相互重叠,那机器就不容易分割了。

本帖实现的方法不需要分割验证码,而是把验证码做为一个整体进行识别。

相关论文

  • Multi-digit Number Recognition from Street View Imagery using Deep CNN
  • CAPTCHA Recognition with Active Deep Learning
  • http://matthewearl.github.io/2016/05/06/cnn-anpr/

使用深度学习+训练数据+大量计算力,我们可以在几天内训练一个可以破解验证码的模型,当然前提是获得大量训练数据。

获得训练数据方法:

  1. 手动(累死人系列)
  2. 破解验证码生成机制,自动生成无限多的训练数据
  3. 打入敌人内部(卧底+不要脸+不要命+多大仇系列)

我自己做一个验证码生成器,然后训练CNN模型破解自己做的验证码生成器。

我觉的验证码机制可以废了,单纯的增加验证码难度只会让人更难识别,使用CNN+RNN,机器的识别准确率不比人差。Google已经意识到了这一点,他们现在使用机器学习技术检测异常流量。

验证码生成器

TensorFlow练习20: 使用深度学习破解字符验证码
左上角文本对应验证码图像

TensorFlow练习20: 使用深度学习破解字符验证码

训练

CNN需要大量的样本进行训练,由于时间和资源有限,测试时我只使用数字做为验证码字符集。如果使用数字+大小写字母CNN网络有4*62个输出,只使用数字CNN网络有4*10个输出。

TensorBoard是个好东西,既能用来调试也能帮助理解Graph。

训练完成时的准确率(超过50%我就不训练了):

TensorFlow练习20: 使用深度学习破解字符验证码

使用训练的模型识别验证码:

TensorFlow练习20: 使用深度学习破解字符验证码

loss和准确率曲线:

为了成为真正的码农,本熊猫要开始研习TensorFlow源代码了,应该能学到不少玩意。

如要转载,请保持本文完整,并注明作者@斗大的熊猫和本文原始地址: http://blog.topspeedsnail.com/archives/10858


http://www.ppmy.cn/news/264167.html

相关文章

python将图像转化为灰度图像_Python如何将RGB图像转换为Pytho灰度图像?

问题: 我正尝试使用matplotlib读取RGB图像并将其转换为灰度。 在matlab中,我使用这个: 1 img rgb2gray(imread(image.png)); 在matplotlib tutorial中他们没有覆盖它。他们只是在图像中阅读 1 2 import matplotlib.image as mpimg i…

【计算机视觉】- 如何计算灰度图像 【python 灰度图像】

图像类型:通常我们的数字图像是彩色的3通道RGB图像,R代表红色,G代表绿色,B代表蓝色。 存储方式:通常是uint8 无符号整数,0~255,当然也有24bits 可以表示更多的颜色,虽然这样做可以提…

uploads靶场通关(1-11关)

Pass-01(JS校验) 看题目我们准备好我们的php脚本文件,命名为1.php 上传该php文件,发现上传失败 方法一:将浏览器的JavaScript禁用 然后就能上传了 方法二: 查看源码,发现只能上传以下形式的文…

彩色空间转换实验

彩色空间转换(RGB与YUV) 1.彩色空间转换的基本思想及转换公式 由电视原理可知,亮度和色差信号的构成如下: Y=0.2990R0.5870G0.1140B R-Y=0.7010R-0.5870G-0.1140B B-Y=-0.2990R…

MATLAB图像处理

1. rgb2gray rgb2gray 通过计算 R、G 和 B 分量的加权和,将 RGB 值转换为灰度值: 0.2989 * R 0.5870 * G 0.1140 * B 这些权重与 rgb2ntsc 函数用于计算 Y 分量的权重相同。 在舍入到小数点后 3 位之后,rgb2gray 中用来计算灰度值的系数与…

【JZOJ5870】【NOIP2018模拟9.15】地图 (递推+DP+组合数学)

Problem Hint Solution 首先,图中只会存在链和环。记图中有one个度数为1的点,two个度数为2的点。囿于每条链有两个度数为1的点(链的两端),链的数量是确定的: o n e 2 \frac{one}2 2one​。这时&#xff0c…

Smooth Visualization(UVALive 5870)

题意: 给一个长度不超过100的整数字符串,给每一列输出‘*’和‘’,并且两列加号数量的差要小于等于1(*在列的上面)。也就在两个字符间加一些数字,让两个字符呈升序或降序,然后用‘* 和‘’表示出来(如果两个字符相同或…

【瑞格】c语言文件操作实例( 【5870】 内容的加密以及文件写入、读取)

输入文件内容&#xff1a; Hello my Dear: This is a secret, so don’t tell anyone else! Mr. Right is LiXiaoMing. ac代码&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h>int main() {FILE *fp,*fq;char s[150];int i;if((fp…