Re:ゼロから始めるML生活

どちらかといえばエミリア派です

GPT-4oをOCRとして使う

OpenAIからChatGPT-4oが発表されましたが、皆さんガンガンつかっていますでしょうか?

さて、このChatGPT-4oですが、テキスト以外のデータも使用できるようになっているという特徴があります。 普通にテキストでのやり取りをしつつも画像データを扱えるということで、「実はこれいい感じのOCRとして使えるんじゃね?」って思っちゃったわけです。

ということで、今回はChatGPT-4oを使ってOCRを使うとどんなもんなのかやってみたいと思います。

やりたいこと

今回やりたいことはOCRです。早い話が画像ファイルを突っ込んでテキストを読み取りたいって感じです。 ただ、当たり前のようにOCRって言葉を使用していますがOCRって結構奥が深いです。

mediadrive.jp

単純に画像から文字を見つけて対応するテキストに変換するだけでも一苦労なのに、さらに行や段落を見極めて文字を意味のある単位にまとめて文にして保持したり、場合によってはレイアウトから分かる情報と紐づけていったりします。 読み込む画像が同じようなフォーマットであればまだマシですが、どんなレイアウトのドキュメントが読み込まれるかわからないのが普通です。

そんな画像から文字情報だけでなくレイアウト情報なども考慮して情報を構造化するすごい技術なんですね。

今回これをGPT-4oを使ってお手軽にやってみたいと思います。

やってみる

さて、前フリが終わったところで実際にやってみたいと思います。

とりあえずやってみる

最初はとにかく日本語文字情報が読めるかを確認していきます。

コードはこんな感じにしてみます。

gist.github.com

GPT-4oとのやり取りを確認すると、入力はこんな感じの画像とプロンプトにしています。

## 命令
この画像に表示されている文字を教えて下さい。
書かれている文字以外は応答しないでください。

## Output

応答はこんな感じです。

にくは  
太らない

ちゃんと読めてそうですね、すばらしい。

請求書

今度は当初やりたかったことをやってみたいと思います。 例として請求書とかをChatGPTに読み込ませてみたいと思います。

請求書イメージ

コードはこんな感じです。

プロンプトはこんな感じにしました。

## 命令
この画像に表示されている内容について回答してください。
請求先の住所(address), 氏名(name), 郵便番号(post_code)を教えて下さい。

## Output

応答はこんな感じです。

{'address': '神奈川県横浜市青葉区あざみ野1-2-34', 'name': '山田一郎様', 'post_code': '123-4567'}

名前だけ読み間違ってはいますが、請求先の住所や郵便番号といったことが明記されていないのに、ちゃんと取得できています。 いい感じですね。

通常これをフリーフォーマットでやろうとするとかなり大変なのですが、文字認識をミスっている(山田二郎と読んでほしかった)の以外は読めていてちゃんとOCRできています。

名刺

今度はありがちなOCRのユースケース サンプルとしてこんな感じの画像を使用してみます。

この画像からOCRしてみたいと思います。

コードはこんな感じにしてみました。

プロンプトはこんな感じです。

## 命令
この画像に表示されている内容について回答してください。
住所(address), 氏名(name), 郵便番号(post_code)、電話番号(phone_number)、メールアドレス(mail_address)を教えて下さい。

## Output

応答はこんな感じです。

{'address': '東京都千代田区1−1−1',
 'name': '田中 太郎',
 'post_code': '123-4567',
 'phone_number': '03-1234-5678',
 'mail_address': 'no_reply@example.com'}

ちゃんと取れてて結構感動しますね。 ちょっとした名刺スキャンアプリであれば今ではこれくらいのコードで十分かもしれませんね。

参考文献

今回の記事を書くにあたって下記の文献を参考にさせていただきました。

感想

以上、ChatGPT-4oを使ってOCRをやってみました。 単純な文字起こしくらいであればこれまでも結構簡単にできましたが、画像から構造を見極めて使用するのは意外と難しかった印象です。

今回GPT-4oを使うことで結構手軽にできることがわかったので、この辺りのOCR・視覚的意味解釈はだいぶ楽になりますね。 この辺りを使ってアプリを作って遊ぶのはこれから楽しそうですね。