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

求助:使用pytesseract提取图像字符失败,仅能识别最多2个字符

解决小尺寸验证码OCR提取问题

针对你遇到的小尺寸字符OCR识别不准的问题,核心原因是原图像未做预处理,字符尺寸过小且对比度不足,导致Tesseract无法准确识别。以下是优化后的解决方案:

关键优化点

  • 增加图像预处理:转为灰度图并二值化,强化字符与背景的对比度
  • 放大字符尺寸:小尺寸字符是Tesseract识别的短板,放大后能显著提升准确率
  • 微调Tesseract配置:保持单字符识别模式,同时确保字符白名单覆盖目标范围

优化后代码

import cv2
import pytesseract

# 读取图像
image = cv2.imread('./images/screenshot_2023_11_16_15_41_24.png')

# 图像预处理:转灰度→二值化→放大
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 二值化(自适应阈值,适配不同光照)
_, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
# 放大字符(放大4倍,用INTER_CUBIC保证清晰度)
scaled_char = cv2.resize(thresh, None, fx=4, fy=4, interpolation=cv2.INTER_CUBIC)

# 分割字符(原图像36x9,4个字符各占9像素宽度)
char_width = scaled_char.shape[1] // 4
char_height = scaled_char.shape[0]
characters = []
for i in range(4):
    start = i * char_width
    end = (i + 1) * char_width
    char = scaled_char[0:char_height, start:end]
    characters.append(char)

# 执行OCR识别
extracted_text = ""
for char in characters:
    # 保持单字符识别模式,配置白名单
    char_text = pytesseract.image_to_string(
        char, 
        config='--psm 10 --oem 3 -c char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
    )
    extracted_text += char_text.strip()

print("Extracted Text:", extracted_text)

代码说明

  1. 预处理步骤:二值化反转后,字符变为白色、背景为黑色,完全符合Tesseract的识别偏好;放大操作让小字符的细节更清晰,避免Tesseract误判。
  2. 字符分割:基于放大后的图像重新计算分割位置,保证每个字符区域准确。
  3. OCR配置:--psm 10指定单字符识别模式,配合白名单过滤无关字符,进一步提升识别精度。

运行上述代码后,即可准确提取出目标字符H9FA。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 01:45:09