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 documento, você usará 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
- 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, Artifact Registry, Eventarc, Cloud Storage, Cloud Vision, Logging, and Pub/Sub 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, Artifact Registry, Eventarc, Cloud Storage, Cloud Vision, Logging, and Pub/Sub APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Prepare seu ambiente de desenvolvimento.
Se a gcloud CLI já estiver instalada, atualize-a executando o seguinte comando:
gcloud components update
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.
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/
Entenda o código
O exemplo do ImageMagick inclui dependências e duas funções diferentes. A primeira função analisa a imagem, e a segunda a desfoca se ela tiver conteúdo violento ou adulto.
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:
Observação: o ImageMagick e a ferramenta de linha de comando convert
estão incluídos por padrão
no ambiente de execução do Cloud Functions para a maioria dos
ambientes de execução. Para PHP, talvez seja necessário fazer uma
configuração manual.
Observe que o Cloud Functions não oferece suporte à instalação de pacotes personalizados no nível
do sistema.
Node.js
Python
Go
Java
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
Desfocar imagens
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
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=RUNTIME \ --region=REGION \ --source=. \ --entry-point=blurOffensiveImages \ --trigger-bucket=YOUR_INPUT_BUCKET_NAME \ --set-env-vars=BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME
Python
gcloud functions deploy python-blur-function \ --gen2 \ --runtime=RUNTIME \ --region=REGION \ --source=. \ --entry-point=blur_offensive_images \ --trigger-bucket=YOUR_INPUT_BUCKET_NAME \ --set-env-vars=BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME
Go
gcloud functions deploy go-blur-function \ --gen2 \ --runtime=RUNTIME \ --region=REGION \ --source=. \ --entry-point=blur-offensive-images \ --trigger-bucket=YOUR_INPUT_BUCKET_NAME \ --set-env-vars=BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME
Java
gcloud functions deploy java-blur-function \ --gen2 \ --runtime=RUNTIME \ --region=REGION \ --source=. \ --entry-point=functions.ImageMagick \ --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 ou em versões mais recentes.
- REGION: o nome da
região do Google Cloud em que você quer implantar sua função
(por exemplo,
us-west1
). - 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.
Ao implantar funções de 2a geração, especifique o nome do bucket sem o
gs://
inicial. por exemplo, --trigger-event-filters="bucket=my-bucket"
.
Faça o 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.
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.
Exclua o projeto
O jeito mais fácil de evitar cobranças é excluir 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.
Excluir a Função do Cloud
A exclusão de Cloud Functions 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 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.