はじめに

買い物した時に貰うレシートの画像(写真)から、レシート内に記載されている情報を自動で取得したい、ただしレシートはお店によってフォーマットが異なるため、異なるフォーマットでも正しく情報を取得できるかをVertex AIからGeminiを使用して検証した内容となります。

やりたいこと

レシート画像から「商品名、単価、個数、値段、日付」を抽出して商品別に情報を整理して取得がしたい。
その結果を使ってアプリケーション側で商品別のデータ保存といった処理を行うため。

Vertex AI(モデル:Gemini)で検証

画像から必要なデータを抽出し、抽出したデータを整理し、形式を指定して出力するところまでをまとめて行います。
Vertex AIについては、情報はたくさんあるので説明は割愛しますが、Google Cloudのコンソールで使用ができるVERTEX AI STUDIOのマルチモーダルを使用し、画像と命令のセットで期待する出力ができるか検証してみました。モデルはGeminiを選択して使用しています。また、コンソールからでなくてもAPIを使ってcallすることも可能です。

  • モデル:gemini-1.5-flash-001
  • 入力したテキスト
    商品名、単価、個数、値段、日付(YYYY-MM-DD)、を商品毎のJson形式で出力してください
     ・トークン数:28
     ・テキストは色々試した結果、必要な情報をシンプルに書くのが良さそうでした。
  • 読み込んだ画像
  • 出力結果
[
  {
    "商品名": "アイスロイヤルミルクテ標",
    "単価": "750",
    "個数": "1",
    "値段": "750",
    "日付": "2024-06-08"
  },
  {
    "商品名": "アイスコーヒー標",
    "単価": "550",
    "個数": "1",
    "値段": "550",
    "日付": "2024-06-08"
  }
]

欲しい情報が整理されており、出力形式も問題なく取得できました!

また、下記パターンのレシートも問題なく項目が取得できることを確認しました。

  • お店のポイントや消費税など、似たような情報が含まれるレシート
  • 1つの画像に2つのレシートが存在
  • 1つの画像に異なるお店の2つのレシートが存在
  • 手書き(文字は読めるレベル)のレシート(伝票など)

ただし、下記のものは読み込みに不備があり、一部間違った情報の出力となりました。

  • 表示項目に統一性がない場合(複数商品が存在し1つの商品だけ2行に渡って単価が表示されているなど)
  • 文字が読めないレベルでの手書きのレシート(伝票など)

まとめ

Vertex AIからGeminiを使用して、画像から欲しい情報を取得できるかの検証を行いました。
レシートには商品情報以外にも、お店の情報やお知らせ文章、ポイントの情報など、多くの情報が含まれていますが関係なく必要な情報を取得できていました。
ただし、項目に統一性がなかったり、目視でも文字が読めない場合は、抽出に失敗することがあります。
情報が整列されていること、書き方が統一されていること、読める文字であること、の条件では高い精度で取得ができるので、他にも様々な応用ができそうです。