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

PyTesseract识别结果不佳,如何优化图像文字提取效果?

提升PyTesseract图像文字识别效果的优化方案

一、调整预处理顺序与增强预处理步骤

原代码的预处理顺序存在逻辑问题(阈值化后降噪效果会大打折扣),同时可新增膨胀/腐蚀操作强化文字轮廓,修改后的代码如下:

import cv2
import pytesseract
pytesseract.pytesseract.tesseract_cmd = r"C:\tesseract\Tesseract-OCR\tesseract.exe"

def ocr_core(img):
    return pytesseract.image_to_string(img)

def get_grayscale(img):
    return cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

def remove_noise(img):
    # 根据图像噪声程度选择3/5大小的卷积核,小核更适合精细文字
    return cv2.medianBlur(img,3)

def threshold(img):
    return cv2.threshold(img,0,255,cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]

# 新增膨胀操作:强化文字边缘,填补文字内部缝隙
def dilate(img):
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2,2))
    return cv2.dilate(img, kernel, iterations=1)

# 新增腐蚀操作:去除膨胀后残留的微小噪点
def erode(img):
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2,2))
    return cv2.erode(img, kernel, iterations=1)

img = cv2.imread(r"/path/to/filename.jpg")
img = get_grayscale(img)
img = remove_noise(img)  # 先降噪再阈值化,避免噪声被阈值固化
img = threshold(img)
img = dilate(img)
img = erode(img)

print(ocr_core(img))

二、优化Tesseract识别参数

默认参数适配性差,可通过指定语言、页面分割模式(psm)和引擎模式(oem)提升精准度:

def ocr_core(img):
    # custom_config参数说明:
    # --oem 3:使用混合引擎(LSTM+传统引擎)
    # --psm 6:假设图像为单一均匀文本块,适合多数场景
    # -l chi_sim+eng:同时识别中文+英文,需提前安装对应语言包
    custom_config = r'--oem 3 --psm 6 -l chi_sim+eng'
    return pytesseract.image_to_string(img, config=custom_config)

三、添加图像倾斜校正

倾斜的图像会大幅降低识别率,可加入自动校正逻辑:

import numpy as np

def deskew(img):
    # 获取文字像素坐标计算倾斜角度
    coords = np.column_stack(np.where(img > 0))
    angle = cv2.minAreaRect(coords)[-1]
    # 校正角度计算逻辑
    if angle < -45:
        angle = -(90 + angle)
    else:
        angle = -angle
    # 执行旋转校正
    (h, w) = img.shape[:2]
    center = (w // 2, h // 2)
    M = cv2.getRotationMatrix2D(center, angle, 1.0)
    rotated = cv2.warpAffine(img, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)
    return rotated

# 使用时在预处理流程中添加:
img = deskew(img)

四、其他实用优化建议

  • 提升图像分辨率:若原图过小,可通过cv2.resize(img, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC)放大后再处理
  • 裁剪目标区域:手动或自动裁剪出仅包含文字的区域,减少无关背景干扰
  • 更新依赖版本:安装最新版Tesseract和PyTesseract,修复旧版本的识别bug

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 02:45:11