YomiTokuをGoogle Colabで実行する

[YomiToku](https://github.com/kotaro-kinoshita/yomitoku)は日本語に特化して学習したAI OCRです。Pythonパッケージとして公開されており、インストールすればCLIで簡単にOCR解析が可能です。APIもありますので、Pythonからの操作も可能です。

今回は、Jupyter Notebookのクラウドサービスである[Google Colab](https://colab.research.google.com/)でYomiTokuを利用する手順を紹介します。今回はA100を使っているので、課金していなくとも高度なAI OCRを利用できます。

## Google Colabの使い方

Google Colabでは、Googleアカウントがあれば無料でJupyter Notebookを使うことができます。無料ユーザーでもGPUを利用できますが、高性能なGPUを長時間使う場合には有料プランに移行する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4009607/3df94a75-323f-4f56-85a4-fc92cc410663.png)


ただし、今回のA100であれば、無料ユーザーでも利用できます。YomiTokuは高性能なGPUを必要としませんので、A100で問題ありません。

## YomiTokuをGoogle Colabで実行する

では、YomiTokuをGoogle Colabで実行する手順を紹介します。今回はGoogle Driveをマウントして実行します。コンテナ上にアップロードして実行もできますが、接続を解除するとデータが消えてしまうので、Google Driveを使ってデータを保存することをお勧めします。

### Google Driveをマウントする

Google Driveは、Google Colabのファイルアイコンをクリックして、Google Driveのマウントをクリックするだけです。これで `drive` というディレクトリが作成され、Google Driveのファイルが参照できるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4009607/0ce17721-1dc1-4f7a-95c9-f8e6ec71e8b0.png)


### YomiTokuをインストールする

YomiTokuのインストールは、 `pip` コマンドで行います。

```bash
!pip install yomitoku
```

インストール後、セッションを再起動する必要があります。

### YomiTokuを実行する

YomiTokuを実行する一番簡単な方法は、 `yomitoku` コマンドを使うことです。以下のように実行します。

```bash
!yomitoku /content/drive/MyDrive/path/to/dir -o /content/drive/MyDrive/path/to/results -f md
```

このコマンドで、 `/content/drive/MyDrive/path/to/dir` 内にある帳票データを解析し、 `/content/drive/MyDrive/path/to/results` に結果を保存します。フォーマットはMarkdownです。

他にフォーマットとして、 `html` や `json`、 `csv` が指定できます。

### APIを利用する

YomiTokuはAPIも提供しています。APIは、Pythonの中で利用し、既存のシステムやワークフローへ組み込む際に役立つでしょう。

#### インポートする

まずは、YomiTokuをインポートします。

```python
from yomitoku import DocumentAnalyzer
from yomitoku.data.functions import load_pdf
```

#### DocumentAnalyzerを初期化する

DocumentAnalyzerを初期化します。このとき、GPUを使う場合は `device="cuda"` を指定します。

```python
analyzer = DocumentAnalyzer(visualize=True, device="cuda")
```

#### ドキュメントを読み込む

ドキュメントを読み込みます。PDFファイルを読み込む場合は、 `load_pdf` を使います。

```python
imgs = load_pdf("/content/drive/MyDrive/path/to/invoice.pdf")
```

今回利用したドキュメントは1ページしかないので、 `imgs` には1つの要素が入ります。複数ある場合にはループ処理を行ってください。今回は1ページ目を取り出しています。

```python
img = imgs[0]
```

#### OCRを実行する

OCR処理を行う `analyzer` は非同期処理なので、 `await` を使います。

```python
results, ocr_vis, layout_vis = await analyzer.run(img=img)
```

#### 結果を出力する

解析結果を出力します。今回はHTML出力します。

```python
out_path = "/content/drive/MyDrive/path/to/results/result.html"
html = results.to_html(out_path, img=img)
```

この時、 `html` に結果のHTMLが入ります。そして、解析結果の中に画像を含む場合には、1つ目の引数で指定したパスに対して `figures` というディレクトリが作成され、画像が保存されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4009607/78922119-0d11-48cd-a751-b15c2670a9e8.png)


HTMLの内容自体は別途、ファイルに出力します。

```python
open(out_path, "w").write(html)
```

さらに、解析した結果のレイアウトファイルなども保存できます。この場合、cv2をインポートします。

```python
import cv2
cv2.imwrite(f"/content/drive/MyDrive/path/to/results/result_ocr.jpg", ocr_vis)
cv2.imwrite(f"/content/drive/MyDrive/path/to/results/result_layout.jpg", layout_vis)
```

![result_ocr.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4009607/6cc72469-02a6-4c75-bf2d-acb206f8e27a.jpeg)


これで処理は完成です。

### 全体のコード

最終的なコードは以下のようになります。

```juypyter
# インストール
!pip install yomitoku

# コマンドでの利用
!yomitoku /content/drive/MyDrive/path/to/dir -o /content/drive/MyDrive/path/to/results -f md


# プログラミングからの利用
from yomitoku import DocumentAnalyzer
from yomitoku.data.functions import load_pdf

analyzer = DocumentAnalyzer(visualize=True, device="cuda")

imgs = load_pdf("/content/drive/MyDrive/path/to/invoice.pdf")

img = imgs[0]

results, ocr_vis, layout_vis = await analyzer.run(img=img)

out_path = "/content/drive/MyDrive/path/to/results/result.html"
html = results.to_html(out_path, img=img)
open(out_path, "w").write(html)

import cv2
cv2.imwrite(f"/content/drive/MyDrive/path/to/results/result_ocr.jpg", ocr_vis)
cv2.imwrite(f"/content/drive/MyDrive/path/to/results/result_layout.jpg", layout_vis)
```

これで、YomiTokuをGoogle Colabで実行する手順が完了です。ぜひ、試してみてください。

## ライセンス

YomiTokuのライセンスは[コモンズ証 \- 表示 \- 非営利 \- 継承 4\.0 国際 \- Creative Commons](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.ja)です。非商用での個人利用、研究目的においては、ご自由に利用できます。商用目的での利用に関しては、商用ライセンスが必要です。

## まとめ

YomiTokuは決して高性能なGPUが必要な訳ではありませんが、CPUでの実行は時間がかかります。macOSのように cuda に対応していない場合も時間がかかります。

そうした時、Google Colabを使うことで、ローカルから実行するかのようにGPUを使ったAI OCRが実現できます。ぜひAI OCRを使って、既存資産のデジタル化や業務効率化を実現してください。

[kotaro\-kinoshita/yomitoku: Yomitoku is an AI\-powered document image analysis package designed specifically for the Japanese language\.](https://github.com/kotaro-kinoshita/yomitoku?tab=readme-ov-file)