Este tutorial demonstra a utilização de funções do Cloud Run, da Cloud Vision API e do ImageMagick para detetar e esbater imagens ofensivas carregadas para um contentor do Cloud Storage.
Objetivos
- Implemente uma função do Cloud Run em segundo plano acionada pelo armazenamento.
- Use a API Vision para detetar conteúdo violento ou para adultos.
- Use o ImageMagick para esbater imagens ofensivas.
- Teste a função carregando uma imagem de um zombie carnívoro.
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
- Cloud Run functions
- Cloud Storage
- Cloud Vision
Para gerar uma estimativa de custos com base na sua utilização projetada,
use a calculadora de preços.
Antes de começar
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, Cloud Storage, and Cloud Vision APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, Cloud Storage, and Cloud Vision APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init - Prepare o seu ambiente de desenvolvimento.
- Uma imagem é carregada para um contentor do Cloud Storage.
- A função analisa a imagem através da API Vision.
- Se for detetado conteúdo violento ou para adultos, a função usa o ImageMagick para esbater a imagem.
- A imagem esbatida é carregada para outro contentor do Cloud Storage para utilização.
Crie um contentor do Cloud Storage para carregar imagens, onde
YOUR_INPUT_BUCKET_NAMEé um nome de contentor globalmente único:gcloud storage buckets create gs://YOUR_INPUT_BUCKET_NAME
Crie um contentor do Cloud Storage para receber imagens esbatidas, em que
YOUR_OUTPUT_BUCKET_NAMEé um nome de contentor globalmente único:gcloud storage buckets create gs://YOUR_OUTPUT_BUCKET_NAME
Clone o repositório da app de exemplo para a sua máquina local:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.
Ir
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.
Ruby
git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git
Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.
Altere para o diretório que contém o código de exemplo das funções do Cloud Run:
Node.js
cd nodejs-docs-samples/functions/imagemagick/
Python
cd python-docs-samples/functions/imagemagick/
Ir
cd golang-samples/functions/imagemagick/
Java
cd java-docs-samples/functions/imagemagick/
Ruby
cd ruby-docs-samples/functions/imagemagick/
RUNTIME: um tempo de execução baseado no Ubuntu 18.04 (os tempos de execução posteriores não incluem suporte para o ImageMagick).YOUR_INPUT_BUCKET_NAME: o nome do contentor do Cloud Storage para carregar imagens.YOUR_OUTPUT_BUCKET_NAME: o nome do contentor no qual as imagens esbatidas devem ser guardadas.Carregar uma imagem ofensiva, como esta imagem de um zombie carnívoro:
gcloud storage cp zombie.jpg gs://YOUR_INPUT_BUCKET_NAME
em que
YOUR_INPUT_BUCKET_NAMEé o contentor do Cloud Storage que criou anteriormente para carregar imagens.Monitorize os registos para se certificar de que as execuções foram concluídas:
gcloud functions logs read --limit 100
Pode ver as imagens esbatidas no contentor do Cloud Storage que criou anteriormente.
YOUR_OUTPUT_BUCKET_NAME- 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.
Se já tiver a CLI gcloud instalada, atualize-a executando o seguinte comando:
gcloud components update
Visualizar o fluxo de dados
O fluxo de dados na aplicação de tutorial do ImageMagick envolve vários passos:
A preparar a aplicação
Compreender o código
Importar dependências
A aplicação tem de importar várias dependências para interagir com os Google Cloud serviços, o ImageMagick e o sistema de ficheiros:
Node.js
Python
Ir
Java
Ruby
Analisar imagens
A seguinte função é invocada quando uma imagem é carregada para o contentor do Cloud Storage que criou para armazenar imagens. A função usa a API Vision para detetar conteúdo violento ou para adultos em imagens carregadas.
Node.js
Python
Ir
Java
Ruby
Esbater imagens
A função seguinte é chamada quando é detetado conteúdo violento ou para adultos numa imagem carregada. A função transfere a imagem ofensiva, usa o ImageMagick para esbater a imagem e, em seguida, carrega a imagem esbatida sobre a imagem original.
Node.js
Python
Ir
Java
Ruby
Implementar a função
Para implementar a sua função com um acionador de armazenamento, execute o seguinte comando no diretório que contém o código de exemplo (ou, no caso do Java, o ficheiro pom.xml):
Node.js
gcloud functions deploy blurOffensiveImages \ --no-gen2 \ --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 \ --no-gen2 \ --runtime=RUNTIME \ --trigger-bucket=YOUR_INPUT_BUCKET_NAME \ --set-env-vars=BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME
Ir
gcloud functions deploy BlurOffensiveImages \ --no-gen2 \ --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 \ --no-gen2 \ --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 \ --no-gen2 \ --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 \ --no-gen2 \ --runtime=RUNTIME \ --trigger-bucket=YOUR_INPUT_BUCKET_NAME \ --set-env-vars=BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME
Substitua o seguinte:
Para este exemplo específico, não inclua gs:// como parte dos nomes dos contentores
no comando deploy.
Carregar uma imagem
Limpar
Para evitar incorrer em custos na sua conta do Google Cloud pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.
Eliminar o projeto
A forma mais fácil de eliminar a faturação é eliminar o projeto que criou para o tutorial.
Para eliminar o projeto:
A eliminar a função
A eliminação de funções do Cloud Run não remove recursos armazenados no Cloud Storage.
Para eliminar a função implementada neste tutorial, execute o seguinte comando:
Node.js
gcloud functions delete blurOffensiveImages
Python
gcloud functions delete blur_offensive_images
Ir
gcloud functions delete BlurOffensiveImages
Java
gcloud functions delete java-blur-function
Ruby
gcloud functions delete blur_offensive_images
Também pode eliminar funções do Cloud Run a partir da Google Cloud consola.