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 tutorial, usamos 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 o faturamento está ativado para seu projeto na nuvem. Saiba como verificar se o faturamento está ativado em um projeto.
-
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 o faturamento está ativado para seu projeto na nuvem. Saiba como verificar se o faturamento está ativado em um projeto.
-
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 nodejs18 \
É possível usar os seguintes valores para a sinalização
--trigger-bucket YOUR_INPUT_BUCKET_NAME \
--set-env-vars BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME--runtime
para especificar sua versão preferida do Node.js:nodejs18
(recomendado)nodejs16
nodejs14
nodejs12
nodejs10
Python
gcloud functions deploy blur_offensive_images \ --runtime python310 \
É possível usar os seguintes valores da sinalização
--trigger-bucket YOUR_INPUT_BUCKET_NAME \
--set-env-vars BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME--runtime
para especificar a versão preferencial do Python:python310
(recomendado)python311
(pré-lançamento)python39
python38
python37
Go
gcloud functions deploy BlurOffensiveImages \ --runtime go119 \
É possível usar os seguintes valores para a sinalização
--trigger-bucket YOUR_INPUT_BUCKET_NAME \
--set-env-vars BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME--runtime
para especificar sua versão Go preferencial:go119
(recomendado)go118
go116
go113
go111
Java
gcloud functions deploy java-blur-function \ --entry-point functions.ImageMagick \ --runtime java17 \ --memory 512MB \
É possível usar os seguintes valores da sinalização
--trigger-bucket YOUR_INPUT_BUCKET_NAME \
--set-env-vars BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME--runtime
para especificar a versão preferencial do Java:java17
(recomendado)java11
C#
gcloud functions deploy csharp-blur-function \ --entry-point ImageMagick.Function \ --runtime dotnet6 \
É possível usar os seguintes valores da flag
--trigger-bucket YOUR_INPUT_BUCKET_NAME \
--set-env-vars BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME--runtime
para especificar a versão preferencial de .NET:dotnet6
(recomendado)dotnet3
Ruby
gcloud functions deploy blur_offensive_images --runtime ruby30 \
Use os seguintes valores da sinalização
--trigger-bucket YOUR_INPUT_BUCKET_NAME \
--set-env-vars BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME--runtime
para especificar a versão do Ruby que você quer usar:ruby30
(recomendado)ruby27
ruby26
PHP
gcloud functions deploy blurOffensiveImages --runtime php81 \
É possível usar os seguintes valores da sinalização
--trigger-bucket YOUR_INPUT_BUCKET_NAME \
--set-env-vars BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME--runtime
para especificar a versão preferencial do PHP:php81
(recomendado)php74
Em que
YOUR_INPUT_BUCKET_NAME
é o nome do bucket do Cloud Storage para upload de imagens, eYOUR_OUTPUT_BUCKET_NAME
é o nome do bucket em que as imagens desfocadas devem ser salvas.
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.