如何在Heroku服务器的Pytesseract中使用自定义.traineddata文件
Heroku环境Pytesseract使用自定义训练模型解决方案
前置准备
先将你持有的.traineddata文件存入Django项目根目录下新建的tessdata文件夹中,如有需要可同时将官方eng.traineddata也放入该目录,将整个文件夹提交到Git仓库。
步骤1:配置Heroku运行依赖
- 进入Heroku项目后台的「Settings」页,找到「Buildpacks」板块,按顺序添加两个buildpack:
- Heroku官方Apt buildpack
- Heroku官方Python buildpack
- 在项目根目录新建
Aptfile文件,写入以下内容,部署时Heroku会自动安装Tesseract运行环境:tesseract-ocr libtesseract-dev
步骤2:配置TESSDATA_PREFIX参数
有两种配置方式,建议同时配置避免不生效:
- 后台环境变量配置:在Heroku项目后台「Settings」的「Config Vars」板块新增变量:
- 变量名:
TESSDATA_PREFIX - 变量值:
/app/tessdata/
(Heroku部署后项目代码默认存放在/app目录下,对应你仓库里的tessdata文件夹路径就是/app/tessdata/)
- 变量名:
- 代码动态配置:在调用Pytesseract的代码块前增加路径配置,兼容本地和线上环境:
import os import pytesseract # 指定Heroku上Tesseract的执行文件路径 pytesseract.pytesseract.tesseract_cmd = "/usr/bin/tesseract" # 动态设置TESSDATA_PREFIX,路径根据你的tessdata文件夹位置调整即可 os.environ["TESSDATA_PREFIX"] = os.path.join( os.path.dirname(os.path.abspath(__file__)), "../tessdata" )
步骤3:调用自定义模型
调用image_to_string时,lang参数填写你自定义训练文件的前缀即可(训练文件名为xxx.traineddata,则lang参数为xxx):
# 仅使用自定义字体模型 text = pytesseract.image_to_string(待识别图片对象, lang="你的自定义模型前缀") # 同时使用自定义模型和官方英文模型 text = pytesseract.image_to_string(待识别图片对象, lang="你的自定义模型前缀+eng")
问题排查
如果运行提示找不到训练数据,可打印os.listdir(os.environ.get("TESSDATA_PREFIX"))检查目标路径下是否存在你的.traineddata文件,确认文件名拼写、大小写完全匹配lang参数。
内容的提问来源于stack exchange,提问作者Jan van Dongen
相关产品推荐
相关产品推荐

