Neste tutorial, você verá como usar o Cloud Functions, a API Google 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 Function acionado por armazenamento.
- Usar a API Cloud 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 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
- Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
-
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Ative as APIs Cloud Functions, Cloud Build, Cloud Storage, and Cloud Vision.
- Instale a CLI do Google Cloud.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
-
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Ative as APIs Cloud Functions, Cloud Build, Cloud Storage, and Cloud Vision.
- Instale a CLI do Google Cloud.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
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.
- O Cloud Function analisa a imagem usando a API Cloud Vision.
- Se for detectado conteúdo violento ou adulto, o Cloud Function 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:gsutil mb 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:gsutil mb 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.
Altere para o diretório que contém o código de amostra do 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/
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 Platform, 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 Cloud 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 do Cloud 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 \ --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
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:
gsutil 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.
Limpeza
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:
- No Console do Google Cloud, acesse a página Gerenciar recursos.
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
- Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.
Como excluir a Função do Cloud
A exclusão de Cloud Functions não remove nenhum recurso armazenado no Cloud Storage.
Para excluir a Função do Cloud implantada 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 o Cloud Functions do Console do Google Cloud.