コンテンツに移動
アプリケーション モダナイゼーション

レシートを活用してお金持ちに: Google Cloud とスーパーマーケットのレシートで節約する - パート 1

2023年5月17日
https://storage.googleapis.com/gweb-cloudblog-publish/images/retail-ja.max-2500x2500.png
Google Cloud Japan Team

※この投稿は米国時間 2023 年 5 月 6 日に、Google Cloud blog に投稿されたものの抄訳です。

今日の世界では、たとえ 1 円でも大切です。スーパーマーケットで出費を抑えることも例外ではありません。次のようなことを思ったことはありませんか?

  • 今年はキヌアを何パック買ったのか?

  • 卵の値段は、どれくらい上がったのか?

  • 特定の月の食費が高くなるのはなぜ?

  • これまでにスーパーマーケットで買った一番高いものは何だろう?

この記事は、2 部構成のブログシリーズの前半です。このブログシリーズでは、Google Cloud 上のマネージド サービスを組み合わせ、Google Cloud サービスを使用してスーパーマーケットのレシートをデジタル化して支出パターンを分析するアプリケーションを、いかに簡単に作成できるかをご紹介します。このアーキテクチャは、Document AI の機能をイベント ドリブンな処理パイプラインで活用したい、さまざまなユースケースで役立ちます。

ブログシリーズ前半のこの記事では、Document AI を使ってスーパーマーケットのレシートから日付、店名、購入した商品などの重要な情報を抽出する方法をご説明します。この情報を Datastore に格納すると、迅速かつ簡単にアクセスできるようになります。その後、BigQuery を使ってデータを分析し、支出の傾向に関するインサイトを取得します。このインサイトにより、有名メーカーの商品の代わりにノーブランドの商品を購入する、あるいはまとめ買いするなど、節約できる部分を特定できます。このように Google Cloud のテクノロジーをうまく組み合わせることで、レシートを貴重なデータソースに変え、お金を節約し、よりスマートな購入の意思決定を行うことができるようになります。

スーパーマーケットのレシートを無駄にすることなく、Google Cloud で財産に変えましょう。

アーキテクチャ:

https://storage.googleapis.com/gweb-cloudblog-publish/images/1._Part1-ArchitectureDiagram.max-1200x1200.jpg

このアーキテクチャでは、以下のサービスを使用します。

  • Document AI: 非構造化ドキュメントから構造化データを抽出し、タスクを自動化して、企業の時間と費用を節約するクラウドベースの AI ツールです。

  • Cloud Functions: スケーラブルなイベントドリブン型アプリケーション向けのサーバーレス コンピューティング プラットフォームです。

  • BigQuery: 大量のデータ分析に適した、高速で使いやすい高性能なサーバーレス データ ウェアハウスです。

  • Cloud Datastore: ウェブ、モバイル、IoT、ビッグデータ アプリケーション向けのフルマネージドでスケーラブルな、パフォーマンス、耐久性、安全性に優れた NoSQL データベースです。

  • Google Cloud Storage: スケーラブルで耐久性と可用性に優れた、データ向けのオブジェクト ストレージ サービスです。高い性能と柔軟性を備え、費用対効果に優れています。

  • Cloud Logging: フルマネージドのログ管理サービスです。GCP やオンプレミスのログデータを収集、保存、分析します。

このサービスを構築する手順は以下のとおりです。

1. まだ設定していない場合は、開始チェックリストを使って Google Cloud アカウントを設定します。

2. Document AI カスタム ドキュメント エクストラクタを設定します。

a. こちらのガイドでは、Document AI Workbench を使用して、任意のドキュメントを処理するカスタム ドキュメント エクストラクタを作成、トレーニングする方法を説明しています。

b. 同じ手順に沿って、よく行く最寄りのスーパーマーケットのレシートを処理するカスタム プロセッサを作成します(Document AI のカスタム プロセッサは幅広い言語に対応できます)。平均では、各スーパーマーケットのレシートモデルをトレーニングしてテストするために、最大 15 枚のレシートをモニタリングしています。

c. プロセッサ スキーマは、以下のスクリーンショットのようになります。このスキーマは、スーパーマーケットのレシートで必要とされる情報をすべてカバーしており、ほとんどのスーパーマーケットのレシートには、これらのラベルが記載されています。このスキーマを変更する場合、下の手順 4 で指定する Cloud Functions と BigQuery テーブル スキーマのコードもそれに応じて更新する必要があることに注意してください。

https://storage.googleapis.com/gweb-cloudblog-publish/images/2._DocAI_Schema.max-1500x1500.jpg

d. このカスタム ドキュメント エクストラクタ プロセッサは Cloud Functions 内で呼び出され、ウェブ アプリケーションや電話アプリケーションを介してユーザーがアップロードしたレシートを解析、識別することができます。

e. 以下は、このアプリケーションで使用するレシートのサンプルです。上の手順 2(c)のスキーマが同じであれば、任意のレシートの形式でトレーニングできます。レシートには、ID、販売した商品数、日付、商品とその価格、消費税、小計が必要です。このスキーマに沿ったレシートの例を以下に示します。

https://storage.googleapis.com/gweb-cloudblog-publish/images/3._InvoiceExample.max-400x400.jpg

3. Google Cloud Storage を設定します。こちらのドキュメントの手順に沿って、アップロードしたレシートを保存するストレージ バケットを作成します。

4. Google Cloud Functions の関数を設定します。

a. 手順 3 で作成したクラウド ストレージに新しいオブジェクトが追加されると有効化される Eventarc トリガーを備えた、第 2 世代 Cloud Functions の関数の作成方法については、こちらのドキュメントをご覧ください。Cloud Functions の関数を作成して Eventarc を追加する際は、以下の点に注意してください。

i. 関数を作成する際は、ネットワーク設定の [内部トラフィックと Cloud Load Balancing からのトラフィックを許可する] がオンになっていることを確認します。

ii. Eventarc トリガーを追加する際は、[google.cloud.storage.object.v1.finalized] イベントタイプを選択します。

iii. Eventarc を作成する際は、[デフォルトのコンピューティング サービス アカウント] を使用する代わりに、新しいサービス アカウントを作成することをおすすめします。新しいサービス アカウントには、[Cloud Run 起動元] 権限と [Eventarc イベント受信者] 権限を付与する必要があります。

iv. Cloud Functions の関数を作成する際は、[ランタイム サービス アカウント] として [デフォルトのコンピューティング サービス アカウント] を使用しないでください。代わりに、Datastore、BigQuery、Logging、Document AI に接続できるよう、アカウントを新規作成して、BigQuery データオーナー、Cloud Datastore ユーザー、Document AI API ユーザー、ログ書き込み、Storage オブジェクト作成者、Storage オブジェクト閲覧者のいずれかのロールを付与します。

v. 処理が終わると、サービス アカウントと権限が以下のように表示されます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/4._IAM_permissions.max-1000x1000.jpg

b. 次に、作成した Cloud Functions の関数を開き、ランタイムとして .NET 6.0 を選択します。これで、C# の関数を記述できるようになります。

c. 確実にビルドできるようにするため、現在の Cloud Functions の関数のコードをこちらのコードに置き換え、コード内の変数を適切な Google Cloud サービス名に置き換えます。HelloGcs.csproj ファイルと Function.cs ファイルの内容を置き換えます。

d. Cloud Functions の関数をデプロイします。

e. このコードは、Datastore に「Invoices」と「Items」という 2 つのタイプ(Kind)のエンティティを作成します。Datastore について詳しくは、こちらのドキュメントをご覧ください。

f. このコードは、グローバル スコープに新しい LogName も作成します。カスタム ログエントリの作成について詳しくは、こちらのドキュメントをご覧ください。

5. BigQuery を設定します。

a. BigQuery のデータセットを新規作成するには、こちらの手順に沿って操作します。

b. 上の手順(a)で作成したデータセットに「Invoices」という新しいテーブルを作成するには、こちらのドキュメントの手順に沿って操作します。[スキーマ] セクションで、以下の JSON データを「Invoices」テーブルのスキーマ定義として使用します。
読み込んでいます...

処理が完了すると、「Invoices」テーブルとそのスキーマは以下のようになります。

https://storage.googleapis.com/gweb-cloudblog-publish/images/5._BQ_InvoicesTable.max-1700x1700.jpg

c. これまでの手順を繰り返します。ただし今回は「Items」という新しいテーブルを作成します。

d. 上の手順(a)で作成したデータセットに「Items」という新しいテーブルを作成するには、こちらのドキュメントの手順に沿って操作します。[スキーマ] セクションで、以下の JSON データを「Items」テーブルのスキーマ定義として使用します。
読み込んでいます...

処理が完了すると、「Items」テーブルとそのスキーマは以下のようになります。

https://storage.googleapis.com/gweb-cloudblog-publish/images/6._BQ_ItemsTable.max-1500x1500.jpg

6. テストします。

a. アプリケーションをテストするには、手順 3 で作成し、手順 4 で Eventarc の [イベントの受信元] に構成したものと同じ Cloud Storage バケットにスーパーマーケットのレシートをアップロードします。

b. スーパーマーケットのレシートが blob ストレージにアップロードされると、Cloud Functions の関数がトリガーされます。この関数は、ファイルを読み込み、Document AI カスタム プロセッサを使用して処理し、関連するフィールドを抽出した後、データを 3 か所に格納します。その 3 か所とは、BQ テーブル(上の手順 5 で作成)、Datastore(「Invoices」と「Items」という 2 つのエンティティが作成される)、アーカイブ用に抽出された全エンティティを含む、アップロードされたドキュメント別の新規テキスト ファイルです。

BigQuery でデータを探索する方法は多数ありますが、その中の一つに Looker で BigQuery テーブルを探索する方法があります。データを使って作成できるサンプル レポートをいくつかご紹介します。
https://storage.googleapis.com/gweb-cloudblog-publish/images/7._InvoicesReport.max-1900x1900.jpg
https://storage.googleapis.com/gweb-cloudblog-publish/images/8._ItemsReport.max-1700x1700.jpg

スーパーマーケットのレシートをデジタル化できましたね。これでお金持ちに一歩近付きました。

このブログシリーズの後半では、市場にあるスーパーマーケットのレシートまでこのアーキテクチャを拡張する方法と、任意のスーパーマーケットのレシートをデジタル化できるようにする方法をご説明する予定です。どうぞご期待ください。

それまでの間、Google Cloud のチュートリアルを確認し、プラットフォームとその効果的な活用方法について理解を深めてください。


- インフラストラクチャ担当シニア カスタマー エンジニア Krishna Chytanya Ayyagari
投稿先