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

使用Python提取验证码图像文本遇问题,寻求技术建议

验证码OCR识别问题解决办法

第一张图是清晰的浅色背景深色文本("ALZ"),Tesseract默认配置就能正常识别;第二张是带蓝色干扰线的验证码("5X2W"),这类带干扰的图像需要先做预处理,才能让OCR工具提取到文本。

核心方案:图像预处理+OCR参数优化

通过预处理去除干扰、增强文本对比度,再针对性配置Tesseract的识别参数,具体代码实现如下:

from PIL import Image
from pytesseract import pytesseract
import cv2
import numpy as np

path_to_tesseract = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
pytesseract.tesseract_cmd = path_to_tesseract

# 替换为第二张验证码的本地路径
path_to_image = 'h5eJp.png'

# 用OpenCV完成图像预处理
img = cv2.imread(path_to_image)
# 转为灰度图,减少颜色干扰
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 自适应二值化,精准分离文本与背景
binary_img = cv2.adaptiveThreshold(
    gray_img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2
)
# 形态学开运算,去除细干扰线
kernel = np.ones((1, 3), np.uint8)
cleaned_img = cv2.morphologyEx(binary_img, cv2.MORPH_OPEN, kernel, iterations=1)

# 转换为PIL格式供Tesseract识别
pil_img = Image.fromarray(cleaned_img)

# 配置识别参数:指定单块文本+限定字符集
text = pytesseract.image_to_string(
    pil_img,
    config='--psm 8 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
)

print("识别结果:", text.strip())

关键参数说明

  • --psm 8:告诉Tesseract识别单个连续文本块,适配验证码的排版特点
  • tessedit_char_whitelist:限定只识别大写字母和数字,过滤无关字符,提升识别准确率
  • 预处理环节:灰度化简化图像信息,自适应二值化应对不均匀背景,开运算去除细干扰线

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:01:07