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

使用Python Tesseract OCR提取图片数字失败,求优化方案

提升Tesseract OCR数字识别准确率的方案

针对你遇到的数字识别为空或错误的问题,结合图片特征和现有代码,可从预处理优化、Tesseract参数调整、关键检查点三个方向改进:

一、优化图像预处理流程

现有预处理步骤存在冗余,且参数可能不匹配图片特征,可简化并调整:

方案1:基于PIL的精简预处理

from PIL import Image, ImageEnhance, ImageOps
import pytesseract

# 加载并裁剪图片(确认bbox坐标完全覆盖数字,无边缘裁切)
screenshot = Image.open("screenshot2.png")
bbox = (970, 640, 1045, 675)
cropped_image = screenshot.crop(bbox)

# 放大数字(关键:小尺寸数字放大后识别率显著提升)
cropped_image = cropped_image.resize((cropped_image.width * 3, cropped_image.height * 3), Image.LANCZOS)

# 增强对比度+转灰度
enhancer = ImageEnhance.Contrast(cropped_image)
enhanced_image = enhancer.enhance(3.0)
gray_image = enhanced_image.convert("L")

# 阈值处理:确保数字为黑色、背景为白色(根据实际图片调整阈值)
# 若数字是深色背景浅色字,反转后再阈值;反之直接阈值
thresholded_image = gray_image.point(lambda p: 0 if p < 130 else 255)

# 保存处理后的图片用于验证
thresholded_image.save("processed_image.png")

方案2:用OpenCV做专业预处理(推荐)

OpenCV的自适应阈值和形态学操作能更好应对光照不均、噪声问题:

import cv2
import pytesseract

# 加载并裁剪图片(OpenCV坐标格式:[y起始:y结束, x起始:x结束])
img = cv2.imread("screenshot2.png")
cropped_img = img[640:675, 970:1045]

# 放大数字
cropped_img = cv2.resize(cropped_img, None, fx=3, fy=3, interpolation=cv2.INTER_LANCZOS4)

# 转灰度+自适应阈值处理
gray = cv2.cvtColor(cropped_img, cv2.COLOR_BGR2GRAY)
thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)

# 形态学闭运算去除细小噪声
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2, 2))
processed_img = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)

cv2.imwrite("processed_opencv.png", processed_img)

二、调整Tesseract识别参数

现有--psm 13不适合少量数字的识别场景,改用以下配置:

# 针对单行数字的最优配置
text = pytesseract.image_to_string(processed_img, config="--psm 7 --oem 3 -c tessedit_char_whitelist=0123456789")

# 提取数字
numbers = [int(num) for num in text.strip() if num.isdigit()]
print(numbers)

参数说明:

  • --psm 7:将图像视为单行文本,匹配两个数字的布局
  • --oem 3:混合使用传统引擎和LSTM引擎,兼顾兼容性和准确率
  • tessedit_char_whitelist=0123456789:强制只识别数字,过滤干扰字符

三、关键检查点

  1. 验证裁剪区域:打开裁剪后的图片,确认数字完整无裁切,若坐标不准确,调整bbox数值
  2. 更新Tesseract版本:旧版本对特殊字体支持差,确保安装最新版(v5.x以上)
  3. 特殊字体处理:若数字是艺术字体/游戏字体,可收集该字体的数字样本,用Tesseract训练工具生成自定义语言包,大幅提升识别率

内容的提问来源于stack exchange,提问作者felix st-aubin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:55:55