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

Python-Pytesseract提取图片文本不准确问题求助

解决Pytesseract图片文本提取错误的优化方案

嘿,我注意到你在用Pytesseract提取图片文本时碰到了识别错误的问题,结合你给出的代码片段,我整理了几个实用的优化方向,帮你提升识别准确率:

一、强化图像预处理(OCR准确率的核心前提)

你的现有预处理步骤比较基础,OCR识别的准确率极大依赖输入图像的清晰度和对比度,建议补充以下操作:

  • 降噪处理:针对图片中的噪点,用高斯模糊或中值滤波弱化干扰
    # 高斯模糊(适合普遍噪点)
    img = cv2.GaussianBlur(img, (3, 3), 0)
    # 中值滤波(适合椒盐噪点)
    # img = cv2.medianBlur(img, 3)
    
  • 二值化处理:把灰度图转成黑白二值图,让文字和背景边界更清晰
    # 自适应阈值(推荐,适配光照不均的图片)
    img = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
    # 普通阈值(适合光照均匀的图片)
    # _, img = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
    
  • 调整膨胀腐蚀的核大小:你当前用的(1,1)核几乎没有效果,可根据文字粗细调整为(2,2)或(3,3)
    kernel = np.ones((2, 2), np.uint8)
    img = cv2.dilate(img, kernel, iterations=1)
    img = cv2.erode(img, kernel, iterations=1)
    

二、优化Pytesseract识别配置

默认参数不一定适配你的场景,可针对性调整:

  • 指定识别语言:如果是中文或其他非英文文本,必须添加语言参数
    # 识别简体中文
    text = pytesseract.image_to_string(img, lang='chi_sim')
    
  • 设置页面分割模式(PSM):根据图片文字布局选择合适模式,比如整块文本用--psm 6,单行文字用--psm 7
    text = pytesseract.image_to_string(img, config='--psm 6')
    
  • 限定字符集:如果图片只有特定字符(比如数字、大写字母),可缩小识别范围减少错误
    text = pytesseract.image_to_string(img, config='--psm 6 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
    

三、补全并优化你的完整函数

这里给你整理了一个更完善的版本,包含错误处理和全流程优化:

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

# Path of working folder on Disk
src_path = "<dir path>"

def get_string(img_path):
    # 读取图片并做异常判断
    img = cv2.imread(img_path)
    if img is None:
        raise ValueError(f"无法读取目标图片:{img_path}")
    
    # 转换为灰度图
    img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    
    # 预处理流程:降噪→二值化→膨胀腐蚀
    img = cv2.GaussianBlur(img, (3, 3), 0)
    img = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
    kernel = np.ones((2, 2), np.uint8)
    img = cv2.dilate(img, kernel, iterations=1)
    img = cv2.erode(img, kernel, iterations=1)
    
    # 提取文本并去除首尾空白
    # 如需识别中文,添加lang='chi_sim'参数
    text = pytesseract.image_to_string(img, config='--psm 6')
    return text.strip()

# 测试调用示例
try:
    result = get_string(f"{src_path}/your_image.jpg")
    print("提取到的文本:")
    print(result)
except Exception as e:
    print(f"执行出错:{e}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:25:16