许多网站在进行某些操作前会要求输入验证码以此来抵御爬虫和攻击。此篇主要讲述如何通过代码来识别一些常见的验证码。以此探究图片识别的过程以及如何避免生成容易被识别的验证码。
理论
图片识别的过程
-
取样本
-
清洗区分样本
-
提取样本特征
-
提取目标的特征与样本进行对比
操作过程
Java有丰富的图片处理类,本次操作使用java语言。
一、取目标网站的验证码样本。在web页面中查看验证码请求的地址。通过http请求批量获取验证码并保存在本地。
二、区分样本。对每张验证码图片进行人工识别区分,重命名为该图片的验证码。
三、清洗切割样本,提取样本特征。图片识别需要尽可能细地区分出特征点。我们观察上图的验证码图片可以发现多个信息:
● 验证码的背景存在着许多干扰线。
● 每个数字分明,所占的位置几乎是均等的。
● 验证码的数字颜色比较深,干扰因素颜色较浅。
我们可以尝试通过颜色的深浅去除干扰因素。先通过灰度处理,将验证码中颜色较浅的点置换成白色,颜色较深的点置换成黑色。