使用tesserocr二值化识别知网登录验证码

  • 随机获取了知网登录界面的三个图片验证码,测试 tesserocr 识别验证码的准确度

使用tesserocr二值化识别知网登录验证码_第1张图片

  • 编写代码,先测试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路径报错
使用tesserocr二值化识别知网登录验证码_第2张图片

  • 解决: tessdata的路径出错,找到tesseract安装路径,把tessdata文件夹复制一份到anaconda路径下面,例如:C:\ProgramData\Anaconda3\tessdata

-遇到的【问题2】:安装tesserocr模块失败

  • 解决:参考我的另一篇博客(https://editor.csdn.net/md/?articleId=123265184)

你可能感兴趣的:(python,图像处理)