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 uma função do CloudEvent acionada pelo 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
- Cloud Build
- Pub/Sub
- Artifact Registry
- Eventarc
- Cloud Logging
Veja detalhes em Preços do Cloud Functions.
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, Artifact Registry, Eventarc, Cloud Storage, Cloud Vision, Logging, and Pub/Sub.
- Instale e inicialize a Google Cloud CLI.
-
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, Artifact Registry, Eventarc, Cloud Storage, Cloud Vision, Logging, and Pub/Sub.
- Instale e inicialize a Google Cloud CLI.
- Prepare seu ambiente de desenvolvimento.
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 regional do Cloud Storage para fazer upload de imagens, em que
YOUR_INPUT_BUCKET_NAME
é um nome de bucket globalmente exclusivo eREGION
é a região em que você planeja implantar a função:gsutil mb -l REGION gs://YOUR_INPUT_BUCKET_NAME
Crie um bucket regional do Cloud Storage para receber imagens desfocadas, em que
YOUR_OUTPUT_BUCKET_NAME
é um nome de bucket globalmente exclusivo eREGION
é a região em que você planeja implantar a função:gsutil mb -l REGION gs://YOUR_OUTPUT_BUCKET_NAME
Clone o repositório do aplicativo 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.
Altere para o diretório que contém o código de amostra do Cloud Functions:
Node.js
cd nodejs-docs-samples/functions/v2/imagemagick/
Python
cd python-docs-samples/functions/v2/imagemagick/
Go
cd golang-samples/functions/functionsv2/imagemagick/
Java
cd java-docs-samples/functions/v2/imagemagick/
Como entender 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
Como analisar imagens
A função a seguir é invocada quando é feito upload de uma imagem no bucket do Cloud Storage criado para a entrada 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
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 faz upload da imagem desfocada para o bucket de saída.
Node.js
Python
Go
Java
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 nodejs-blur-function \ --gen2 \ --runtime=nodejs16 \ --region=
É possível usar os seguintes valores para a sinalizaçãoREGION
\ --source=. \ --entry-point=blurOffensiveImages \
--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:nodejs16
(recomendado)nodejs14
nodejs12
nodejs10
Python
gcloud functions deploy python-blur-function \ --gen2 \ --runtime=python310 \ --region=
É possível usar os seguintes valores da sinalizaçãoREGION
\ --source=. \ --entry-point=blur_offensive_images \
--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)python39
python38
python37
Go
gcloud functions deploy go-blur-function \ --gen2 \ --runtime=go116 \ --region=
É possível usar os seguintes valores para a sinalizaçãoREGION
\ --source=. \ --entry-point=blur-offensive-images \
--trigger-bucket=YOUR_INPUT_BUCKET_NAME \
--set-env-vars=BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME--runtime
para especificar sua versão Go preferencial:go116
(recomendado)go113
go111
Java
gcloud functions deploy java-blur-function \ --gen2 \ --runtime=java17 \ --region=
É possível usar os seguintes valores da sinalizaçãoREGION
\ --source=. \ --entry-point=functions.ImageMagick \ --memory=512MB \
--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
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. Para esse exemplo específico, não incluags://
como parte dos nomes dos buckets no comandodeploy
.
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.Você verá a análise da imagem nos registros:
gcloud beta functions logs read YOUR_FUNCTION_NAME --gen2 --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:
- No console, 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 nodejs-blur-function --gen2 --region REGION
Python
gcloud functions delete python-blur-function --gen2 --region REGION
Go
gcloud functions delete go-blur-function --gen2 --region REGION
Java
gcloud functions delete java-blur-function --gen2 --region REGION
Também é possível excluir o Cloud Functions do Console do Google Cloud.