このチュートリアルでは、Cloud Functions、Google Cloud Vision API、ImageMagick を使用して、Cloud Storage バケットにアップロードされた不適切な画像を検出してぼかす方法を説明します。
目標
- ストレージ トリガーのバックグラウンド Cloud Functions の関数をデプロイする。
- Cloud Vision API を使用して、暴力的なコンテンツやアダルト コンテンツを検出する。
- ImageMagick を使用して、不適切な画像をぼかす。
- 肉食ゾンビの画像をアップロードして、関数をテストする。
費用
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
- Cloud 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.
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Cloud Functions, Cloud Build, Cloud Storage, and Cloud Vision API を有効にします。
- Google Cloud CLI をインストールします。
-
gcloud CLI を初期化するには:
gcloud init
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Cloud Functions, Cloud Build, Cloud Storage, and Cloud Vision API を有効にします。
- Google Cloud CLI をインストールします。
-
gcloud CLI を初期化するには:
gcloud init
-
開発環境を準備します。
Node.js
Python
Go
Java
C#
Ruby
PHP
gcloud CLI がすでにインストールされている場合は、次のコマンドを実行して更新します。
gcloud components update
データの流れ
ImageMagick チュートリアル アプリケーションでは、データの流れは次のようになります。
- 画像が Cloud Storage バケットにアップロードされます。
- Cloud ファンクションが Cloud Vision API を使用して画像を分析します。
- 暴力的なコンテンツやアダルト コンテンツが見つかった場合、Cloud ファンクションが ImageMagick を使用して画像をぼかします。
- ぼかしの入った画像が別の Cloud Storage バケットにアップロードされます。
アプリケーションの準備
画像をアップロードする Cloud Storage バケットを作成します。
YOUR_INPUT_BUCKET_NAME
は、グローバルに固有のバケット名です。gsutil mb gs://YOUR_INPUT_BUCKET_NAME
ぼかし入りの画像を保存する Cloud Storage バケットを作成します。
YOUR_OUTPUT_BUCKET_NAME
はグローバルに固有のバケット名です。gsutil mb 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 Functions のサンプルコードが含まれているディレクトリに移動します。
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 Platform のサービス、ImageMagick、ファイル システムを利用するには、複数の依存関係をインポートする必要があります。
Node.js
Python
Go
Java
C#
Ruby
PHP
画像の分析
画像の保存用に作成された Cloud Storage バケットに画像がアップロードされると、次の関数が呼び出されます。この関数は、アプロードされた画像を Cloud Vision API で分析し、暴力的なコンテンツやアダルト コンテンツを検出します。
Node.js
Python
Go
Java
C#
Ruby
PHP
画像のぼかし
アップロードされた画像で暴力的なコンテンツやアダルト コンテンツが見つかると、次の関数が呼び出されます。この関数は不適切な画像をダウンロードして、ImageMagick で画像をぼかし、修正後の画像をアップロードして元の画像を上書きします。
Node.js
Python
Go
Java
C#
Ruby
PHP
関数のデプロイ
ストレージ トリガーを使用して Cloud Functions の関数をデプロイするには、サンプルコード(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://
を含めないでください。
画像のアップロード
肉食ゾンビの画像など、不適切な画像をアップロードします。
gsutil 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 Functions の関数の削除
Cloud Functions を削除しても、Cloud Storage に保存されたリソースは削除されません。
このチュートリアルでデプロイした Cloud Functions の関数を削除するには、次のコマンドを実行します。
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 Console から Cloud Functions を削除することもできます。