レシートを活用してお金持ちに: Google Cloud とスーパーマーケットのレシートで節約する - パート 1
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 で財産に変えましょう。
アーキテクチャ:
このアーキテクチャでは、以下のサービスを使用します。
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 テーブル スキーマのコードもそれに応じて更新する必要があることに注意してください。
d. このカスタム ドキュメント エクストラクタ プロセッサは Cloud Functions 内で呼び出され、ウェブ アプリケーションや電話アプリケーションを介してユーザーがアップロードしたレシートを解析、識別することができます。
e. 以下は、このアプリケーションで使用するレシートのサンプルです。上の手順 2(c)のスキーマが同じであれば、任意のレシートの形式でトレーニングできます。レシートには、ID、販売した商品数、日付、商品とその価格、消費税、小計が必要です。このスキーマに沿ったレシートの例を以下に示します。
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. 処理が終わると、サービス アカウントと権限が以下のように表示されます。
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」テーブルとそのスキーマは以下のようになります。
c. これまでの手順を繰り返します。ただし今回は「Items」という新しいテーブルを作成します。
d. 上の手順(a)で作成したデータセットに「Items」という新しいテーブルを作成するには、こちらのドキュメントの手順に沿って操作します。[スキーマ] セクションで、以下の JSON データを「Items」テーブルのスキーマ定義として使用します。処理が完了すると、「Items」テーブルとそのスキーマは以下のようになります。
6. テストします。
a. アプリケーションをテストするには、手順 3 で作成し、手順 4 で Eventarc の [イベントの受信元] に構成したものと同じ Cloud Storage バケットにスーパーマーケットのレシートをアップロードします。
b. スーパーマーケットのレシートが blob ストレージにアップロードされると、Cloud Functions の関数がトリガーされます。この関数は、ファイルを読み込み、Document AI カスタム プロセッサを使用して処理し、関連するフィールドを抽出した後、データを 3 か所に格納します。その 3 か所とは、BQ テーブル(上の手順 5 で作成)、Datastore(「Invoices」と「Items」という 2 つのエンティティが作成される)、アーカイブ用に抽出された全エンティティを含む、アップロードされたドキュメント別の新規テキスト ファイルです。
BigQuery でデータを探索する方法は多数ありますが、その中の一つに Looker で BigQuery テーブルを探索する方法があります。データを使って作成できるサンプル レポートをいくつかご紹介します。スーパーマーケットのレシートをデジタル化できましたね。これでお金持ちに一歩近付きました。
このブログシリーズの後半では、市場にあるスーパーマーケットのレシートまでこのアーキテクチャを拡張する方法と、任意のスーパーマーケットのレシートをデジタル化できるようにする方法をご説明する予定です。どうぞご期待ください。
それまでの間、Google Cloud のチュートリアルを確認し、プラットフォームとその効果的な活用方法について理解を深めてください。