Neste tutorial, demonstramos como usar o Cloud Run functions, a API Cloud Vision e o ImageMagick para detectar e desfocar imagens ofensivas que são enviadas para um bucket do Cloud Storage.
Objetivos
- Implantar um Background Cloud Run function acionado por armazenamento.
- Usar a API Vision para detectar conteúdo violento ou adulto.
- Usar o ImageMagick para desfocar imagens ofensivas.
- Testar a função fazendo upload de uma imagem de um zumbi comedor de carne.
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
- Cloud Run functions
- Cloud Storage
- Cloud Vision
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, 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.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, Cloud Storage, and Cloud Vision APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, Cloud Storage, and Cloud Vision APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Prepare seu ambiente de desenvolvimento.
Node.js
Python
Go
Java
C#
Ruby
PHP
Se a gcloud CLI já estiver instalada, atualize-a executando o seguinte comando:
gcloud components update
Como visualizar o fluxo de dados
O fluxo de dados no aplicativo do tutorial do ImageMagick envolve vários passos:
- Uma imagem é enviada para um bucket do Cloud Storage.
- A função analisa a imagem usando a API Vision.
- Se for detectado conteúdo violento ou adulto, a função usará o ImageMagick para desfocar a imagem.
- É feito o upload da imagem desfocada para outro bucket do Cloud Storage para uso.
Como preparar o aplicativo
Crie um bucket do Cloud Storage para fazer upload de imagens, onde
YOUR_INPUT_BUCKET_NAME
é um nome de bucket globalmente exclusivo:gcloud storage buckets create gs://YOUR_INPUT_BUCKET_NAME
Criar um bucket do Cloud Storage para receber imagens desfocadas, onde
YOUR_OUTPUT_BUCKET_NAME
é um nome de bucket exclusivo globalmente:gcloud storage buckets create gs://YOUR_OUTPUT_BUCKET_NAME
Clone o repositório do app de amostra na máquina local:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.
C#
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.
Ruby
git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git
Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.
PHP
git clone https://github.com/GoogleCloudPlatform/php-docs-samples.git
Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.
Mude para o diretório que contém o código de amostra do Cloud Run 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/
Noções básicas sobre o código
Como importar dependências
O aplicativo precisa importar várias dependências para interagir com os serviços do Google Cloud, o ImageMagick e o sistema de arquivos:
Node.js
Python
Go
Java
C#
Ruby
PHP
Como analisar imagens
A função a seguir é invocada quando é feito upload de uma imagem no bucket do Cloud Storage criado para o armazenamento de imagens. A função usa a API Vision para detectar conteúdo violento ou adulto em imagens enviadas.
Node.js
Python
Go
Java
C#
Ruby
PHP
Imagens desfocadas
A função a seguir é chamada quando conteúdo violento ou adulto é detectado em uma imagem enviada. A função faz o download da imagem ofensiva, usa o ImageMagick para desfocar a imagem e depois faz upload da imagem desfocada sobre a imagem original.
Node.js
Python
Go
Java
C#
Ruby
PHP
Como implantar a função
Para implantar a função com um gatilho de armazenamento, execute o seguinte comando no diretório que contém o código de amostra (ou, no caso de Java, o arquivo 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
Go
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
PHP
gcloud functions deploy blurOffensiveImages \ --no-gen2 \ --runtime=RUNTIME \ --trigger-bucket=YOUR_INPUT_BUCKET_NAME \ --set-env-vars=BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME
Substitua:
RUNTIME
: um ambiente de execução baseado no Ubuntu 18.04. Os ambientes de execução posteriores não incluem compatibilidade com o ImageMagick.YOUR_INPUT_BUCKET_NAME
: o nome do bucket do Cloud Storage para fazer upload de imagens.YOUR_OUTPUT_BUCKET_NAME
: o nome do bucket em que as imagens desfocadas serão salvas.
Para esse exemplo específico, não
inclua gs://
como parte dos nomes dos buckets no comando deploy
.
Como fazer upload de uma imagem
Faça upload de uma imagem ofensiva, como essa imagem de um zumbi comedor de carne:
gcloud storage cp zombie.jpg gs://YOUR_INPUT_BUCKET_NAME
onde
YOUR_INPUT_BUCKET_NAME
é o bucket do Cloud Storage criado anteriormente para o upload de imagens.Verifique os registros para ter certeza de que as execuções foram concluídas:
gcloud functions logs read --limit 100
É possível visualizar as imagens desfocadas no bucket do Cloud Storage
YOUR_OUTPUT_BUCKET_NAME
criado anteriormente.
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.
Excluir o projeto
O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para o tutorial.
Para excluir o projeto:
- 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.
Como excluir a função
A exclusão de funções do Cloud Run não remove nenhum recurso armazenado no Cloud Storage.
Para excluir o Cloud Function implantado neste tutorial, execute o seguinte comando:
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
Também é possível excluir funções do Cloud Run pelo Console do Google Cloud.