👀

【VibeCodingChallenge#21】Gemini でAI OCRツール

に公開

はじめに

この記事は、VibeCodingChallengeとして、AIだけを使って開発を進めたら一体どこまでできるのか、何ができて何ができないのかを探る挑戦の一環です。
今回は、AI OCRです!

以前も、生成AIで進化するAI OCRツールみたいな話をZennでしたことがあります。
以下、結構、頑張って書いた記事です

https://zenn.dev/acntechjp/articles/399fa6af232cb2

この際、アップロードしたファイルと指定した項目に基づいて柔軟に情報を抽出する生成AI搭載型のOCRツールにより、OCRも進化している、お話をしました。
今回は、そのツールをGeminiのVisionを用いて試作してみました。

今回の成果物

最終成果物はこちらです!
https://youtu.be/w6yrzP76STI

いい感じにOCRができていそうです!

今回のツールは、以下のようなステップで動作します。

  1. ファイルのアップロード
    領収書、請求書、その他任意の書類をアップロードします。ファイル形式はPDFや画像ファイルなどに対応しています。
  2. 項目の指定
    抽出したい項目(例:インボイス番号、日付、合計金額など)をユーザーが指定します。それに応じてGeminiが該当部分を読み取ります。この際、補足として、柔軟にプロンプトを付与することで、抽出確率を上げるような仕組みにしています。
  3. 項目ごとの逐次処理
    一度に全項目をプロンプトに書いて、抽出するのではなく、各項目を一つずつ順番に処理することで、精度を上げるとともに、一つの項目への修正が他の項目に影響しないように工夫しています。

仮にプロンプトを全項目に記載して抽出すると、ある項目の修正に引きづられて、他の項目の抽出結果が変わるのが、こうした生成AI搭載型のOCRの悩みでもあるので、そこをクリアする取り組みをしました。

今回の学び1 逐次処理によるメリットとデメリット

今回のアプローチでわかったのは、以下です。
メリット

  • 項目ごとに、画像を参照しながら、順次処理することで精度を高められる
  • 逐次処理にすることで、ある項目の修正をしても他の項目への影響がほとんどない

デメリット

  • 費用は項目数分お高くなるので、運用との見合い
  • 処理時間がどうしても長めになる

この点は、何となく予想通りでしたが、改めて認識しました。

今回の学び2 bboxのずれ

今回やってみて、思ったのはバウンディングボックス(座標)のずれが結構AIだけでは、クリアできないというポイントです。
今回分析してみると、「Geminiが分析した結果のbboxと、サイト上で画像を拡大縮小したことによるズレ」が今回のbboxのズレに繋がっておりAIだけでは、なかなか解消できませんでした。
この辺りは、Geminiから返ってくるであろう結果を、うまくClaudeCodeが取り込めていない のかなと思うので、もう少し改善のやり方を考えていきたいです。

おわりに

生成AIによる、AI OCRはまだ発展途上ですが、こうしたチャレンジを通じて「何ができて、何が難しいか」を探ることで、より実用的なツールを作るヒントが得られたと感じています。
OCR分野は特に紙文化の日本にとって実現すると有用なので、こうした試行錯誤を続けて、さらに面白い発見を共有していきたいと思います。
今後も、このVibeCodingChallengeでは、生成AIだけで作ったツールの共有をしていくので、読み物としてお楽しみください!

Accenture Japan (有志)

Discussion