初めに
ReplitというオンラインIDEでdiscord.pyを使用してbotを作成していました。Tesseractを使いたくなり、導入しようとしましたが、Replitではsudoを実行する権限がないため、一般的な方法では導入することができませんでした。
追記:記事を書いている途中で検証していたら普通にできました...悲しい
もしこっちが出来なかったら是非一番下にある方法を試してみてください。
pip install tesseract
pip install pytesseract
終わったら、バージョンを確認して成功しているか確かめます。
tesseract --version
このとき、選択肢が2つ出てきますが上の方のtesseract.outを選択してエンターキーを押します。
また、ほかの記事にあった日本語データ置き換えはSHA256で確かめたところ標準のものと同じだったので必要なさそうです。
pythonの書き方
せめてこの項だけでも見ていってください...
#unq_nameはファイルに対する固有の名前
async def ocr(message, unq_name):
try:
await message.channel.send("処理中...")
file_path = f"{unq_name}_ocr_raw.png"
img = Image.open(file_path)
img = img.convert("L")
img = ImageEnhance.Contrast(img)
img = img.enhance(2.0)
custom_config = r"--psm 6"
ocr_result = pytesseract.image_to_string(img, lang="jpn", config=custom_config)
ocr_result = ocr_result.replace(" ", "")
await message.channel.send(ocr_result)
except Exception as e:
print(f"Error: {e}")
await message.channel.send("エラー")
return None
一応ソースコードからビルドする方法も残しておきます。
ソースコードからビルドする古い方法
例えばsudoでコマンドを実行すると以下のエラーが出ます。
sudo: The "no new privileges" flag is set, which prevents sudo from running as root.
sudo: If sudo is running in a container, you may need to adjust the container configuration to disable the flag.
sudoなしで実行しようとしてもできません。
E: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?
そこで、今回はソースコードからビルドする手法を用いることにしました。今回導入するにあたってインターネットで調べても古いものや役に立たない情報ばかりで、解決法が見つからなかったので、ここに備忘録として残しておきます。
環境
2023年9月13日時点
項目 | バージョン |
---|---|
OS | Ubuntu20.04.2 LTS |
Python | 3.10.11 |
Tesseract | 5.3.2 |
pytesseract | 0.3.10 |
Leptonica | 1.84.0 |
バージョンによっては導入できない可能性があります。
Leptonica
Tesseractを導入するのにのちのち必要となるので、先に準備しておきます。
ここで、今後使用するファイルと、メインプロジェクトが混乱しないよう、ディレクトリを分けておきます。私は以下のような構成にしました。(説明ではこの構造を用います)
- カレントディレクトリ(デフォルトでは/home/runner/{project name})
- Packages
- ここにいろいろ入れていく
- メインプロジェクトもろもろ
- main.py
- ...
- Packages
今後のコマンドはすべてReplitの標準Shell(bash)で行うものとします。
また、コマンドは一括で実行することもできますが、エラーのとき分かりにくいので念のため一行ずつ実行してください。
初めに、作成したディレクトリに移動してから、Leptonicaをgithubよりクローンします。
cd Packages
git clone https://github.com/DanBloomberg/leptonica.git
ここからはbuild用のディレクトリで作業していきます。
cd leptonica
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=$HOME/local ..
ここでlocalに指定しないと後でmake installするとき権限ではじかれます。
このコマンドを実行すると、初回のみ以下のようになります。
~/.../Packages/leptonica$ cmake -DCMAKE_INSTALL_PREFIX=$HOME/local ..
cmake: command not installed. Multiple versions of this command were found in Nix.
Select one to run (or press Ctrl-C to cancel):
>
cmake.out
cmakeCurses.out
cmakeWithGui.out
cmakeMinimal.out
cmake_2_8.out
このように表示されるので、cmake.outが選択されている状態でエンターキーを押してください。すると、cmakeが開始します。
以下の表示が出ればcmakeは完了です。
-- Build files have been written to: /home/runner/{project name}/Packages/leptonica/build
ここで注意するのが、Detected change in environment, reloading shell...
と表示されてしまいプロジェクトのディレクトリに戻ってしまいます。なので、buildディレクトリに戻ってください。
cd /home/runner/{project name}/Packages/leptonica/build/
次にmakeをします。100%になるまで待機してください。
Replitの仕様上、ブラウザを開いていないとセッションが切れてしまうので気を付けてください。
make
以下の表示が出ればmakeは完了です。
[100%] Built target leptonica
makeが終わったら、make installをします。そんなに時間はかからないと思います。
make install
これにてTesseractを導入する下準備は終わりです。
Tesseract
ついに本命を導入していきます。まずはGitHubから最新のリリースを探し、ソースコードファイルのURLからファイルを取得します。そして、今はleptonica/build/にいるので、Packagesディレクトリに戻り、作業していきます。
cd ../../
wget https://github.com/tesseract-ocr/tesseract/archive/refs/tags/5.3.2.tar.gz
このコマンドを実行すると、初回のみ以下のようになります。
~/.../Packages/tesseract$ wget https://github.com/tesseract-ocr/tesseract/archive/refs/tags/5.3.2.tar.gz
wget: command not installed. Multiple versions of this command were found in Nix.
Select one to run (or press Ctrl-C to cancel):
>
wget.out
busybox.out
このように表示されるので、wget.outが選択されている状態でエンターキーを押してください。すると、wgetが開始します。
先ほどと同様にDetected change in environment, reloading shell...
と表示されるので、Packagesディレクトリに戻ってください。
cd /home/runner/{project name}/Packages/
次に、先ほどwgetしたファイルを解凍します。ファイル名のバージョンは自身のものに合わせて変えてください。
tar -xzvf 5.3.2.tar.gz
今回は自動でディレクトリが作成されるのでそこに移動します。
cd tesseract-5.3.2
先ほどと同様にbuild用のディレクトリで作業していきます。
mkdir build
cd build
cmake -DLeptonica_DIR=/home/runner/{project name}/Packages/leptonica/build ..
ここで先ほどインストールしたleptonicaのパスを指定しないとエラーになります。
以下の表示が出ればcmakeは完了です。
-- Build files have been written to: /home/runner/{project name}/Packages/tesseract-5.3.2/build
これでうまくいくはずですが、万が一失敗してしまった場合はbuildフォルダごと削除することでやり直すことができます。
cd ../
rm -rf build
mkdir build
cd build
次にmakeをします。100%になるまで待機してください。
この手順にとても時間がかかります。私の場合は100分かかりました。
make
先ほどと同様進捗が100%になればmakeは完了です。
次にmake installをします。
make install
ようやく導入完了です。お疲れ様でした。
以下のコマンドでバージョンが表示されたらインストール成功です。
tesseract --version