记录一下那天晚上的排查过程。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 目录会加载失败而不是提示缺文件。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
