案件でHeroku上のサーバーでOCR(画像認識)を行うためにtesseractとそれをpythonから操作できるpytesseractを実装したのですが、ちょっとハマったのでメモしておきます。
実行環境
- python-3.10.8
- heroku-22
herokuへのログインとかプロジェクトのクローンとかデプロイとか基本的なことについて下記参照
【Python】Heroku+FlaskでサーバレスWebアプリをデプロイする
手順
apt buildpack を heroku に追加
まずAptコマンドを有効化するために以下のコマンドを実行します。
$ heroku buildpacks:add --index 1 https://github.com/heroku/heroku-buildpack-apt
実行した後にAptfileアプリと同じディレクトリに名前の付いたファイルを作成し、これらの行をそれに追加します(日本語/英語の場合)
<Aptfile>
tesseract-ocr
tesseract-ocr-eng
*libarchive13*
特に重要なのが「*libarchive13*」でこれがないと以下のようなエラーになります
<エラーメッセージ>
pytesseract.pytesseract.TesseractError: (127, ‘tesseract: error while loading shared libraries: libarchive.so.13: cannot open shared object file: No such
pytesseract.pytesseract.TesseractError: (127, ‘tesseract: error while loading shared libraries: libarchive.so.13: cannot open shared object file: No such file or directory’
tesseract-ocrのインストールされている場所を確認する
次にheroku configで変数TESSDATA_PREFIXをtessdataフォルダーのパスに設定します(自分の環境だと./.apt/usr/share/tesseract-ocr/4.00/tessdataでした)。
このパスはheroku loginを実行してコマンドラインからそのプロジェクトにheroku loginでログインした状態で、heroku run bashして実行し、シェルで以下のコマンドを実行することで確認できます
# herokuにログインする heroku login # heroku上のPCのコマンドラインにアクセスする $ heroku run bash # tessdataのPATHを調べる $ find -iname tessdata <実行結果> # ./.apt/usr/share/tesseract-ocr/4.00/tessdata
ここで確認したPATHを以下のコマンドで環境変数に設定します。
heroku config:set TESSDATA_PREFIX=./.apt/usr/share/tesseract-ocr/4.00/tessdata
これが正しく実行されているとブラウザからHEROKUにアクセスしプロジェクトの個別ページの「Settings」に以下のような変数が追加されています
この状態でherokuを再度でデプロイすると設定が反映されます。
そのほかの設定
requirements.txtに pytesseract があることを確認してください
自分の環境では以下のバージョンで動作することを確認しております。
<requirements.txt>
Flask==2.1.0
pytesseract==0.3.6~~~~
でもう一つ重要なのがpyファイル上で「pytesseract.pytesseract.tesseract_cmd=」の部分に別改めてPATHを指定する必要があります。ただここで指定するのはさっきとは違うPATHで自分の場合は「/app/.apt/usr/bin/tesseract」を指定することで動作しました
<main.py>
~~~~ pytesseract.pytesseract.tesseract_cmd = '/app/.apt/usr/bin/tesseract' image = Image.open(f'xxxxx.jpg') t = pytesseract.image_to_string(image) ~~~~
ちなみにここの「pytesseract.pytesseract.tesseract_cmd =」の部分で上で確認したPATHを指定すると自分は以下のようなエラーになりました
:[Errno 13] Permission denied: ‘/app/.apt/usr/share/tesseract-ocr/4.00/tessdata’ heroku
参照:https://stackoverflow.com/questions/74455213/unable-to-config-pytesseract-in-heroku
もしHerokuでのデプロイなどでご相談がある場合はMENTAにてご連絡いただけますと幸いです。
コメント