- 随机获取了知网登录界面的三个图片验证码,测试 tesserocr 识别验证码的准确度
- 编写代码,先测试pic1
import tesserocr # 导入tesserocr模块
from PIL import Image # 导入图像处理模块
img = Image.open('pic1.png')
code_result = tesserocr.image_to_text(img)
print('识别结果:', code_result)
- pic1识别结果:PEHK.
- 由于验证码图片中带有很多干扰线条,导致识别结果不准确(后面多一个点).
- 接下来,进行图片灰度测试看看能不能解决问题
import tesserocr # 导入tesserocr模块
from PIL import Image # 导入图像处理模块
img = Image.open('pic1.png')
lim = img.convert('L') # 图片灰度化
img.show() # 打印图片
code_result = tesserocr.image_to_text(lim)
print('识别结果:', code_result)
- 测试结果:PEHK. 还是有个点
- 继续进行图片二值化
import tesserocr # 导入tesserocr模块
from PIL import Image # 导入图像处理模块
img = Image.open('pic1.png')
width = img.size[0]
lim = img.convert('L') # 图片灰度化
# img.show() # 打印图片
threshold = 155 # 设置阈值
data = [] # 定义一个空列表,接收二值化数据
for i in range(0, 256):
if i < threshold:
data.append(0)
else:
data.append(1)
bim = lim.point(data,'1') # 图片二值化
bim.show() # 打印二值化后的图片
code_result = tesserocr.image_to_text(bim)
print('识别结果:', code_result)
- 二值化结果:成功识别到验证码 【PEHK】
- 经过测试,pic2 以及 pic3 在二值化后都可以识别出来,如果二值化后还无法精确识别,则需要调整二值化阈值(threshold = 155)。关于图像二值化,参考
-遇到的【问题1】:tessdata路径报错
-
解决: tessdata的路径出错,找到tesseract安装路径,把tessdata文件夹复制一份到anaconda路径下面,例如:C:\ProgramData\Anaconda3\tessdata
-
遇到的【问题2】:安装tesserocr模块失败
-
解决:参考我的另一篇博客(https://editor.csdn.net/md/?articleId=123265184)