前言
验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越来越严峻。本文介绍了一套字符验证码识别的完整流程,对于验证码安全和OCR识别技术都有一定的借鉴意义。
GitHub上有大神总结的非常好的源码及博客,链接如下
GitHub:
博客:http://blog.topspeedsnail.com/archives/10858
本文需要的依赖:
- python3.5
- PIL
- libsvm
破解验证码的基本流程:
- 准备原始图片素材
- 图片预处理
- 图片字符切割
- 图片尺寸归一化
- 图片字符标记
- 字符图片特征提取
- 生成特征和标记对应的训练数据集
- 训练特征标记数据生成识别模型
- 使用识别模型预测新的未知图片集
- 达到根据“图片”就能返回识别正确的字符集的目标
正文
第一步:准备素材
验证码图片如下:
真正的破解程序需要准备大量的素材,然后在进行大量的训练后才可达到相对高的识别度
def downloads_pic(**kwargs): pic_name = kwargs.get('pic_name', None) url = 'http://xxxx/rand_code_captcha/' res = requests.get(url, stream=True) with open(pic_path + pic_name+'.bmp', 'wb') as f: for chunk in res.iter_content(chunk_size=1024): if chunk: # filter out keep-alive new chunks f.write(chunk) f.flush() f.close() #循环执行N次,即可保存N张验证素材了。