🐍

【pyinstaller】tesseract-ocrを同封して、1つのexeファイルを作成する方法

2024/03/01に公開

概要

tesseractで文字認識するpythonプログラムを1つのexeファイル化する際につまづいたので、
その解決方法について紹介します。

先に結論!

pyinstaller実行後に作成されるspecファイルに、下記記述を追加します。
specファイルで再度pyinstaller実行すれば、Tesseractを含んだexeファイルが作成できます。

main.spec
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ファイルを変更したのですが、うまくいきませんでした。

main.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が格納されているフォルダのパスを記入するのが正解でした。

main.spec
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