1
1

More than 1 year has passed since last update.

ReplitでTesseractを導入する、discord.pyに実装する【2023年】

Last updated at Posted at 2023-09-14

初めに

ReplitというオンラインIDEでdiscord.pyを使用してbotを作成していました。Tesseractを使いたくなり、導入しようとしましたが、Replitではsudoを実行する権限がないため、一般的な方法では導入することができませんでした。

追記:記事を書いている途中で検証していたら普通にできました...悲しい
もしこっちが出来なかったら是非一番下にある方法を試してみてください。

bash
pip install tesseract
pip install pytesseract

終わったら、バージョンを確認して成功しているか確かめます。

bash
tesseract --version

このとき、選択肢が2つ出てきますが上の方のtesseract.outを選択してエンターキーを押します。

また、ほかの記事にあった日本語データ置き換えはSHA256で確かめたところ標準のものと同じだったので必要なさそうです。

pythonの書き方

せめてこの項だけでも見ていってください...

main.py

#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
    • ...

今後のコマンドはすべてReplitの標準Shell(bash)で行うものとします。
また、コマンドは一括で実行することもできますが、エラーのとき分かりにくいので念のため一行ずつ実行してください。

初めに、作成したディレクトリに移動してから、Leptonicaをgithubよりクローンします。

bash
cd Packages
git clone https://github.com/DanBloomberg/leptonica.git

ここからはbuild用のディレクトリで作業していきます。

bash
cd leptonica
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=$HOME/local ..

ここでlocalに指定しないと後でmake installするとき権限ではじかれます。

このコマンドを実行すると、初回のみ以下のようになります。

bash
~/.../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ディレクトリに戻ってください。

bash
cd /home/runner/{project name}/Packages/leptonica/build/

次にmakeをします。100%になるまで待機してください。

Replitの仕様上、ブラウザを開いていないとセッションが切れてしまうので気を付けてください。

bash
make

以下の表示が出ればmakeは完了です。
[100%] Built target leptonica

makeが終わったら、make installをします。そんなに時間はかからないと思います。

bash
make install

これにてTesseractを導入する下準備は終わりです。

Tesseract

ついに本命を導入していきます。まずはGitHubから最新のリリースを探し、ソースコードファイルのURLからファイルを取得します。そして、今はleptonica/build/にいるので、Packagesディレクトリに戻り、作業していきます。

bash
cd ../../

wget https://github.com/tesseract-ocr/tesseract/archive/refs/tags/5.3.2.tar.gz

このコマンドを実行すると、初回のみ以下のようになります。

bash
~/.../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ディレクトリに戻ってください。

bash
cd /home/runner/{project name}/Packages/

次に、先ほどwgetしたファイルを解凍します。ファイル名のバージョンは自身のものに合わせて変えてください。

bash
tar -xzvf 5.3.2.tar.gz

今回は自動でディレクトリが作成されるのでそこに移動します。

cd tesseract-5.3.2

先ほどと同様にbuild用のディレクトリで作業していきます。

bash
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フォルダごと削除することでやり直すことができます。

bash
cd ../
rm -rf build
mkdir build
cd build

次にmakeをします。100%になるまで待機してください。

この手順にとても時間がかかります。私の場合は100分かかりました。

bash
make

先ほどと同様進捗が100%になればmakeは完了です。

次にmake installをします。

bash
make install

ようやく導入完了です。お疲れ様でした。
以下のコマンドでバージョンが表示されたらインストール成功です。

bash
tesseract --version
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1