このチュートリアルでは、Cloud Run 関数、Vision API、ImageMagick を使用して、Cloud Storage バケットにアップロードされた不適切な画像を検出してぼかす方法を説明します。
目標
- ストレージ トリガーの CloudEvent 関数をデプロイする。
- Vision API を使用して、暴力的なコンテンツやアダルト コンテンツを検出する。
- ImageMagick を使用して、不適切な画像をぼかす。
- 肉食ゾンビの画像をアップロードして、関数をテストする。
費用
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
- Cloud Run functions
- Cloud Storage
- Cloud Vision
- Cloud Build
- Pub/Sub
- Artifact Registry
- Eventarc
- Cloud Logging
For details, see Cloud Run functions pricing.
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
始める前に
- 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, Artifact Registry, Eventarc, Cloud Storage, Cloud Vision, Logging, and Pub/Sub 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, Artifact Registry, Eventarc, Cloud Storage, Cloud Vision, Logging, and Pub/Sub APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- 開発環境を準備します。
gcloud CLI がすでにインストールされている場合は、次のコマンドを実行して更新します。
gcloud components update
データの流れを可視化する
ImageMagick チュートリアル アプリケーションでは、データの流れは次のようになります。
- 画像が Cloud Storage バケットにアップロードされます。
- Cloud Run 関数が Cloud Vision API を使用して画像を分析します。
- 暴力的なコンテンツやアダルト コンテンツが見つかった場合、Cloud Run 関数が ImageMagick を使用して画像をぼかします。
- ぼかしの入った画像が別の Cloud Storage バケットにアップロードされます。
アプリケーションを準備する
画像をアップロードするリージョン Cloud Storage バケットを作成します。
YOUR_INPUT_BUCKET_NAME
はグローバルに一意のバケット名で、REGION
は関数をデプロイするリージョンです。gcloud storage buckets create gs://YOUR_INPUT_BUCKET_NAME --location=REGION
ぼかし入りの画像を保存するリージョン Cloud Storage バケットを作成します。ここで、
YOUR_OUTPUT_BUCKET_NAME
はグローバルに一意のバケット名で、REGION
は関数をデプロイするリージョンです。gcloud storage buckets create gs://YOUR_OUTPUT_BUCKET_NAME --location=REGION
ローカルマシンにサンプルアプリのリポジトリのクローンを作成します。
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 Run functions のサンプルコードが含まれているディレクトリに移動します。
Node.js
cd nodejs-docs-samples/functions/v2/imagemagick/
Python
cd python-docs-samples/functions/v2/imagemagick/
Go
cd golang-samples/functions/functionsv2/imagemagick/
Java
cd java-docs-samples/functions/v2/imagemagick/
コードを理解する
ImageMagick サンプルには、依存関係と 2 つの異なる関数が含まれています。最初の関数で画像を分析し、暴力的なコンテンツやアダルト コンテンツが含まれる場合、2 番目の関数で画像をぼかします。
依存関係をインポートする
アプリケーションが Google Cloud のサービス、ImageMagick、ファイル システムを利用するには、複数の依存関係をインポートする必要があります。
ほとんどのランタイムで、ImageMagick とそのコマンドライン ツール convert
はデフォルトで Cloud Run functions の実行環境に含まれています。PHP の場合、手動での構成が必要になることがあります。Cloud Run functions は、システムレベルのカスタム パッケージのインストールをサポートしません。
Node.js
Python
Go
Java
画像を解析する
画像の入力用に作成された Cloud Storage バケットに画像がアップロードされると、次の関数が呼び出されます。この関数は、アプロードされた画像を Vision API で分析し、暴力的なコンテンツやアダルト コンテンツを検出します。
Node.js
Python
Go
Java
画像にぼかしを入れる
アップロードされた画像で暴力的なコンテンツやアダルト コンテンツが見つかると、次の関数が呼び出されます。この関数は不適切な画像をダウンロードして、ImageMagick で画像をぼかし、出力バケットにぼかし入りの画像をアップロードします。
Node.js
Python
Go
Java
関数をデプロイする
ストレージ トリガーを使用して Cloud Run 関数をデプロイするには、サンプルコード(Java の場合は pom.xml
ファイル)を含むディレクトリで次のコマンドを実行します。
Node.js
gcloud functions deploy nodejs-blur-function \ --gen2 \ --runtime=RUNTIME \ --region=REGION \ --source=. \ --entry-point=blurOffensiveImages \ --trigger-bucket=YOUR_INPUT_BUCKET_NAME \ --set-env-vars=BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME
Python
gcloud functions deploy python-blur-function \ --gen2 \ --runtime=RUNTIME \ --region=REGION \ --source=. \ --entry-point=blur_offensive_images \ --trigger-bucket=YOUR_INPUT_BUCKET_NAME \ --set-env-vars=BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME
Go
gcloud functions deploy go-blur-function \ --gen2 \ --runtime=RUNTIME \ --region=REGION \ --source=. \ --entry-point=blur-offensive-images \ --trigger-bucket=YOUR_INPUT_BUCKET_NAME \ --set-env-vars=BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME
Java
gcloud functions deploy java-blur-function \ --gen2 \ --runtime=RUNTIME \ --region=REGION \ --source=. \ --entry-point=functions.ImageMagick \ --trigger-bucket=YOUR_INPUT_BUCKET_NAME \ --set-env-vars=BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME
次のように置き換えます。
- RUNTIME: Ubuntu 18.04 以降に基づくランタイム
- REGION: 関数をデプロイする Google Cloud リージョンの名前(例:
us-west1
)。 - YOUR_INPUT_BUCKET_NAME: 画像をアップロードする Cloud Storage バケットの名前。
- YOUR_OUTPUT_BUCKET_NAME: ぼかしの入った画像を保存するバケットの名前。
Cloud Run functions をデプロイする場合は、先頭に gs://
を付けずにバケット名のみを指定します(例: --trigger-event-filters="bucket=my-bucket"
)。
画像をアップロードする
肉食ゾンビの画像など、不適切な画像をアップロードします。
gcloud storage cp zombie.jpg gs://YOUR_INPUT_BUCKET_NAME
YOUR_INPUT_BUCKET_NAME
は、以前に画像のアップロード用に作成した Cloud Storage バケットです。画像の分析結果がログに表示されます。
gcloud beta functions logs read YOUR_FUNCTION_NAME --gen2 --limit=100
以前に作成した
YOUR_OUTPUT_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 Run 関数を削除する
Cloud Run functions を削除しても、Cloud Storage に保存されたリソースは削除されません。
このチュートリアルでデプロイした関数を削除するには、次のコマンドを実行します。
Node.js
gcloud functions delete nodejs-blur-function --gen2 --region REGION
Python
gcloud functions delete python-blur-function --gen2 --region REGION
Go
gcloud functions delete go-blur-function --gen2 --region REGION
Java
gcloud functions delete java-blur-function --gen2 --region REGION
Google Cloud コンソールから Cloud Run functions を削除することもできます。