このチュートリアルでは、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 アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
プロジェクトの削除
課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。
プロジェクトを削除するには:
- Google Cloud コンソールで、[リソースの管理] ページに移動します。
- プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
- ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。
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 を削除することもできます。