En este instructivo, se muestra cómo usar Cloud Run Functions, la API de Vision y ImageMagick para detectar y difuminar imágenes ofensivas que se suben a un bucket de Cloud Storage.
Objetivos
- Implementa una función de CloudEvent activada por Storage.
- Usar la API de Vision para detectar contenido violento o destinado para adultos
- Usar ImageMagick para difuminar imágenes ofensivas
- Probar la función con solo subir una imagen de un zombi que come carne humana
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
- Cloud Run functions
- Cloud Storage
- Cloud Vision
- Cloud Build
- Pub/Sub
- Artifact Registry
- Eventarc
- Cloud Logging
For details, see Cloud Run functions pricing.
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Antes de comenzar
- 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
- Prepara tu entorno de desarrollo.
Si ya tienes instalado gcloud CLI, ejecuta el siguiente comando para actualizarla:
gcloud components update
Visualiza el flujo de datos
El flujo de datos en la aplicación de instructivo de ImageMagick incluye varios pasos como se muestra a continuación:
- Se sube una imagen a un bucket de Cloud Storage.
- La Cloud Run Function analiza la imagen con la API de Cloud Vision.
- Si se detecta contenido violento o para adultos, Cloud Run Function usa ImageMagick a fin de difuminar la imagen.
- La imagen difuminada se sube a otro bucket de Cloud Storage para su utilización.
Prepara la aplicación
Crea un bucket regional de Cloud Storage para subir imágenes, en el que
YOUR_INPUT_BUCKET_NAME
es un nombre de bucket único a nivel global yREGION
es la región en la que planeas implementar tu función:gcloud storage buckets create gs://YOUR_INPUT_BUCKET_NAME --location=REGION
Crea un bucket regional de Cloud Storage para recibir las imágenes difuminadas, donde
YOUR_OUTPUT_BUCKET_NAME
es un nombre de bucket único a nivel global yREGION
es la región en la que planeas implementar tu función:gcloud storage buckets create gs://YOUR_OUTPUT_BUCKET_NAME --location=REGION
Clona el repositorio de la app de muestra en tu máquina local:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
De manera opcional, puedes descargar la muestra como un archivo zip y extraerla.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
De manera opcional, puedes descargar la muestra como un archivo zip y extraerla.
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
De manera opcional, puedes descargar la muestra como un archivo ZIP y extraerla.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
De manera opcional, puedes descargar la muestra como un archivo zip y extraerla.
Ve al directorio que contiene el código de muestra de Cloud Run 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/
Examine el código
La muestra de ImageMagick incluye dependencias y dos funciones diferentes. La primera función analiza la imagen y la segunda función desenfoca la imagen si incluye contenido violento o para adultos.
Importa las dependencias
La aplicación debe importar varias dependencias para interactuar con los servicios de Google Cloud, ImageMagick y el sistema de archivos:
ImageMagick y su herramienta de línea de comandos convert
se incluyen de forma predeterminada
en el entorno de ejecución de Cloud Run Functions para la mayoría de los
entornos de ejecución. Para PHP, es posible que debas realizar una
configuración manual.
Ten en cuenta que Cloud Run Functions no admite la instalación de paquetes personalizados
a nivel del sistema.
Node.js
Python
Go
Java
Analiza las imágenes
Se invoca la siguiente función cuando una imagen se sube al bucket de Cloud Storage que creaste para almacenar imágenes. La función usa la API de Vision para detectar contenido violento o destinado para adultos en imágenes que se suben.
Node.js
Python
Go
Java
Desenfoca las imágenes
La siguiente función recibe una llamada cuando se detecta contenido violento o destinado para adultos en una imagen que se sube. La función descarga la imagen ofensiva, usa ImageMagick para difuminarla y, luego, sube la imagen difuminada al bucket de salida.
Node.js
Python
Go
Java
Implementa la función
Para implementar la función de Cloud Run Functions con un activador de almacenamiento, ejecuta el siguiente comando en el directorio que contiene el código de muestra (o en el caso de Java, el archivo 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
Reemplaza lo siguiente:
- RUNTIME: un entorno de ejecución que se basa en Ubuntu 18.04 o una versión posterior.
- REGION: el nombre de la
región de Google Cloud en la que deseas implementar tu función
(por ejemplo,
us-west1
). - YOUR_INPUT_BUCKET_NAME: el nombre del bucket de Cloud Storage para subir imágenes.
- YOUR_OUTPUT_BUCKET_NAME: el nombre del bucket en el que se deberían guardar las imágenes desenfocadas.
Cuando implementes Cloud Run Functions, especifica el nombre del bucket solo sin el
gs://
inicial; por ejemplo: --trigger-event-filters="bucket=my-bucket"
.
Sube una imagen
Sube una imagen ofensiva, como la imagen de un zombi que come carne humana:
gcloud storage cp zombie.jpg gs://YOUR_INPUT_BUCKET_NAME
donde
YOUR_INPUT_BUCKET_NAME
es el bucket de Cloud Storage que creaste previamente para subir imágenes.Deberías ver el análisis de la imagen en los registros:
gcloud beta functions logs read YOUR_FUNCTION_NAME --gen2 --limit=100
Puedes ver las imágenes desenfocadas en el
YOUR_OUTPUT_BUCKET_NAME
bucket de Cloud Storage que creaste antes.
Limpia
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.
Borra el proyecto
La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.
Para borrar el proyecto, sigue estos pasos:
- 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.
Borra la Cloud Run Function
Borrar las Cloud Run Functions no quita ningún recurso almacenado en Cloud Storage.
Para borrar la función que implementaste en este instructivo, ejecuta el siguiente 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
También puedes borrar Cloud Run Functions en la consola de Google Cloud.