文章目录
- 《A Survey on Breaking Technique of Text-Based CAPTCHA》
- 《Selective Learning Confusion Class for Text-Based CAPTCHA Recognition》
- 《A Low-Cost Approach to Crack Python CAPTCHAs Using AI-Based Chosen-Plaintext Attack》
- 《Captcha Automatic Segmentation and Recognition Based on Improved Vertical Projection》
- 《A Multi-label Neural Network Approach to Solving Connected CAPTCHAs》
- 《 Verification CAPTCHA Based on Deep Learning》
- 《A CAPTCHA recognition technology based on deep learning》
- 《Recognition of CAPTCHA Characters by Supervised Machine Learning Algorithms》
- 《Using Synthetic Data to Train Neural Networks is Model-Based Reasoning》
- 《Chinese Character CAPTCHA Recognition and Performance Estimation via Deep Neural Network》
- 《A machine learning attack against variable-length Chinese character CAPTCHAs》
- 《A generative vision model that trains with high data efficiency and breaks text-based CAPTCHAs》
为了了解国际形势,先来篇近几年的综述报告:
《A Survey on Breaking Technique of Text-Based CAPTCHA》
基于文本验证码的破解技术综述
2017
基于文本验证码的主要特点
- 足够大的数据集,使其足以抵抗暴力求解
- 具有变形,粘贴,重叠等字符。达到不容易分割的目的
- 同一字符的大小,宽高,位置,字体不同
- 具有大量噪声
各大网站种类以及特点汇总

主要内容
- 验证码的识别,主要针对于验证码是否切割而分为两种派系
- 早期文本验证码的破解技术主要是“预处理+分割+识别”。而随着验证码字符的粘连,现在出现了更多的处理框架比如:预处理+识别+后处理、预处理+分割+组合+识别,预处理+分割+组合+识别+后处理
- 本文主要是分别对预处理,分割,组合,识别,后处理等各大模块的研究进展进行了一个描述
- 每个模块的研究情况如下:

当前形势存在的一些问题以及发展方向
- 目前市面上还有一个标准的数据库,进而没法对领域内的各种方法进行一个统一的评估
- 目前只有在训练集和测试集属于同一类型下,才能够有效的识别
- 拒绝的概念还未被熟知
《Selective Learning Confusion Class for Text-Based CAPTCHA Recognition》
2019
基于选择性学习的文本验证码识别
拟解决的问题
由于深度神经网络对混淆类的较低的识别准确率,而提出的一种选择性学习混淆类的新方法
大多数DCNN有统一处理训练样本,且在训练过程中不断迭代,并且随着误差率越来越小,趋于稳定后停止训练(其实这里放弃了学习混淆样本的能力,因为混淆类别对降低错误率没有影响)
内容概要
总的来说的话,就是建立了一种新的架构SLCC(Selective Learning Confusion Class),将混淆样本和普通样本分开,训练出两个模型,然后再结合。
针对混淆类的问题,开始的时候,文中提到了一种方法Dropsample:
简单的来说就是通过样本不同类别的置信度,动态改变训练集中每个样本取出用以学习的概率分布。(具体参看论文:W. Yang, L. Jin,D. Tao, Z. Xie, and Z. Feng, ``Dropsample: A newtraining method to enhance deep convolutional neural networks for large-scale unconstrained handwritten chinese character recognition’’ PatternRecognit., vol. 58, pp. 190-203, Oct.2016.),但是这种方法吧普通训练集和混淆样本结合放在一起训练,这样会很大程度上影响收敛速度,以及模型准确性。
- 提出了一个具有两级DCNN的架构:全级DCNN和混淆级DCNN。
- 用全级DCNN的输出构造混淆关系矩阵以显示类之间的混淆关系
- 提出了一种分区算法(根据混淆矩阵,将一些有混淆关系的类别合在一起,形成新的样本集合),每个样本集对应一个新的混淆级DCNN。
- 为提高混淆级DCNN中混淆字符的识别准确性,提出了训练和验证交互式学习算法。
- 将两个阶段的输出结合起来作为最终识别结果。

结果:
作者用了两种定义的混淆集合方法,第一种是把所有混淆集合放在一起(SLCC-A),第二种是把这个大的混淆集合分开,就是上述的说的每个混淆子集合中的所有元素都存在混淆(SLCC-M)。得到集合如下:

错误率与迭代次数的变化如下:

一些细节问题
- basic DCNN采用的网络结构:leNet-5

- 数据集的来源:QQ and BotDetect CAPTCHA,这两种数据集分别得到了1000张(人工打码),然后再根据文中提到的针对非均匀数据集的处理方法,得到比较均匀的数据集。
- 其实生成的混淆集合不会很多,因为10num+26charac中字符容易混淆的就那么几种,所以最后一步将全级DCNN和混淆级DCNN结合和有必要。
学到的东西
《A Low-Cost Approach to Crack Python CAPTCHAs Using AI-Based Chosen-Plaintext Attack》
基于AI的低成本破解python captcha的方法
2019
解决的问题
利用TensorFlow对象检测以及文中提到的峰值分给算法与卷积神经网络相结合,对两个开源的验证码库(claptcha和captcha)https://pypi.org/project/claptcha/进行识别(有与训练集可自己生成大大减少了计算机资源的使用,以及寻找训练集所需要的成本)
论文特点
- 利用以后的验证码生成库,可以无限的训练模型,使模型达到良好的标记效
- 利用目标检测算法能够很好地对字符进行定位
- 利用峰值分割算法很好地弥补了目标检测的一些不足
工作流程
- 利用上述的开源库代码,完成一个验证码生成器
- 利用TensorFlow 下的Google 目标检测对图像中的文字进行定位,找到每个文字的位置
- 利用峰值分割算法对目标检测算法进行扩展,使每个字符得到较好的分割(x为横向坐标,y为在该x下整列的值的和)
- 建立相应的神经网络,训练模型

需要改进的地方
对粘连的验证码很不友好
《Captcha Automatic Segmentation and Recognition Based on Improved Vertical Projection》
拟解决的问题:
解决很多粘连的验证码的分割问题,针对验证码的不同粘连程度提出来分割方式
大致思路:
- 对图片进行预处理:图片背景色处理,二值化,去燥(Hough转换,中值滤波)等操作
- 根据图片的粘连程度不同,以不同的切割算法对图片进行切割
- 通过图片与模块的匹配程度来对新的图片进行预测
值得说的一些细节
- 该项目的数据集来源于:The captcha dataset used in this paper came from ‘the Second National Big Data Technology Competition—Captcha Recognition Competition’ undertaken by DataCastle.
- Hough转换:简单的获救在指教坐标系中的一条直线,转换到极坐标中是一个点。(用以去除干扰线)
- 定义图片的粘连程度以及分割算法(通过对图片的垂直投影进行观察):
- 如果两个字符之间有0投影的,则称该图片为无粘连图片,切割点:0投影位置坐标
- 若两个字符之间没有0投影,且出现最高峰,最高峰的位置距离两个投影的中心的距离不超过5个像素,则称为图片为:共用线粘连。切割点:最高峰所在坐标点
- 若两个字符之间没有0投影,且出现了最低谷,且最低谷距离两个投影的中心的距离不超过5个像素,则称该图片为:共用角粘连。切割点:谷底所在坐标
- 若无上述特征的粘连图片,称为高度粘连。切割点:两个字符中间点的中心点
结果

改进方向
1. 可以考虑一种算法,通过对投影中连续几个相邻坐标点的分类,来斜向对图片进行切割。
2. 利用深度学习代替最后的通过对比样本与模块的匹配度来进行识别的操作
《A Multi-label Neural Network Approach to Solving Connected CAPTCHAs》
一种基于多标签神经网络的解决连通问题的验证码识别算法
论文目的
设计一种多标签卷积神经网络以不分割的方式来解决captchas(卷积被修改成不仅学习字符的特征还要学习每个字符所在位置)
数据集
- Captcha 0.2.1:一个开源的验证码生成器。结果:测试集94%的正确率
- 百度验证码(1200个图像,手工标记)。 结果:由于训练集过少,测试集只有43%的正确率
网络结构

Separate Convolutional Layers: 放入的图片首先通过Separate Convolutional Layers来提取不同位置的特征的信息。因为不同位置的信息应当不同,所以采用了4个没有参数共享的卷积块来进行特征提取。卷积块的详细结构如下:

Contact层: 每个验证字符的是否识别难度其实是和他的邻居的两个字符有关的,如下图,左边的W比右边的W难识别,是因为他和一个D挨着。因此有了这个contact层,也就是在考虑字符所在位置的特征同时也考虑其周围邻居的特征。

其他的全连接层就不赘述了。
论文特色
- 与传统方法相比,达到了端对端的效果,无需切割
- 考虑到了字符在不同位置之间的辨识程度,通过不同的卷积层抽象每个位置的的各个字符的特征
- 和一般的seq2seq相比,放弃了其统一提取特征的思路,不同位置的字符并没有共享参数。
《 Verification CAPTCHA Based on Deep Learning》
Tao Zhang, Honglei Zheng,Lele Zhang
总结
- 这篇论文主要是对于可切割的图片进行切割,然后利用卷积进行学习。
网络结构效仿VGGNet模型,如下:

- 本论文在分割的基础上,提出来端对端的识别。并且提出来LSTM等结构的引入
《A CAPTCHA recognition technology based on deep learning》
Yu Hu, Li Chen , Jun Cheng
拟解决的问题
避免定位与分割,对具有噪声背景和字符粘连,畸形的图片进行识别
数据集:利用python脚本生成

具体思路
1 对图片进行局部对比度归一化(在深度学习中对比度通常指的是图像或图像区域中像素的标准差)这里用以避免由于过多的绝对输入值引起的神经元输出饱和
2. 引入多任务学习的概念,识别每个字符相当于一个任务,而一张图片有5个字符。因此神经网络的输出应该是5*62个神经元
3. 网络结构:采用VGG-let的结构

4. 设置自学习率公式:
lr(i) = lr(0) * (1/(1+decay)*i)
lr(0)=0.001,decay =0.0001
论文优点
- 引入自学习率来加速模型的收敛速度
- 将多任务学习的概念引入,这里采用硬共享的方式建立模型,减少参数大小
- 利用VGG-Net网络的好处有:
- 3 * 3 是最小的能够捕获左、右、上、下和中心特征的尺寸;
- 两个 3 * 3 卷积连接可以视为 5* 5 的卷积,三个 3 * 3 的卷积连在一起可以视为 7*7 的卷积,多个小卷积层比一个大卷积层有更多的非线性,且具有更少的参数。
《Recognition of CAPTCHA Characters by Supervised Machine Learning Algorithms》
用监督机器学习算法识别CAPTCHA字符
2018
解决的问题
本论文主要比较了几个监督学习的算法针对于验证码识别的优劣,其中主要比较了:KNN,SVM,神将网络,决策树等对一种新型的验证码–气泡验证码进行识别。
关于气泡验证码的相关叙述请查看:BUBBLE CAPTCHA - A START OF THE NEW DIRECTION OF TEXT CAPTCHA SCHEME DEVELOPMENT
事列如下(这种数据集可以用PHP的相应库生成):

特色:
- 通过设置固定的垂直投影以及二维颜色等两种标准来对图片进行切割
- 将预处理后的图片拉成一个1位向量作为机器学习的输入
- 对多种机器学习算法进行了评估(成本以及精确性)
缺陷
只是用常规的解决验证码识别的方法却解决了一种不常见的验证码
《Using Synthetic Data to Train Neural Networks is Model-Based Reasoning》
使用合成数据训练神经网络
解决的问题
为了解决数据问题:提出来一种基于概率合成数据的数据生成模型,能在训练时无限生成标记数据。并提出了一种用以识别图片风格以及字母的网络结构
论文思路
- 定义风格,不同网站的验证码风格图不同,如下:

- 做自定义了一个图片生成器,该生成器(每种风格的每种参数,都是在一个范围内的,可以均匀分布产生)可以通过输入固定格式的x,来进行图片的很成。这个x代表的就是图片的风格+内容。具体定义如下:

L 表示字母的个数
ε 1:K 表示一个1K维结构化参数集,用于控制Captcha渲染参数,如字距调整和各种特定于样式的变形
i1:L 表示1L维,表示具体的字母
- 将x作为图片生成器的输入,将图片生成器的输出作为神经网络的输入。损失函数为:softmax输出的对数的负和
- 该神经网络的结构如下:

- 对每次生成的数据有一个回溯的过程,也就是说开始的时候产生数据属于均匀分布,后面作者建立了一个概率模型,用以根据结果过改变数据的生成概率。
缺陷
该模型其实必须要了解所需要破解的验证码的风格,那么还是需要人为的进行测试定义,那么这样合成的过程是否和原网站所贴的验证码的过程相似,存在很大问题。
优点
该模型后面根据贝叶斯概率所建立的模型,可以很好地用以确定每条样本的重要程度
《Chinese Character CAPTCHA Recognition and Performance Estimation via Deep Neural Network》
拟解决的问题
提出一种网络结构用于识别汉字的笔画,词根以及其他特征,且准确率高于中文OCR软件Hanvon
数据集来源:使用Kptcha自动生成,生成了三种类型:#3D阴影,水波纹,语言
网络结构(在·letNet5的基础上加了一层卷积用以适应汉字的特殊性)

使用三个卷积层和二次采样层来学习汉字的结构。对于每个汉字,它通常由三个部分组成:笔画,字根和字符。因此,我们使用第一个卷积层和子采样层来学习图像中的笔画结构,然后第二个卷积层和子采样层用于学习字根,同理…
例如 “什”字,择优两个词根(一个“单人旁”,一个“十”)
论文特点
1.该论文很逻辑性的论述了网络结构这样设计的特点:
2.其传统机器学习算法以及letNet5的准确率进行了比较
3.利用控制变量法,讨论了卷积个数,feature map的数量等于精度,收敛速度的关系
4.很详细的利用控制变量讨论了准确率,训练迭代次数,样本数量,target的类别数的变化情况。得到结论:在足够的训练样本条件下,识别的准确性与训练样本数和迭代次数的乘积呈指数关系。
《A machine learning attack against variable-length Chinese character CAPTCHAs》
可变长度汉字验证码破解
2018
拟解决的问题
如题,在普通的汉字验证码识别的基础上提出来可变长度的验证码识别。并且提出了两种方法。
- 基于多尺度Gabor和基于逻辑回归的识别(MGLCR)
- 基于卷积神经网络的识别(CCR)
数据集主要来自于“中国国家企业信用信息网”,并且为了证明该算法的优劣,本文还找了其他各种类型的验证码进行测试
解决思路
- 图像预处理

利用高斯光滑,形态灰度化重建(膨胀和腐蚀)和Ostu方法(一种二值化的高效算法)对图像进行不同程度上的去噪。
2.图像的分割
- 图像的维度分类,根据图像的颜色分布,将图像分为:灰度图,均匀色彩图,不均匀色彩图
如下图所示,不同类的图像的维度是不同的):

- 使用均值偏移聚类算法(爬山聚类),根据图像类别,确定其数据的维度,然后进行聚类,这里的类别数又算法自动确定。并且在聚类后,还需要进行一个聚类矫正的操作。(其实就是定义一个阈值把那些类中像素少的给剔除)
3.MGLCR:利用Gabor滤波器来提取图像特征,再利用PCA进行维度上的归一与降维,最后利用逻辑回归进行分类
4. CCR:卷积神经网络的结构如下:

论文优点
5. 将均值偏移聚类应用于图像分割,用以应对可变数据长度的验证码
6. 提出来一种比较新颖的识别算法:MGLCR
7. 采用多种算法对图片进行二值化处理,用以应付图片的各种噪点。
《A generative vision model that trains with high data efficiency and breaks text-based CAPTCHAs》
这篇论文是一篇science,论文主要提出了Recursive Cortical Network(RCN),看前言应该说的是一种通过概率图生成模型。。。不过感觉需要很多前驱只是,因此,还没有怎么读懂,先换一下,另开一章博客。