您的位置:新闻资讯 >文章内容
自动识别字符验证码--素材收集、处理、切割
来源:一点一滴的Beer 作者:admin 时间:2018-12-15 16:50:19

验证码的出现主要是为了区分用户是计算机还是人,比如数字验证码、字符验证码、滑动验证码等等。通常验证码是用来防止爬虫程序恶意抓取信息,或者防止批量注册等等,但是这验证码并不是万能的,还是可以突破的,那么这爬虫怎么突破验证码限制

本文介绍了一套字符验证码识别的完整流程,对于验证码安全和OCR识别技术都有一定的借鉴意义。


一、图片素材收集

1.选定素材类型

自动识别字符验证码--素材收集、处理、切割

此图片能满足要求,仔细观察其具有如下特点。

有利识别的特点 :由纯阿拉伯数字组成、字数为4位、字符排列有规律、字体是用的统一字体 。

不利识别的特点 :图片背景有干扰噪点 。

2.爬取素材,主要步骤如下:

通过浏览器的抓包功能获取随机图片验证码生成接口,批量请求接口以获取图片,将图片保存到本地磁盘目录中,循环执行N次,即可保存N张验证素材了。代码,如下:

自动识别字符验证码--素材收集、处理、切割

效果图:

自动识别字符验证码--素材收集、处理、切割


二、图片预处理

虽然目前的机器学习算法已经相当先进了,但是为了减少后面训练时的复杂度,同时增加识别率,很有必要对图片进行预处理,使其对机器识别更友好。

1.二值化图片

将RGB彩图转为灰度图,将灰度图按照设定阈值转化为二值图:

自动识别字符验证码--素材收集、处理、切割

由PIL转化后变成二值图片:0表示黑色,1表示白色。二值化后带噪点的 6937 的像素点输出后如下图:

自动识别字符验证码--素材收集、处理、切割

2.去除噪点

在转化为二值图片后,就需要清除噪点。本文选择的素材比较简单,大部分噪点也是最简单的那种 孤立点,所以可以通过检测这些孤立点就能移除大量的噪点。

关于如何去除更复杂的噪点甚至干扰线和色块,有比较成熟的算法: 洪水填充法 Flood Fill ,后面有兴趣的时间可以继续研究一下。

经过预处理后的图片如下所示:

自动识别字符验证码--素材收集、处理、切割

对比文章开头的原始图片,那些 孤立点 都被移除掉,相对比较 干净 的验证码图片已经生成。

三、图片字符切割

1.分割算法

使用图像编辑软件(PhoneShop或者其它)打开验证码图片,放大到像素级别,观察其它一些参数特点:

自动识别字符验证码--素材收集、处理、切割

可以得到如下参数:

  • 整个图片尺寸是 40*10

  • 单个字符尺寸是 6*10

  • 左右字符和左右边缘相距2个像素

  • 字符上下紧挨边缘(即相距0个像素)

这样就可以很容易就定位到每个字符在整个图片中占据的像素区域,然后就可以进行分割了,具体代码如下:

自动识别字符验证码--素材收集、处理、切割

然后就能得到被切割的 原子级 的图片元素了:

自动识别字符验证码--素材收集、处理、切割

2.尺寸归一

本文所选择的研究对象本身尺寸就是统一状态:6*10的规格,所以此部分不需要额外处理。但是一些进行了扭曲和缩放的验证码,则此部分也会是一个图像处理的难点。

在前面的环节,已经完成了对单个图片的处理和分割了,后面就开始进行识别模型的训练了。关于后续识别可以了解更多的精灵代理资讯。


相关文章内容简介
在线咨询
微信公众号

微信公众号

回到顶部