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

Tesseract无法正确识别文本、空白区域误识别该如何解决?

问题原因

你当前使用的--psm 7参数会将输入图像判定为单一行文本,Tesseract会扫描整幅裁剪后图像的所有区域,若裁剪范围包含多余空白区域,或是空白区域存在肉眼难以察觉的噪点,就会被误识别为额外字符。

解决方法

  1. 增加图像预处理环节
    裁剪后先对图像做灰度转换、二值化、去噪处理,消除空白区域的噪点干扰,同时增加字符白名单限制,避免无关字符被识别,修改后的代码如下:
import cv2
import numpy as np
from PIL import Image
import pytesseract

def get_text(image, coord):
    im = Image.open(image)
    image_cropped = crop_text(im, coord)
    # 图像预处理
    img_np = np.array(image_cropped)
    # 转灰度图
    gray = cv2.cvtColor(img_np, cv2.COLOR_RGB2GRAY)
    # 自适应二值化
    _, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
    # 形态学操作去除小噪点
    kernel = np.ones((2,2), np.uint8)
    cleaned_img = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel, iterations=1)
    # 识别配置:限定只识别大小写字母和空格,避免无关字符输出
    text = pytesseract.image_to_string(cleaned_img, lang='eng', config='--psm 7 --oem 3 -c tessedit_char_whitelist="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz "')
    # 去除首尾多余空白
    text = text.strip()
    print(text)
    return text
  1. 优化裁剪范围
    检查crop_text函数的裁剪逻辑,尽量缩小裁剪边界,仅保留包含文本的核心区域,避免纳入多余空白边框。
  2. 适配调整参数
    如果调整后仍有误识别,可尝试更换psm参数为--psm 8(将图像判定为单个单词),若目标文本包含数字、特殊符号,可将对应字符补充到字符白名单中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:12:02