由于模拟登陆的需要,需要做验证码识别
基本原理
简单验证码识别主要原理还是 建立模型 > 去噪点 > 二值化 > 对比
如果是复杂一点的验证码则另论
下面简单介绍简单验证码的识别
大致思路
- 先打开原始图片

1 | import Image |
- 图片灰度处理
1 | im = im.convert('L') |
灰度处理后的效果

- 根据阀值(threshold)生成表table再根据table对图片二值化处理
1 | threshold = 140 |
二值化处理后的效果

- 将二值化后的图片转为字符串
1 | im_data = ''.join(str(x) for x in list(im.getdata())) |
这时候就会得到图片对应的字符串,将字符串与数据库进行比较,就可以了(当然这里的验证码分割后会更好处理)
完整的验证码识别代码
- 定义图片的一些基本信息(图片的一些基本信息,识别过程中也可以随时调整)
1 | #验证码图片数量 |
- 获取验证码图片
1 | import requests |
- 验证码图片分割,分割为单个字符一个图片
1 | import Image |
分割后部分图片效果

图片手动选择
- 这一步我处理的很蛋痛
- 这一步的目的就是用后面的代码生成数据库
- 操作方法:手动选择较好的图片并将图片

- 灰度处理后二值化,然后统计,生成字符数据库
1 | import os |
- 正常情况下,每个字符对应的值就存放在keys里面了,可以输出看看
1 | import json |
输出的结果如下:
1 | { |
现在数据库也有了,那么可以进入识别阶段了
- 验证码识别
1 | import difflib |
