有的时候我们使用一些自动化脚本需要自动登录到一些网站做一些操作,提高工作的效率。但验证码是一个拦路虎,面对各种复杂的甚至连人都可能搞错的验证码,机器的自动识别往往变得异常艰难,与验证码的斗争使我们头疼不已。
好消息是,随着深度学习在图像识别领域的发展,采用神经网络对验证码图像自动提取特征,其识别精度往往让人惊叹。但是,这类方法依赖于海量样本,当样本的数量达不到一定规模时,其识别效果也大打折扣。数据获取和数据信息标注耗费了大量的人力物力,在实际生成应用中难以普遍的推广。
那么,问题来了,有没有什么办法可以自动的获取数据并进行标注呢?答案是:有!
验证码生成规律解析
收集一些验证码,如图所示:
上图验证码的来源和用途参考:全国增值税发票查验平台验证码识别
通过观察图片我们发现了以下规律:
验证码由6个字符(数字/字母/汉字)组成,包括4种颜色(红/黄/蓝/黑)。
验证码图片为宽90、高35的三通道RGB图像。
图片背景由两条随机曲线划分成多块,包含两种随机的背景颜色。
图片上有1-3根位置和长度都随机干扰线,颜色为绿色。
图片上大约有50个随机噪点,颜色随机。
所有字符有相似的大小和统一的字体(汉字和数字字母为两种不同字体)。
验证码图片生成——Captcha
python中有一款验证码生成的库captcha。pip install captcha
from captcha.image import ImageCaptcha
chars = 'haha'
image = ImageCaptcha().generate_image(chars)
image.show()
image.save("test.png")
效果如下:
这个ImageCaptcha类的generate_image,返回的是一个”PIL.Image.Image”对象,可知该验证码生成库是基于于PIL库的。于是,我们去查看ImageCaptcha类的源码:
class ImageCaptcha(_Captcha):
"""Create an image CAPTCHA.
Many of the codes are borrowed from wheezy.captcha, with a modification
for memory and developer friendly.
ImageCaptcha has one built-in font, DroidSansMono, which is licensed under
Apache License 2. You should always use your own fonts::
captcha = ImageCaptcha(fonts=['/path/to/A.ttf', '/path/to/B.ttf'])
You can put as many fonts as you like. But be aware of your memory, all of