OCR(Optical Character Recognition)というのは、手書きや印刷された文字を読み取り、デジタルデータに変換する技術です。スキャナーや、スマホアプリなどで使ってみた経験がある方も多いかと思います。
OCRはさまざまな場面で利用されていますが、たとえば既存の紙データのデジタル化であったり、ビジネス上やり取りされる帳票を使ったシステムの自動処理などで活用されています。
YomiTokuもそんなOCRソフトウェアの一つです。日本語に特化しており、複雑な表組みなども読み取れるのが特徴です。
今回は、YomiTokuの簡単な使い方を紹介します。
YomiTokuの特徴
YomiTokuの特徴は、以下の通りです。
AIを活用
YomiTokuでは、以下の4種類のAIモデルを搭載しています。
- 文字位置の検知
- 文字列認識
- レイアウト解析
- 表の構造認識
いずれも日本語データセットで学習しています。
日本語、英語に対応
日本語の文書画像に特化して学習しており、日本の商習慣で使われる複雑な表であったり、縦書き文書にも対応しています。7,000文字を超える大規模な日本語文書でも利用できます。
レイアウト解析・表の構造認識
段組や、帳票や書面の中で使われている表の構造認識ができ、レイアウトの意味的構造を正しく認識、情報を抜き出します。
多様な出力フォーマット
出力は以下の4フォーマットに対応しています。
- Markdown
- JSON
- HTML
- CSV
システム連携も容易なJSON、見やすいMarkdown、表計算ソフトでの利用に便利なCSVなど、用途に合わせて使い分けることができます。
セキュリティ
クラウドサービスではないので、自社サーバー内に閉じた環境下で解析できます。請求データなど、機密情報を取り扱う上でも安心です。
GPU利用
GPU環境下で高速に動作します。VRAMは8GB以内で動作しますので、ハイエンドなGPUでなくても利用できます。
YomiTokuの使い方
YomiTokuは pip
でインストールします。
pip install yomitoku
ONNX Runtimeの実行にGPUを利用する場合は、以下のコマンドになります。
pip install yomitoku[gpu]
注意点
pytorchはCUDAのバージョンに合わせて選択してください。デフォルトではCUDA12.4以上を想定してインストールされます。また、pytorch自身は2.5以上のバージョンが必要です。Dockerfileもあります。
解析対象を用意する
解析対象になる画像ファイルを用意します。今回は例として、請求書エクセルテンプレート(無料)_タテ型_001よりダウンロードした請求書を使わせてもらっています。
請求書のテンプレートをダウンロードしたら、PDFファイルに変換しています。YomiTokuでは、PDFや画像ファイルを解析対象として利用できます。そのファイルを images
ディレクトリに格納しています。
解析を実行する
以下のコマンドで解析を実行します。
# HTMLファイルを出力
yomitoku ./images -f html
# JSONファイルを出力
yomitoku ./images -f json
# Markdownファイルを出力
yomitoku ./images -f md
# CSVファイルを出力
yomitoku ./images -f csv
コマンドを実行すると、最初にモデルをダウンロードします。これは自動的に行われ、初回のみです。
model.safetensors: 100% 102M/102M [00:02<00:00, 42.4MB/s]
model.safetensors: 100% 200M/200M [00:04<00:00, 42.7MB/s]
model.safetensors: 100% 172M/172M [00:04<00:00, 37.0MB/s]
model.safetensors: 100% 172M/172M [00:04<00:00, 41.2MB/s]
そして解析を実行し、 results
ディレクトリに結果が出力されます。出力先フォルダは変更可能で、なければ自動で作成されます。
yomitoku.cli.main - INFO - Total Processing time: 4.81 sec
実行時間について
実行時間はGPUによって異なりますが、 Google ColabのA100で実行した場合は2.5〜3.5秒程度でした。T4 GPUなどにしても高速になる訳ではないので、低価格帯のGPUで問題ありません。
実行結果
実行結果です。
HTMLファイルの場合
HTMLでは、表部分が table
タグで出力されます。
<html>
<body>
<p/>
<h1>サンプル株式会社 御中</h1>
<p>下記のとおり、御請求申し上げます。</p>
<p/>
<h1>請 求 書</h1>
<-- 略 -->
<table border="1" style="border-collapse: collapse">
<tr>
<td rowspan="1" colspan="1">摘要</td>
<td rowspan="1" colspan="1">数量</td>
<td rowspan="1" colspan="1">単位</td>
<td rowspan="1" colspan="1">単価</td>
<td rowspan="1" colspan="1">税率</td>
<td rowspan="1" colspan="1">金額</td>
</tr>
<tr>
<td rowspan="1" colspan="1">サンプル1</td>
<td rowspan="1" colspan="1">1</td>
<td rowspan="1" colspan="1">式</td>
<td rowspan="1" colspan="1">10,000</td>
<td rowspan="1" colspan="1">10%</td>
<td rowspan="1" colspan="1">10,000</td>
</tr>
<!-- 以下略 -->
</table>
<!-- 以下略 -->
</body>
</html>
JSONファイルの場合
JSONファイルの場合です。表になっている部分は table
キー以下にあるので、システム連携する際にはこの部分を利用します。 box
は認識された座標を示しています。
{
"figures": [],
"paragraphs": [
{
"box": [
197,
490,
1043,
581
],
"contents": "サンプル株式会社 御中",
"direction": "horizontal",
"order": 0,
"role": "section_headings"
},
// 略
],
"tables": [
{
"box": [
182,
830,
1369,
1206
],
"cells": [
{
"box": [
185,
834,
523,
926
],
"col": 1,
"col_span": 1,
"contents": "件名",
"row": 1,
"row_span": 1
},
{
"box": [
523,
831,
1368,
926
],
"col": 2,
"col_span": 1,
"contents": "サンプルプロジェクト",
"row": 1,
"row_span": 1
},
// 以下略
],
},
}
Markdownの場合
Markdownの場合、表の部分はMarkdownのテーブル形式で出力されます。
# サンプル株式会社 御中
下記のとおり、御請求申し上げます。
# 請 求 書
|件名|サンプルプロジェクト|
|-|-|
|支払期限|2022/5/31|
|振込先|サンプル銀行 本店 普通 1111111<br>サンプル\(カ|
合計
140,600 円\(税込\)
|No\.|1001|
|-|-|
|請求日|2022/4/30|
サンプル株式会社<br>〒100\-0001<br>東京都千代田区千代田1\-1\-1<br>サンプルビル3階<br>TEL : 03\-0000\-0000<br>担当:サンプル太郎<br>登録番号:T1234567890123
|摘要|数量|単位|単価|税率|金額|
|-|-|-|-|-|-|
|サンプル1|1|式|10,000|10%|10,000|
: 以下略
CSVの場合
CSVの場合、表の部分はCSV形式で出力されます。Excelなどで開いた際にも、レイアウトが維持されているので確認しやすいはずです。
サンプル株式会社 御中
: 省略
登録番号:T1234567890123"
""
摘要,数量,単位,単価,税率,金額
サンプル1,1,式,"10,000",10%,"10,000"
解析内容を可視化する
コマンドオプション -v
を付けると、解析結果を可視化した画像を出力します。
yomitoku ./images -f html -v
認識された箇所をボックスで囲み、その認識された文字列も合わせて出力されるので、YomiTokuがどういった箇所をどう認識しているのかを確認することができます。
注意点
CPUでの利用について
YomiTokuはGPUでの利用を推奨していますが、CPU環境下でも実行は可能です。ただし、解析には数分かかるので注意してください。
手書き文字について
2025年2月現在のYomiTokuでは、活字のみサポートしています。手書き文字については、公式にはサポートしておりません。また、看板など紙以外にプリントされた情景OCRについては、最適化されていません。
画像サイズについて
低解像度画像では識別精度が低下します。画像の短辺を720px以上の画像で解析することを推奨します。
ライセンス
YomiTokuのライセンスはコモンズ証 - 表示 - 非営利 - 継承 4.0 国際 - Creative Commonsです。非商用での個人利用、研究目的においては、ご自由に利用できます。商用目的での利用に関しては、商用ライセンスが必要です。
まとめ
YomiTokuを使えば、これまでは難しかった帳票や、複雑なレイアウトの文書もデジタル化できます。既存資産のDX化や、業務効率化に役立ててください。