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

pytesseract未启用自定义user-words配置问题排查求助

我来帮你一步步排查这个问题,你遇到的场景很常见,咱们从配置、代码到词库逻辑逐一梳理:

1. 先确认你的bazaar配置文件是否正确加载

Tesseract对配置文件的格式和存放位置有严格要求,先检查这几点:

  • 配置文件位置:必须放在Tesseract安装目录的tessdata/configs下(对应你的路径就是C:\Program Files\Tesseract-OCR\tessdata\configs),否则Tesseract找不到它。
  • 配置格式:每个参数单独占一行,参数名和值用空格分隔(你写的load_system_dawg F、load_freq_dawg F、user_words_suffix user-words格式是对的,没问题)。
  • 词库文件名匹配:你设置的user_words_suffix user-words会让Tesseract加载[lang].user-words文件,你的语言是Latin,所以Latin.user-words放在tessdata目录下是正确的(Windows下文件名不区分大小写,但尽量保持和语言名一致)。
2. 修正pytesseract的config参数写法

你的代码里config='bazaar'是错误的!pytesseract的config参数需要传递Tesseract的完整命令行参数,指定配置文件必须加--config前缀,正确写法应该是:

import pytesseract
from PIL import Image

pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract'
imagen = Image.open("page-1.png")
# 重点:加上--config前缀
text = pytesseract.image_to_string(imagen, lang='Latin', config='--config bazaar')

之前的写法根本没让Tesseract加载你的配置文件,这是识别没改善的核心原因之一。

3. 确认自定义词库的生效逻辑

你关闭了系统词库和频率词库,理论上Tesseract会优先匹配你的自定义词,但有个前提:图像中的字符识别误差不能太大。比如你说的Monotributista被识别成Nfonotributista,第一个M直接被识别成N,这种情况Tesseract可能根本不会去匹配你的词库——因为字符置信度太低,它认为这是另一个词。

另外检查你的Latin.user-words文件格式:

  • 每个词汇单独占一行,不要加多余空格或换行,比如:
Monotributista
Monotributista,
4. 额外排查与优化建议
  • 用命令行测试配置是否生效:先绕开pytesseract,直接用Tesseract命令行验证,打开命令提示符运行:
tesseract page-1.png output --lang Latin --config bazaar

查看生成的output.txt,如果结果还是错的,说明问题出在配置/词库;如果命令行下正确,再回头排查pytesseract的参数。

  • 图像预处理是关键:如果图像模糊、倾斜、有噪点,再强的词库也救不了。可以尝试:
    from PIL import Image, ImageOps
    
    # 转灰度图+二值化,强化字符边缘
    imagen = imagen.convert('L')
    imagen = ImageOps.invert(imagen)
    imagen = imagen.point(lambda x: 0 if x < 128 else 255, '1')
    
  • 升级Tesseract版本:旧版本(比如4.x)对自定义词库的支持有bug,建议升级到最新的5.x版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:26:59