このチュートリアルでは、Cloud Run 関数、Cloud Vision API、ImageMagick を使用して、Cloud Storage バケットにアップロードされた不適切な画像を検出してぼかす方法を説明します。
目標
- ストレージ トリガーの Cloud Run バックグラウンド関数をデプロイする。
- Vision API を使用して、暴力的なコンテンツやアダルト コンテンツを検出する。
- ImageMagick を使用して、不適切な画像をぼかす。
- 肉食ゾンビの画像をアップロードして、関数をテストする。
費用
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
- Cloud Run functions
- Cloud Storage
- 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 Storage, 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 Storage, and Cloud Vision APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
開発環境を準備します。
Node.js
Python
Go
Java
C#
Ruby
PHP
gcloud CLI がすでにインストールされている場合は、次のコマンドを実行して更新します。
gcloud components update
データの流れ
ImageMagick チュートリアル アプリケーションでは、データの流れは次のようになります。
- 画像が Cloud Storage バケットにアップロードされます。
- 関数が Vision API を使用して画像を分析します。
- 暴力的なコンテンツやアダルト コンテンツが見つかった場合、関数は ImageMagick を使用して画像をぼかします。
- ぼかしの入った画像が別の Cloud Storage バケットにアップロードされます。
アプリケーションの準備
画像をアップロードする Cloud Storage バケットを作成します。
YOUR_INPUT_BUCKET_NAME
は、グローバルに固有のバケット名です。gcloud storage buckets create gs://YOUR_INPUT_BUCKET_NAME
ぼかし入りの画像を保存する Cloud Storage バケットを作成します。
YOUR_OUTPUT_BUCKET_NAME
はグローバルに固有のバケット名です。gcloud storage buckets create gs://YOUR_OUTPUT_BUCKET_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 形式のサンプルをダウンロードしてファイルを抽出してもかまいません。
C#
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
または、zip 形式のサンプルをダウンロードしてファイルを抽出してもかまいません。
Ruby
git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git
または、zip 形式のサンプルをダウンロードしてファイルを抽出してもかまいません。
PHP
git clone https://github.com/GoogleCloudPlatform/php-docs-samples.git
または、zip 形式のサンプルをダウンロードしてファイルを抽出してもかまいません。
Cloud Run 関数のサンプルコードが含まれているディレクトリに移動します。
Node.js
cd nodejs-docs-samples/functions/imagemagick/
Python
cd python-docs-samples/functions/imagemagick/
Go
cd golang-samples/functions/imagemagick/
Java
cd java-docs-samples/functions/imagemagick/
C#
cd dotnet-docs-samples/functions/imagemagick/
Ruby
cd ruby-docs-samples/functions/imagemagick/
PHP
cd php-docs-samples/functions/imagemagick/
コードについて
依存関係をインポートする
アプリケーションが Google Cloud のサービス、ImageMagick、ファイル システムを利用するには、複数の依存関係をインポートする必要があります。
Node.js
Python
Go
Java
C#
Ruby
PHP
画像の分析
画像の保存用に作成された Cloud Storage バケットに画像がアップロードされると、次の関数が呼び出されます。この関数は、アプロードされた画像を Vision API で分析し、暴力的なコンテンツやアダルト コンテンツを検出します。
Node.js
Python
Go
Java
C#
Ruby
PHP
画像のぼかし
アップロードされた画像で暴力的なコンテンツやアダルト コンテンツが見つかると、次の関数が呼び出されます。この関数は不適切な画像をダウンロードして、ImageMagick で画像をぼかし、修正後の画像をアップロードして元の画像を上書きします。
Node.js
Python
Go
Java
C#
Ruby
PHP
関数のデプロイ
ストレージ トリガーを使用して関数をデプロイするには、サンプルコード(Java の場合は pom.xml
ファイル)を含むディレクトリで次のコマンドを実行します。
Node.js
gcloud functions deploy blurOffensiveImages \ --runtime=RUNTIME \ --trigger-bucket=YOUR_INPUT_BUCKET_NAME \ --set-env-vars=BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME
Python
gcloud functions deploy blur_offensive_images \ --runtime=RUNTIME \ --trigger-bucket=YOUR_INPUT_BUCKET_NAME \ --set-env-vars=BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME
Go
gcloud functions deploy BlurOffensiveImages \ --runtime=RUNTIME \ --trigger-bucket=YOUR_INPUT_BUCKET_NAME \ --set-env-vars=BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME
Java
gcloud functions deploy java-blur-function \ --entry-point=functions.ImageMagick \ --runtime=RUNTIME \ --memory 512MB \ --trigger-bucket=YOUR_INPUT_BUCKET_NAME \ --set-env-vars=BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME
C#
gcloud functions deploy csharp-blur-function \ --entry-point=ImageMagick.Function \ --runtime=RUNTIME \ --trigger-bucket=YOUR_INPUT_BUCKET_NAME \ --set-env-vars=BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME
Ruby
gcloud functions deploy blur_offensive_images \ --runtime=RUNTIME \ --trigger-bucket=YOUR_INPUT_BUCKET_NAME \ --set-env-vars=BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME
PHP
gcloud functions deploy blurOffensiveImages \ --runtime=RUNTIME \ --trigger-bucket=YOUR_INPUT_BUCKET_NAME \ --set-env-vars=BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME
次のように置き換えます。
RUNTIME
: Ubuntu 18.04 に基づくランタイム(以降のランタイムには、ImageMagick のサポートは含まれていません)。YOUR_INPUT_BUCKET_NAME
: 画像をアップロードする Cloud Storage バケットの名前。YOUR_OUTPUT_BUCKET_NAME
: ぼかしの入った画像を保存するバケットの名前。
この特定の例では、deploy
コマンドのバケット名に gs://
を含めないでください。
画像のアップロード
肉食ゾンビの画像など、不適切な画像をアップロードします。
gcloud storage cp zombie.jpg gs://YOUR_INPUT_BUCKET_NAME
YOUR_INPUT_BUCKET_NAME
は、以前に画像のアップロード用に作成した Cloud Storage バケットです。実行した内容が完了していることをログで確認します。
gcloud functions logs read --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 Storage に保存されたリソースは削除されません。
このチュートリアルでデプロイした関数を削除するには、次のコマンドを実行します。
Node.js
gcloud functions delete blurOffensiveImages
Python
gcloud functions delete blur_offensive_images
Go
gcloud functions delete BlurOffensiveImages
Java
gcloud functions delete java-blur-function
C#
gcloud functions delete csharp-blur-function
Ruby
gcloud functions delete blur_offensive_images
PHP
gcloud functions delete blurOffensiveImages
Google Cloud コンソールから Cloud Run 関数を削除することもできます。