鲸数云爬虫门槛之验证码识别
Posted 泰然
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了鲸数云爬虫门槛之验证码识别相关的知识,希望对你有一定的参考价值。
在生活中,我们登陆各类系统或网站时,经常需要输入各种验证码。其主要目的是利用强制的人机交互来识别机器的自动化攻击,因此验证码自诞生以来就是爬虫与反爬虫之间的博弈之争,彩色,加噪,干扰,扭曲,旋转,粘连等十八般武艺层出不穷,自动识别的难度也随之不断提高。
验证码分类
目前的验证码可以粗略地分为以下几种,简单的如:仅为数字字母构成的传统字符验证码,复杂的如:12306的图片验证码,淘宝的滑动验证码等等。12306的验证码,因为其像素低,输入流程繁琐,用户体验极差,在抵御机器识别的同时,也被调侃为购票时的拦路虎。滑动验证码通过检验滑行轨迹,抖动幅度以及各种行为特征与服务端的海量样本进行比对,区分人还是机器。
验证码识别流程
传统字符验证码的识别主要利用了图像处理与模式识别相关知识,主要有以下几个步骤:
背景预处理
背景预处理包括一些干扰线的去除,边框的的去除等,对于不同的验证码需要做相应的背景预处理。
灰度化
灰度化是通过RGB三通道分离,再通过加权平均等方法进行灰度值运算,实现彩色图到灰度图的转变过程。
二值化
二值化通过设置阈值将灰度图转化为0和1构成的像素矩阵。在验证码识别中,二值化是非常重要的一步,通过这一步可以实现背景与字符的分离。利用直方图分布,我们可以对图像的灰度值分布有一个直观的认识,从而获得较合理的阈值。同时也可以利用自适应阈值分割算法,诸如最大类间方差法(OTSU),计算最佳阈值,进行二值化。但是这对于噪声较大的图像,有时会显得效果不佳。
去噪点
去噪点,顾名思义就是去除一些字符外的噪点,在这个环节可以利用如中值滤波(设定一个模板,利用中间点像素与领域像素点的关系进行运算)进行去噪,也可以利用像素的腐蚀与膨胀,从形态学角度解决问题。
原子字符分割
字符分割可简可难,是验证码识别中的重点与难点,再牛逼的分割算法也很难分离出颜色相同,字符完全粘连且有重叠的验证码。通常对于这一类验证码,一般考虑直接跳过字符分割过程,使用如卷积神经网络进行整体识别。
训练与识别
分割后的字符经过一定程度的旋转扶正形成字符集,我们再对字符集中每一个标准化字符进行人工标注。将这一部分字符集分成训练集与验证集,利用机器学习相关算法,进行模型的训练与调优。大量的训练样本是提高识别准确率的关键。
Tesseract的应用
对于一般的验证码(如央行征信,公积金信息等公务系统验证码),每次都进行模型的训练,具有一定的繁琐性,好在目前有许多开源库为我们提供了便利,其中最知名的莫过于Tesseract的OCR引擎。Tesseract的OCR(Optical Character Recognition,光学字符识别)引擎最先由HP实验室于1985年开始研发,在开源后经过Google的不断改进与优化,识别精度也不断提高,而且在其最新版本中也涵盖了中文识别。在Tesseract的使用过程中,白名单的设置以及字符集的交付训练为开发者提供了很大的便利。
白名单设置
Tesseract提供了一个白名单设置文件,可以只将白名单内的字符作为识别比较的对象,从而提高识别准确率。比如一般的非中文字符验证码可分为纯数字,纯小写字母,纯大写字母,数字加小写字母,数字加大写字母,小写字母加大写字母以及数字加大小写字母六种。数字与字母之间存在着一定的相似,如5和S,1和l等,设置白名单后,将会降低一定的误判率。
字符集训练
Tesseract提供了一个字符标准库用于比对识别,但是标准库里的字符集毕竟是有限的,并且没有针对性。当我们遇到字体类型不太常规的,或者经过多次图像预处理后识别效果依然不理想的时候,应该进行字符集的训练,建立具有针对性的字符集。这与在机器学习中,我们用与训练集高度相似的验证集进行模型验证时,准确率出奇得高蕴含同样的道理。
首先,获取预处理后的样本图像(尽量覆盖所有字符),并进行初次的识别。如下图是处理后的河北省直机关公积金的验证码。
处理后的河北省直机关公积金的验证码
背景噪声已经去除,保存为tiff格式,图片名字设置为初次识别结果,可以看到依然存在一些错误。对于识别结果,再利用交互软件jTessBoxEditor进行字符位置以及大小的调整,同时将识别错误的字符进行人工修正,并将这些信息储存于.box文件中。最后、编写脚本,进行批处理操作,从而合成相应的字符集。
对于第一次获得的字符集,将其与常规字符集合并,又可以作为下一次识别与训练的字符集,从而进行迭代训练,不断地降低识别错误率,直到达到系统要求的精度为止。
用Tesseract开源库进行验证码的识别,很难处理字符粘连严重的验证码,但是对于政企网站诸如央行征信,公积金,法院,烟草局这一类简单验证码而言,绝对是个工程上的利器。
验证码识别之路是一条动态发展,与时俱进的漫漫长路,也是一条充满趣味,相互博弈之路。
来源:泰然鲸数云
以上是关于鲸数云爬虫门槛之验证码识别的主要内容,如果未能解决你的问题,请参考以下文章