记录一下那天晚上的排查过程。Windows 上装了 tesseract 5.3.3,命令行识别英文正常,加 -l chi_sim 就报 Failed loading language 'chi_sim' 和 Tesseract couldn't load any languages。pytesseract 0.3.13 调用的也是同一个 exe,环境变量 TESSDATA_PREFIX 之前被同事改成别的目录了。

刚开始盯着「语言包与主程序大版本不一致,加载被拒」,折腾了半个多小时,排掉了。

真正麻烦的地方在于,几个原因的现象几乎一样。安装时没勾中文语言包,tessdata 目录里没有对应文件。少数情况下是TESSDATA_PREFIX 指向了另一个版本的目录。

还有一种情况,打包成服务后工作目录变了,相对路径找不到数据。

先列出当前可用的语言

tesseract --list-langs

然后确认 tessdata 目录位置与其中的文件

python -c "import os;print(os.environ.get('TESSDATA_PREFIX'));print(os.listdir(os.environ.get('TESSDATA_PREFIX','.')))"

接着把 chi_sim.traineddata 放到主程序同级的 tessdata 下

Copy-Item .\chi_sim.traineddata 'C:\Program Files\Tesseract-OCR\tessdata\'

末了用指定语言跑一张图验证识别结果

tesseract invoice.png stdout -l chi_sim --psm 6

怎么算真的好了,看的是同一批现象。--list-langs 里出现 chi_sim,识别结果不再是空字符串,中文标点和数字都能正常输出。

补一句。语言包要匹配主程序的 traineddata 格式版本,5.x 的包丢进 4.x 目录会加载失败而不是提示缺文件。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189