本教程演示了如何使用 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 项目已启用结算功能。了解如何检查项目是否已启用结算功能。
-
启用 Cloud Functions, Cloud Build, Cloud Storage, and Cloud Vision API。
- 安装并初始化 Google Cloud CLI。
-
在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能。
-
启用 Cloud Functions, Cloud Build, Cloud Storage, and Cloud Vision API。
- 安装并初始化 Google Cloud CLI。
-
准备开发环境。
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 nodejs16 \
您可以使用
--trigger-bucket YOUR_INPUT_BUCKET_NAME \
--set-env-vars BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME--runtime
标志的以下值来指定偏好的 Node.js 版本:nodejs16
(推荐)nodejs14
nodejs12
nodejs10
Python
gcloud functions deploy blur_offensive_images \ --runtime python39 \
您可以使用
--trigger-bucket YOUR_INPUT_BUCKET_NAME \
--set-env-vars BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME--runtime
标志的以下值来指定偏好的 Python 版本:python310
(预览版)python39
(推荐)python38
python37
Go
gcloud functions deploy BlurOffensiveImages \ --runtime go116 \
您可以使用
--trigger-bucket YOUR_INPUT_BUCKET_NAME \
--set-env-vars BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME--runtime
标志的以下值来指定偏好的 Go 版本:go116
(推荐)go113
go111
Java
gcloud functions deploy java-blur-function \ --entry-point functions.ImageMagick \ --runtime java11 \ --memory 512MB \
您可以使用
--trigger-bucket YOUR_INPUT_BUCKET_NAME \
--set-env-vars BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME--runtime
标志的以下值来指定偏好的 Java 版本:java17
(预览版)java11
(推荐)
C#
gcloud functions deploy csharp-blur-function \ --entry-point ImageMagick.Function \ --runtime dotnet3 \
--trigger-bucket YOUR_INPUT_BUCKET_NAME \
--set-env-vars BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAMERuby
gcloud functions deploy blur_offensive_images --runtime ruby30 \
您可以使用
--trigger-bucket YOUR_INPUT_BUCKET_NAME \
--set-env-vars BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME--runtime
标志的以下值来指定偏好的 Ruby 版本:ruby30
(推荐)ruby27
ruby26
PHP
gcloud functions deploy blurOffensiveImages --runtime php74 \
您可以使用
--trigger-bucket YOUR_INPUT_BUCKET_NAME \
--set-env-vars BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME--runtime
标志的以下值来指定偏好的 PHP 版本:php81
(预览)php74
(推荐)
其中
YOUR_INPUT_BUCKET_NAME
是用于上传图片的 Cloud Storage 存储分区的名称,YOUR_OUTPUT_BUCKET_NAME
是用于保存经过模糊处理的图片的存储分区名称。
上传图片
上传一张令人反感的图片,比如这张肉食僵尸图片:
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 帐号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。
删除项目
为了避免产生费用,最简单的方法是删除您为本教程创建的项目。
要删除项目,请执行以下操作:
- 在 Cloud Console 中,转到管理资源页面。
- 在项目列表中,选择要删除的项目,然后点击删除。
- 在对话框中输入项目 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 函数。