En este tutorial se muestra cómo usar funciones de Cloud Run, la API Cloud Vision e ImageMagick para detectar y desenfocar imágenes ofensivas que se suban a un segmento de Cloud Storage.
Visualizar el flujo de datos
El flujo de datos en la aplicación del tutorial de ImageMagick consta de varios pasos:
- Se sube una imagen a un segmento de Cloud Storage.
- La función analiza la imagen mediante la API Vision.
- Si se detecta contenido violento o para adultos, la función usa ImageMagick para desenfocar la imagen.
- La imagen desenfocada se sube a otro segmento de Cloud Storage para usarla.
Preparar la aplicación
Crea un segmento de Cloud Storage para subir imágenes. Para ello, sustituye
YOUR_INPUT_BUCKET_NAME
por un nombre de segmento único a nivel mundial:gcloud storage buckets create gs://YOUR_INPUT_BUCKET_NAME
Crea un segmento de Cloud Storage para recibir las imágenes desenfocadas, donde
YOUR_OUTPUT_BUCKET_NAME
es un nombre de segmento único a nivel global:gcloud storage buckets create gs://YOUR_OUTPUT_BUCKET_NAME
Clona el repositorio de aplicaciones de muestra en la máquina local:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
También puedes descargar el ejemplo como un archivo ZIP y extraerlo.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
También puedes descargar el ejemplo como un archivo ZIP y extraerlo.
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
También puedes descargar el ejemplo como un archivo ZIP y extraerlo.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
También puedes descargar el ejemplo como un archivo ZIP y extraerlo.
Ruby
git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git
También puedes descargar el ejemplo como un archivo ZIP y extraerlo.
Cambia al directorio que contiene el código de ejemplo de Cloud Run 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/
Ruby
cd ruby-docs-samples/functions/imagemagick/
Información sobre el código
Importar dependencias
La aplicación debe importar varias dependencias para interactuar con los servicios deGoogle Cloud , ImageMagick y el sistema de archivos:
Node.js
Python
Go
Java
Ruby
Analizar imágenes
La siguiente función se invoca cuando se sube una imagen al segmento de Cloud Storage que has creado para almacenar imágenes. La función usa la API Vision para detectar contenido violento o para adultos en las imágenes subidas.
Node.js
Python
Go
Java
Ruby
Desenfoque de imágenes
La siguiente función se llama cuando se detecta contenido violento o para adultos en una imagen subida. La función descarga la imagen ofensiva, usa ImageMagick para difuminarla y, a continuación, sube la imagen difuminada sobre la original.
Node.js
Python
Go
Java
Ruby
Desplegar la función
Para desplegar la función con un activador de almacenamiento, ejecuta el siguiente comando en el directorio que contiene el código de ejemplo (o el archivo pom.xml
en el caso de Java):
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
Go
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
Haz los cambios siguientes:
RUNTIME
: un tiempo de ejecución basado en Ubuntu 18.04 (los tiempos de ejecución posteriores no incluyen compatibilidad con ImageMagick).YOUR_INPUT_BUCKET_NAME
: el nombre del segmento de Cloud Storage para subir imágenes.YOUR_OUTPUT_BUCKET_NAME
: el nombre del segmento en el que se deben guardar las imágenes borrosas.
En este ejemplo concreto, no incluyas gs://
como parte de los nombres de los contenedores
en el comando deploy
.
Subir una imagen
Sube una imagen ofensiva, como esta de un zombi carnívoro:
gcloud storage cp zombie.jpg gs://YOUR_INPUT_BUCKET_NAME
donde
YOUR_INPUT_BUCKET_NAME
es el segmento de Cloud Storage que has creado anteriormente para subir imágenes.Consulta los registros para asegurarte de que las ejecuciones se han completado:
gcloud functions logs read --limit 100
Puedes ver las imágenes desenfocadas en el
YOUR_OUTPUT_BUCKET_NAME
segmento de Cloud Storage que has creado antes.