Python分类模型之验证码识别
下载验证码
首先,我们从目标网站下载足够多数量的验证码,以用来制作训练集,并通过训练集生成模型。这里以深圳信用网为例,下载500张验证码。
def download_image():
"""download captcha image"""
url = 'http://www.szcredit.org.cn/web/WebPages/Member/CheckCode.aspx'
headers = {
'user-agent': ("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) "
"AppleWebKit/536.3 (KHTML, like Gecko) "
"Chrome/19.0.1063.0 Safari/536.3")}
for i in range(0, 500):
image = Img.download_image(url=url, headers=headers)
with open('source_image/%s.png' % str(i), 'wb') as f:
f.write(image)
f.close()
图像处理
图像处理是验证码识别过程中最复杂,最难的一点,通常需要自己琢磨一些算法逻辑,来对验证码进行切割处理。
二值化原始图
在图像处理之前,我们首先对所有的原始验证码图片进行二值化操作。
# -*- coding:utf-8 -*-
# python 3.6
from os import listdir
from PIL import Image
import Img # 自定义的包
def two_value():
"""将训练集所有原始图进行二值化"""
file_list = listdir('source_image/')
for each in file_list:
image = Image.open('source_image/%s' % each)
image = Img.twoValueImage(image, 200)
image.save('two_value_image/%s' % each)
if __name__ == '__main__':
two_value()
声明图像类
其次需要进行图片切割,但在切割之前,我们先定义一个验证码的类,图像处理的过程都是通过这个类的方法来实现。
# -*- coding:utf-8 -*-
# python 3.6
from os import listdir
from PIL import Image
import Img # 自定义的包
class SZ_Captcha:
"""captcha of sz_credit.org"""
def __init__(self, image):
"""初始化验证码,声明下列属性
:param image: PIL Image object
"""
self.image = im