You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

验证码图像预处理后pytesseract仍无法识别问题求助

解决验证码识别为空的问题

从你的预处理流程和转换后的图像特征(白字黑底)来看,核心问题出在预处理过度导致字符细节丢失,以及图像颜色模式与Tesseract默认识别逻辑不匹配,下面给出针对性优化方案:

1. 简化并优化预处理流程

你当前的多次锐化、最大值滤波会造成字符边缘过度膨胀、细节糊化,反而干扰识别。建议聚焦于去噪、强化对比度:

from PIL import Image, ImageOps, ImageFilter
from io import BytesIO

# 读取图像
img = Image.open(BytesIO(response.content))
# 转灰度图
img = ImageOps.grayscale(img)
# 中值滤波去除噪点(适度即可,避免后续过度处理)
img = img.filter(ImageFilter.MedianFilter(size=3))
# 反转颜色:Tesseract默认更擅长识别黑字白底,修正颜色模式
img = ImageOps.invert(img)
# 固定阈值二值化(降低阈值,避免过滤掉浅色字符)
img = img.point(lambda x: 255 if x > 127 else 0, '1')

2. 调整Tesseract识别参数

--psm 6假设图像是均匀文本块,不适合验证码这类零散字符场景,换用更适配的模式并补充字符识别规则:

import pytesseract

result = pytesseract.image_to_string(
    img,
    config='--psm 7 --oem 3 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 -c textord_min_xheight=8'
)
print(result.strip())
  • --psm 7:将图像视为单一文本行,适配验证码的字符排列
  • textord_min_xheight=8:强制识别最小字符高度,避免过滤掉细小的验证码字符
  • 保留字符白名单,确保只识别目标范围内的字符

3. 额外验证与修复建议

  • 保存处理后的图像到本地,确认字符清晰无糊化:img.save('processed_captcha.png')
  • 如果字符仍有粘连,可添加轻度形态学腐蚀修复边缘:
from PIL import ImageMath

# 轻度腐蚀优化字符边缘
img = ImageMath.eval('convert(a & b & c, "1")',
                     a=img,
                     b=img.crop((1,0,img.width,img.height)),
                     c=img.crop((0,1,img.width,img.height)))

内容的提问来源于stack exchange,提问作者Jxtin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 07:32:18