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

PyTesseract识别紧邻字符出错,求正确识别姓名的解决方法

解决PyTesseract识别姓名时的字符误判问题

针对你遇到的FORREST C. BLODGETT被识别为FORREST C. BLopGetTrT的问题,结合字符间距、大小写尺寸差异的推测,可从图像预处理和Tesseract参数优化两方面入手修复:

一、优化图像预处理

  1. 形态学操作修正字符边缘
    二值化后通过形态学闭运算填补字符间隙,同时强化字符轮廓,避免因间距过近导致的字符粘连或误判:
from pytesseract import image_to_string
import pytesseract
import cv2
import numpy as np

pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

img = cv2.imread("textimg.png")
(h, w) = img.shape[:2]
img = cv2.resize(img, (w*20, h*20))
gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
thr = cv2.threshold(gry, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
# 添加形态学闭运算优化字符轮廓
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2, 2))
thr = cv2.morphologyEx(thr, cv2.MORPH_CLOSE, kernel)
txt = image_to_string(thr, lang="eng")
print(txt)
  1. 伽马校正增强对比度
    通过调整图像伽马值,拉大字符与背景的亮度差,弱化大小写尺寸差异带来的识别干扰:
# 在灰度转换后添加伽马校正
gamma = 1.5
invGamma = 1.0 / gamma
table = np.array([((i / 255.0) ** invGamma) * 255 for i in np.arange(0, 256)]).astype("uint8")
gry = cv2.LUT(gry, table)

二、调整Tesseract识别参数

  1. 指定字符白名单
    姓名仅包含大写字母、空格和英文点,限制识别范围可直接过滤错误的小写字符:
# 添加config参数指定白名单和文本块模式
txt = image_to_string(thr, lang="eng", config='--psm 6 -c tessedit_char_whitelist="ABCDEFGHIJKLMNOPQRSTUVWXYZ ."')

其中--psm 6表示将输入视为单一均匀文本块,适合结构化的姓名列表场景。

  1. 单行识别模式(适用于每行一个姓名的场景)
    如果图片中每个姓名单独占一行,使用--psm 7强制单行识别,进一步提升精准度:
txt = image_to_string(thr, lang="eng", config='--psm 7 -c tessedit_char_whitelist="ABCDEFGHIJKLMNOPQRSTUVWXYZ ."')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 19:51:12