このチュートリアルでは、Cloud Functions、Google Cloud Vision API、ImageMagick を使用して、Cloud Storage バケットにアップロードされた不適切な画像を検出してぼかす方法を説明します。
目標
- ストレージ トリガーの CloudEvent 関数をデプロイする。
- Cloud Vision API を使用して、暴力的なコンテンツやアダルト コンテンツを検出する。
- ImageMagick を使用して、不適切な画像をぼかす。
- 肉食ゾンビの画像をアップロードして、関数をテストする。
料金
このチュートリアルでは、課金対象である次の Google Cloud コンポーネントを使用します。
- Cloud Functions
- Cloud Storage
- Cloud Vision
- Cloud Build
- Pub/Sub
- Artifact Registry
- Eventarc
- Cloud Logging
詳細については、Cloud Functions の料金をご覧ください。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
始める前に
- Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
-
Cloud Functions, Cloud Build, Artifact Registry, Eventarc, Cloud Storage, Cloud Vision, Logging, and Pub/Sub API を有効にします。
- Google Cloud CLI をインストールします。
-
gcloud CLI を初期化するには:
gcloud init
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
-
Cloud Functions, Cloud Build, Artifact Registry, Eventarc, Cloud Storage, Cloud Vision, Logging, and Pub/Sub API を有効にします。
- Google Cloud CLI をインストールします。
-
gcloud CLI を初期化するには:
gcloud init
- 開発環境を準備します。
gcloud CLI がすでにインストールされている場合は、次のコマンドを実行して更新します。
gcloud components update
データの流れ
ImageMagick チュートリアル アプリケーションでは、データの流れは次のようになります。
- 画像が Cloud Storage バケットにアップロードされます。
- Cloud ファンクションが Cloud Vision API を使用して画像を分析します。
- 暴力的なコンテンツやアダルト コンテンツが見つかった場合、Cloud ファンクションが ImageMagick を使用して画像をぼかします。
- ぼかしの入った画像が別の Cloud Storage バケットにアップロードされます。
アプリケーションの準備
画像をアップロードするリージョン Cloud Storage バケットを作成します。
YOUR_INPUT_BUCKET_NAME
はグローバルに一意のバケット名で、REGION
は関数をデプロイするリージョンです。gsutil mb -l REGION gs://YOUR_INPUT_BUCKET_NAME
ぼかし入りの画像を保存するリージョン Cloud Storage バケットを作成します。ここで、
YOUR_OUTPUT_BUCKET_NAME
はグローバルに一意のバケット名で、REGION
は関数をデプロイするリージョンです。gsutil mb -l REGION 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 形式のサンプルをダウンロードし、ファイルを抽出してもかまいません。
Cloud 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/
コードについて
依存関係のインポート
アプリケーションが Google Cloud Platform のサービス、ImageMagick、ファイル システムを利用するには、複数の依存関係をインポートする必要があります。
Node.js
Python
Go
Java
画像の分析
画像の入力用に作成された Cloud Storage バケットに画像がアップロードされると、次の関数が呼び出されます。この関数は、アプロードされた画像を Cloud Vision API で分析し、暴力的なコンテンツやアダルト コンテンツを検出します。
Node.js
Python
Go
Java
画像のぼかし
アップロードされた画像で暴力的なコンテンツやアダルト コンテンツが見つかると、次の関数が呼び出されます。この関数は不適切な画像をダウンロードして、ImageMagick で画像をぼかし、出力バケットにぼかし入りの画像をアップロードします。
Node.js
Python
Go
Java
関数のデプロイ
ストレージ トリガーを使用して Cloud Functions の関数をデプロイするには、サンプルコード(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 に基づくランタイム(以降のランタイムには、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 beta functions logs read YOUR_FUNCTION_NAME --gen2 --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 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 Functions の関数を削除することもできます。