【pyinstaller】tesseract-ocrを同封して、1つのexeファイルを作成する方法
概要
tesseractで文字認識するpythonプログラムを1つのexeファイル化する際につまづいたので、
その解決方法について紹介します。
先に結論!
pyinstaller実行後に作成されるspecファイルに、下記記述を追加します。
specファイルで再度pyinstaller実行すれば、Tesseractを含んだexeファイルが作成できます。
binaries=[(r'C:\Program Files\Tesseract-OCR', r'tesseract')],
datas=[(r'C:\Program Files\Tesseract-OCR\tessdata', r'data/tessdata')],
C:\Program Files\Tesseract-OCR
はtesseract.exeが格納されているフォルダのパスです。
ご自身の環境に合わせて、パスを変更してください。
作ろうとしていたもの
数字の書かれた画像ファイルから、数字と座標を認識するプログラムを作成。
実行環境
OS:Windows 11 Home
VScodeバージョン: 1.82.2
pythonバージョン:3.10
pyinstallerバージョン:5.13.2
pyocrバージョン:0.8.3
tesseract-ocrバージョン:5.3.1
トラブル発生時の状況
試しにテスト用のプログラムを作成し、
pyinstallerでexeファイルを作成しました。
プログラムの内容は画像から文字を認識し、文字と座標を出力するものです。
プログラムのファイル名はmain.py
です。
1つのexeファイルにまとめるため、--onefile
を使用します。
pyinstaller main.py --onefile --clean
pyinstallerを実行した結果、exeファイルは作成できたのですが。実行すると下記内容が出力さました。
Running from container, but no tessdata found !
tesseractが同封されていないため、出ているメッセージのようです。
調査
Running from container, but no tessdata found
でgoogle検索。
検索で見つけた記事を参考に下記のようにspecファイルを変更したのですが、うまくいきませんでした。
binaries=[(r'C:\Program Files\Tesseract-OCR\tesseract.exe', 'tesseract')],
datas=[(r'C:\Program Files\Tesseract-OCR\tessdata\jpn.traineddata', 'data/tessdata'), (r'C:\Program Files\Tesseract-OCR\tessdata\jpn_vert.traineddata', 'data/tessdata')],
解決策
binaries=[('{tesseract.exe のパス}', 'tesseract')],
datas=[('{*.traineddata のパス}', 'data/tessdata')],
{tesseract.exe のパス}
にexeファイル自体のパス(C:\Program Files\Tesseract-OCR\tesseract.exe)を入れるものだと勘違いしていました。
下記のように、tesseract.exeが格納されているフォルダのパスを記入するのが正解でした。
binaries=[(r'C:\Program Files\Tesseract-OCR', r'tesseract')],
datas=[(r'C:\Program Files\Tesseract-OCR\tessdata', r'data/tessdata')],
まとめ
pyinstallerでtesseractを同封するときは、
specファイルにtesseract.exeが格納されているフォルダのパスを記入することが重要!
最後まで読んでいただき、ありがとうございました。
コメントいただけるとうれしいです。
ブログ:https://pythonsoba.tech/
Qiita:https://qiita.com/yk5322
Zen:https://zenn.dev/yk5322
Discussion