本教程演示了如何使用 Cloud Functions 函数、Google Cloud Vision API、ImageMagick 检测上传到 Cloud Storage 存储分区的令人反感的图片并对其进行模糊处理。
目标
- 部署存储触发的后台 Cloud Functions 函数。
- 使用 Cloud Vision API 检测暴力或成人内容。
- 使用 ImageMagick 对令人反感的图片进行模糊处理。
- 上传一张肉食僵尸的图片来测试函数。
费用
在本文档中,您将使用 Google Cloud 的以下收费组件:
- Cloud Functions
- Cloud Storage
- Cloud Vision
准备工作
- 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
-
在 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 Functions 函数使用 Cloud Vision API 分析图片。
- 如果检测到暴力或成人内容,Cloud Functions 函数会使用 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 控制台删除 Cloud Functions 函数。