Este tutorial demonstra a utilização de funções do Cloud Run, da Cloud Vision API e do ImageMagick para detetar e esbater imagens ofensivas carregadas para um contentor do Cloud Storage.
Visualizar o fluxo de dados
O fluxo de dados na aplicação de tutorial do ImageMagick envolve vários passos:
- Uma imagem é carregada para um contentor do Cloud Storage.
- A função analisa a imagem através da API Vision.
- Se for detetado conteúdo violento ou para adultos, a função usa o ImageMagick para esbater a imagem.
- A imagem esbatida é carregada para outro contentor do Cloud Storage para utilização.
A preparar a aplicação
Crie um contentor do Cloud Storage para carregar imagens, onde
YOUR_INPUT_BUCKET_NAME
é um nome de contentor globalmente único:gcloud storage buckets create gs://YOUR_INPUT_BUCKET_NAME
Crie um contentor do Cloud Storage para receber imagens esbatidas, em que
YOUR_OUTPUT_BUCKET_NAME
é um nome de contentor globalmente único:gcloud storage buckets create gs://YOUR_OUTPUT_BUCKET_NAME
Clone o repositório da app de exemplo para a sua máquina local:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.
Ir
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.
Ruby
git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git
Em alternativa, pode transferir o exemplo como um ficheiro ZIP e extraí-lo.
Altere para o diretório que contém o código de exemplo das funções do Cloud Run:
Node.js
cd nodejs-docs-samples/functions/imagemagick/
Python
cd python-docs-samples/functions/imagemagick/
Ir
cd golang-samples/functions/imagemagick/
Java
cd java-docs-samples/functions/imagemagick/
Ruby
cd ruby-docs-samples/functions/imagemagick/
Compreender o código
Importar dependências
A aplicação tem de importar várias dependências para interagir com os Google Cloud serviços, o ImageMagick e o sistema de ficheiros:
Node.js
Python
Ir
Java
Ruby
Analisar imagens
A seguinte função é invocada quando uma imagem é carregada para o contentor do Cloud Storage que criou para armazenar imagens. A função usa a API Vision para detetar conteúdo violento ou para adultos em imagens carregadas.
Node.js
Python
Ir
Java
Ruby
Esbater imagens
A função seguinte é chamada quando é detetado conteúdo violento ou para adultos numa imagem carregada. A função transfere a imagem ofensiva, usa o ImageMagick para esbater a imagem e, em seguida, carrega a imagem esbatida sobre a imagem original.
Node.js
Python
Ir
Java
Ruby
Implementar a função
Para implementar a sua função com um acionador de armazenamento, execute o seguinte comando no diretório que contém o código de exemplo (ou, no caso do Java, o ficheiro 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
Ir
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
Substitua o seguinte:
RUNTIME
: um tempo de execução baseado no Ubuntu 18.04 (os tempos de execução posteriores não incluem suporte para o ImageMagick).YOUR_INPUT_BUCKET_NAME
: o nome do contentor do Cloud Storage para carregar imagens.YOUR_OUTPUT_BUCKET_NAME
: o nome do contentor no qual as imagens esbatidas devem ser guardadas.
Para este exemplo específico, não inclua gs://
como parte dos nomes dos contentores
no comando deploy
.
Carregar uma imagem
Carregar uma imagem ofensiva, como esta imagem de um zombie carnívoro:
gcloud storage cp zombie.jpg gs://YOUR_INPUT_BUCKET_NAME
em que
YOUR_INPUT_BUCKET_NAME
é o contentor do Cloud Storage que criou anteriormente para carregar imagens.Monitorize os registos para se certificar de que as execuções foram concluídas:
gcloud functions logs read --limit 100
Pode ver as imagens esbatidas no contentor do Cloud Storage que criou anteriormente.
YOUR_OUTPUT_BUCKET_NAME