Google Cloud Platform での光学式文字認識(OCR)の実行方法について学びます。このチュートリアルでは、画像ファイルを Cloud Storage へアップロードし、Cloud Vision を使用して画像ファイルからテキストを抽出して、Cloud Translation API を使用してテキストを翻訳し、翻訳を Cloud Storage に保存する方法を説明します。Pub/Sub を使って、さまざまなタスクをキューに入れ、適切な Cloud Functions を使いこれらを実行していきます。
テキスト検出(OCR)リクエストの送信については、画像内のテキストを検出する、画像内の手書き入力を検出する、またはファイル内のテキストを検出する(PDF / TIFF)をご覧ください。
目標
- 複数のイベント ドリブン関数を作成してデプロイする。
- Cloud Storage に画像をアップロードする。
- アップロードした画像に含まれるテキストを抽出、変換、保存する。
料金
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
- Cloud Functions
- Cloud Build
- Pub/Sub
- Artifact Registry
- Eventarc
- Cloud Run
- Cloud Logging
- Cloud Storage
- Cloud Translation API
- Cloud Vision
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, Cloud Run, Artifact Registry, Eventarc, Logging, Pub/Sub, Cloud Storage, Cloud Translation, and Cloud Vision APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, Cloud Run, Artifact Registry, Eventarc, Logging, Pub/Sub, Cloud Storage, Cloud Translation, and Cloud Vision APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- 開発環境を準備します。
gcloud CLI がすでにインストールされている場合は、次のコマンドを実行して更新します。
gcloud components update
データの流れを可視化する
OCR チュートリアル アプリケーションのデータの流れでは、次の手順が行われます。
- 任意の言語のテキストを含む画像が Cloud Storage にアップロードされます。
- Cloud Functions の関数がトリガーされ、Vision API を使用してテキストを抽出し、ソース言語を検出します。
- Pub/Sub トピックにメッセージが発行されることで、テキストが翻訳のためにキューに配置されます。翻訳は、ソース言語とは異なるターゲット言語ごとにキューに配置されます。
- ターゲット言語がソース言語と一致する場合、翻訳キューがスキップされ、テキストは結果キュー(別の Pub/Sub トピック)に送信されます。
- Cloud Functions の関数が、Translation API を使用して翻訳キューのテキストを翻訳します。翻訳結果は結果キューに送信されます。
- 別の Cloud Functions の関数が、翻訳されたテキストを結果キューから Cloud Storage に保存します。
- 結果は、翻訳ごとにテキスト ファイルとして Cloud Storage に保存されます。
次はこの手順を可視化した図です。
アプリケーションを準備する
画像をアップロードする Cloud Storage バケットを作成します。
YOUR_IMAGE_BUCKET_NAME
は、グローバルに固有のバケット名です。gsutil mb gs://
YOUR_IMAGE_BUCKET_NAME
テキストの翻訳を保存する Cloud Storage バケットを作成します。
YOUR_RESULT_BUCKET_NAME
はグローバルに固有のバケット名です。gsutil mb gs://
YOUR_RESULT_BUCKET_NAME
翻訳リクエストを公開する Cloud Pub/Sub トピックを作成します。
YOUR_TRANSLATE_TOPIC_NAME
は翻訳リクエストのトピックの名前です。gcloud pubsub topics create
YOUR_TRANSLATE_TOPIC_NAME
完成した翻訳結果を公開する Cloud Pub/Sub トピックを作成します。
YOUR_RESULT_TOPIC_NAME
は翻訳結果のトピックの名前です。gcloud pubsub topics create
YOUR_RESULT_TOPIC_NAME
ローカルマシンにサンプルアプリのリポジトリのクローンを作成します。
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
また、zip 形式のサンプルをダウンロードしてファイルを抽出してもかまいません。
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
また、zip 形式のサンプルをダウンロードしてファイルを抽出してもかまいません。
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
また、zip 形式のサンプルをダウンロードしてファイルを抽出してもかまいません。
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
また、zip 形式のサンプルをダウンロードしてファイルを抽出してもかまいません。
Cloud Functions のサンプルコードが含まれているディレクトリに移動します。
Node.js
cd nodejs-docs-samples/functions/v2/ocr/app/
Python
cd python-docs-samples/functions/v2/ocr/
Go
cd golang-samples/functions/functionsv2/ocr/app/
Java
cd java-docs-samples/functions/v2/ocr/ocr-process-image/
コードを理解する
このセクションでは、OCR サンプルを構成する依存関係と関数について説明します。
依存関係をインポートする
アプリケーションが Google Cloud Platform サービスとやり取りするには、いくつかの依存関係をインポートする必要があります。
Node.js
Python
Go
Java
画像を処理する
次の関数は Cloud Storage からアップロードされた画像ファイルを読み取り、画像にテキストが含まれているかどうかを検出する関数を呼び出します。
Node.js
Python
Go
Java
次の関数は Cloud Vision API を使い画像からテキストを抽出し、翻訳されるようにテキストをキューに入れます。
Node.js
Python
Go
Java
テキストの翻訳
次の関数は抽出されたテキストを翻訳し、翻訳されたテキストを Cloud Storage に保存するよう、キューに入れます。
Node.js
Python
Go
Java
翻訳を保存する
最後に、次の関数は翻訳されたテキストを受信し、Cloud Storage に保存します。
Node.js
Python
Go
Java
関数をデプロイする
Cloud Storage トリガーを使用して画像処理関数をデプロイするには、サンプルコード(Java の場合は
pom.xml
ファイル)を含むディレクトリで次のコマンドを実行します。Node.js
gcloud functions deploy ocr-extract \ --gen2 \ --runtime=nodejs20 \ --region=
REGION
\ --source=. \ --entry-point=processImage \
--trigger-bucket YOUR_IMAGE_BUCKET_NAME \
--set-env-vars "^:^GCP_PROJECT=YOUR_GCP_PROJECT_ID:TRANSLATE_TOPIC=YOUR_TRANSLATE_TOPIC_NAME:RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME:TO_LANG=es,en,fr,ja"サポートされている Node.js バージョンのランタイム ID を指定して関数を実行するには、
--runtime
フラグを使用します。Python
gcloud functions deploy ocr-extract \ --gen2 \ --runtime=python312 \ --region=
REGION
\ --source=. \ --entry-point=process_image \
--trigger-bucket YOUR_IMAGE_BUCKET_NAME \
--set-env-vars "^:^GCP_PROJECT=YOUR_GCP_PROJECT_ID:TRANSLATE_TOPIC=YOUR_TRANSLATE_TOPIC_NAME:RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME:TO_LANG=es,en,fr,ja"サポートされている Python バージョンのランタイム ID を指定して関数を実行するには、
--runtime
フラグを使用します。Go
gcloud functions deploy ocr-extract \ --gen2 \ --runtime=go121 \ --region=
REGION
\ --source=. \ --entry-point=process-image \
--trigger-bucket YOUR_IMAGE_BUCKET_NAME \
--set-env-vars "^:^GCP_PROJECT=YOUR_GCP_PROJECT_ID:TRANSLATE_TOPIC=YOUR_TRANSLATE_TOPIC_NAME:RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME:TO_LANG=es,en,fr,ja"サポートされている Go バージョンのランタイム ID を指定して関数を実行するには、
--runtime
フラグを使用します。Java
gcloud functions deploy ocr-extract \ --gen2 \ --runtime=java17 \ --region=
REGION
\ --source=. \ --entry-point=functions.OcrProcessImage \ --memory=512MB \
--trigger-bucket YOUR_IMAGE_BUCKET_NAME \
--set-env-vars "^:^GCP_PROJECT=YOUR_GCP_PROJECT_ID:TRANSLATE_TOPIC=YOUR_TRANSLATE_TOPIC_NAME:RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME:TO_LANG=es,en,fr,ja"サポートされている Java バージョンのランタイム ID を指定して関数を実行するには、
--runtime
フラグを使用します。次のように置き換えます。
- REGION: 関数をデプロイする Google Cloud リージョンの名前(例:
us-west1
)。 - YOUR_IMAGE_BUCKET_NAME: 画像をアップロードする Cloud Storage バケットの名前。第 2 世代の関数をデプロイする場合は、先頭に
gs://
を付けずにバケット名のみを指定します(例:--trigger-event-filters="bucket=my-bucket"
)。
- REGION: 関数をデプロイする Google Cloud リージョンの名前(例:
Cloud Pub/Sub トリガーを使用してテキスト翻訳関数をデプロイするには、サンプルコード(Java の場合は
pom.xml
ファイル)を含むディレクトリで次のコマンドを実行します。Node.js
gcloud functions deploy ocr-translate \ --gen2 \ --runtime=nodejs20 \ --region=
REGION
\ --source=. \ --entry-point=translateText \
--trigger-topic YOUR_TRANSLATE_TOPIC_NAME \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME"サポートされている Node.js バージョンのランタイム ID を指定して関数を実行するには、
--runtime
フラグを使用します。Python
gcloud functions deploy ocr-translate \ --gen2 \ --runtime=python312 \ --region=
REGION
\ --source=. \ --entry-point=translate_text \
--trigger-topic YOUR_TRANSLATE_TOPIC_NAME \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME"サポートされている Python バージョンのランタイム ID を指定して関数を実行するには、
--runtime
フラグを使用します。Go
gcloud functions deploy ocr-translate \ --gen2 \ --runtime=go121 \ --region=
REGION
\ --source=. \ --entry-point=translate-text \
--trigger-topic YOUR_TRANSLATE_TOPIC_NAME \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME"サポートされている Go バージョンのランタイム ID を指定して関数を実行するには、
--runtime
フラグを使用します。Java
gcloud functions deploy ocr-translate \ --gen2 \ --runtime=java17 \ --region=
REGION
\ --source=. \ --entry-point=functions.OcrTranslateText \ --memory=512MB \
--trigger-topic YOUR_TRANSLATE_TOPIC_NAME \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_TOPIC=YOUR_RESULT_TOPIC_NAME"サポートされている Java バージョンのランタイム ID を指定して関数を実行するには、
--runtime
フラグを使用します。Cloud Pub/Sub トリガーを使用して結果を Cloud Storage に保存する関数をデプロイするには、サンプルコード(Java の場合は
pom.xml
ファイル)を含むディレクトリで次のコマンドを実行します。Node.js
gcloud functions deploy ocr-save \ --gen2 \ --runtime=nodejs20 \ --region=
REGION
\ --source=. \ --entry-point=saveResult \
--trigger-topic YOUR_RESULT_TOPIC_NAME \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_BUCKET=YOUR_RESULT_BUCKET_NAME"サポートされている Node.js バージョンのランタイム ID を指定して関数を実行するには、
--runtime
フラグを使用します。Python
gcloud functions deploy ocr-save \ --gen2 \ --runtime=python312 \ --region=
REGION
\ --source=. \ --entry-point=save_result \
--trigger-topic YOUR_RESULT_TOPIC_NAME \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_BUCKET=YOUR_RESULT_BUCKET_NAME"サポートされている Python バージョンのランタイム ID を指定して関数を実行するには、
--runtime
フラグを使用します。Go
gcloud functions deploy ocr-save \ --gen2 \ --runtime=go121 \ --region=
REGION
\ --source=. \ --entry-point=save-result \
--trigger-topic YOUR_RESULT_TOPIC_NAME \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_BUCKET=YOUR_RESULT_BUCKET_NAME"サポートされている Go バージョンのランタイム ID を指定して関数を実行するには、
--runtime
フラグを使用します。Java
gcloud functions deploy ocr-save \ --gen2 \ --runtime=java17 \ --region=
REGION
\ --source=. \ --entry-point=functions.OcrSaveResult \ --memory=512MB \
--trigger-topic YOUR_RESULT_TOPIC_NAME \
--set-env-vars "GCP_PROJECT=YOUR_GCP_PROJECT_ID,RESULT_BUCKET=YOUR_RESULT_BUCKET_NAME"サポートされている Java バージョンのランタイム ID を指定して関数を実行するには、
--runtime
フラグを使用します。
画像をアップロードする
画像を Cloud Storage バケットにアップロードします。
gsutil cp
PATH_TO_IMAGE
gs://YOUR_IMAGE_BUCKET_NAME
ここで
PATH_TO_IMAGE
はお使いのローカル システムにある画像ファイル(テキストを含む)へのパスです。YOUR_IMAGE_BUCKET_NAME
は画像のアップロード先となるバケットの名前です。
サンプル オブジェクトから画像をダウンロードできます。
実行した内容が完了していることをログで確認します。
gcloud functions logs read --limit 100
保存した翻訳は、
YOUR_RESULT_BUCKET_NAME
に使用した Cloud Storage バケットで確認できます。
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
プロジェクトの削除
課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。
プロジェクトを削除するには:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Cloud Functions の関数を削除する
Cloud Functions を削除しても、Cloud Storage に保存されたリソースは削除されません。
このチュートリアルで作成した Cloud Functions の関数を削除するには、次のコマンドを実行します。
gcloud functions delete ocr-extract gcloud functions delete ocr-translate gcloud functions delete ocr-save
Google Cloud Console から Cloud Functions を削除することもできます。