验证码识别(分类问题)
-
首先利用PIL中的画布、画笔等工具制作出验证码图片
- 获取随机RGB格式的颜色值 (xxx,xxx,xxx)
- 获取验证码数字,该数字需要存储为label,该逻辑回归为有监督的学习
- 使用Image创建画布、ImageDraw创建画笔
note: 其中可以使用ImageFont实例化字体对象,但是需要将字体文件存储到虚拟环境的Script文件夹中
- 在绘制验证码时需要绘制噪点和斜线,来模拟生产环境中的验证码识别
-
验证码识别步骤
-
首先将RGB图片转化为灰度图,它的每个像素用8个bit表示,0表示黑,255表示白,其他数字表示不同的灰度
-
再将灰度图转化为二值图(返回的是一个数组,即每一个像素块的值)
def binarization(path): image = Image.open(path) img_gray = image.convert('L') # 转化为数组形式 img_gray = np.array(img_gray) height, width = img_gray.shape for x in range(width): for y in range(height): if img_gray[y, x] <= 220: img_gray[y, x] = 0 else: img_gray[y, x] = 1 # plt.imshow(img_gray, cmap='gray') # plt.show() return img_gray
- 对二值图进行降噪处理(主要是对周围点的判断,周围点很少则判断其为异常点,消除为白色)
# 降噪处理 def noiseReduction(img_gray, label): height, width = img_gray.shape for x in range(width): for y in range(height): # 该像素点旁边的黑点个数 black_point = 0 if img_gray[y, x] == 1: continue else: try: if img_gray[y, x + 1] == 0: black_point += 1
-