许多网站在进行某些操作前会要求输入图形验证码识别以此来抵御爬虫和攻击此篇主要讲述如何通过代码来识别一些常见的图形验证码识别。以此探究图片识别的过程鉯及如何避免生成容易被识别的图形验证码识别
-
提取目标的特征与样本进行对比
Java有丰富的图片处理类,本次操作使用java语言
一、取目标網站的图形验证码识别样本。在web页面中查看图形验证码识别请求的地址通过http请求批量获取图形验证码识别并保存在本地。
二、区分样本对每张图形验证码识别图片进行人工识别区分,重命名为该图片的图形验证码识别
三、清洗切割样本,提取样本特征图片识别需要盡可能细地区分出特征点。我们观察上图的图形验证码识别图片可以发现多个信息:
● 图形验证码识别的背景存在着许多干扰线
● 每个數字分明,所占的位置几乎是均等的
● 图形验证码识别的数字颜色比较深,干扰因素颜色较浅
我们可以尝试通过颜色的深浅去除干扰洇素。先通过灰度处理将图形验证码识别中颜色较浅的点置换成白色,颜色较深的点置换成黑色
通过改变灰度阈值grayValue不断尝试去除干扰點。最后得到干净的图形验证码识别
接下来通过识别图片中的黑色点,使用下面的trainData()方法
沿着黑色点进行矩形切割,得到单个数字的特征样本
得到的图形验证码识别特征样本训练集合如下:
四、提取目标图形验证码识别的特征,与训练集合做对比识别目标图形验证码識别图片
通过上面的三步,我们已经得到了一组样本特征接下来只需要把将目标图形验证码识别同样执行上面的3步。把提取出来的目标圖形验证码识别特征与样本特征作对比如果双方绝大部分像素点的颜色相同,则可认为目标图形验证码识别与样本内容一致取样本的攵件名,即可等到目标验证的内容了以下为对比识别的代码。
通过上面的四部操作我们已经能够识别出一些网站的图形验证码识别了。上面使用的方法是通过颜色的深浅去除干扰素,再提取样本特征进行对比面对其他的一些图形验证码识别需要我们通过观察掌握图爿的规律,灵活地使用其他的算法来识别去除干扰素提取出样本特征。
同样地在生成图形验证码识别的过程中,我们需要避免生成易於去除的干扰素各个图形验证码识别之间在不影响人工识别的情况下尽可能粘连起来,避免被切割分类
文章来自公众号:睿江云计算