En este instructivo, se muestra cómo usar Cloud Run Functions, la API de Cloud Vision e ImageMagick para detectar y difuminar imágenes ofensivas que se suben a un bucket de Cloud Storage.
Objetivos
- Implementa una Cloud Run Function en segundo plano 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
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, Cloud Storage, and Cloud Vision 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, Cloud Storage, and Cloud Vision 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 función analiza la imagen con la API de Vision.
- Si se detecta contenido violento o destinado a adultos, la función usa ImageMagick para 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 de Cloud Storage para subir imágenes, en el que
YOUR_INPUT_BUCKET_NAME
es un nombre de bucket único a nivel global:gcloud storage buckets create gs://YOUR_INPUT_BUCKET_NAME
Crea un bucket de Cloud Storage para recibir las imágenes difuminadas, donde
YOUR_OUTPUT_BUCKET_NAME
es un nombre de bucket único a nivel global:gcloud storage buckets create gs://YOUR_OUTPUT_BUCKET_NAME
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.
C#
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
De manera opcional, puedes descargar la muestra como un archivo ZIP y extraerla.
Ruby
git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git
De manera opcional, puedes descargar la muestra como un archivo ZIP y extraerla.
PHP
git clone https://github.com/GoogleCloudPlatform/php-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/imagemagick/
Python
cd python-docs-samples/functions/imagemagick/
Go
cd golang-samples/functions/imagemagick/
Java
cd java-docs-samples/functions/imagemagick/
C#
cd dotnet-docs-samples/functions/imagemagick/
Ruby
cd ruby-docs-samples/functions/imagemagick/
PHP
cd php-docs-samples/functions/imagemagick/
Comprende el código
Importa dependencias
La aplicación debe importar varias dependencias para interactuar con los servicios de Google Cloud, ImageMagick y el sistema de archivos:
Node.js
Python
Go
Java
C#
Ruby
PHP
Analiza 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
C#
Ruby
PHP
Difumina 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 sobre la imagen original.
Node.js
Python
Go
Java
C#
Ruby
PHP
Implementa la función
Para implementar tu función 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 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
PHP
gcloud functions deploy blurOffensiveImages \ --no-gen2 \ --runtime=RUNTIME \ --trigger-bucket=YOUR_INPUT_BUCKET_NAME \ --set-env-vars=BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME
Reemplaza lo siguiente:
RUNTIME
: Es un entorno de ejecución que se basa en Ubuntu 18.04 (los entornos de ejecución posteriores no incluyen compatibilidad con ImageMagick).YOUR_INPUT_BUCKET_NAME
: Es 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.
Para este ejemplo en particular, no incluyas gs://
como parte de los nombres de buckets en el comando deploy
.
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.Revisa los registros para asegurarte de que las ejecuciones se completaron:
gcloud functions logs read --limit 100
Puedes ver las imágenes desenfocadas en el bucket de Cloud Storage
YOUR_OUTPUT_BUCKET_NAME
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 función
Borrar las funciones de Cloud Run 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 blurOffensiveImages
Python
gcloud functions delete blur_offensive_images
Go
gcloud functions delete BlurOffensiveImages
Java
gcloud functions delete java-blur-function
C#
gcloud functions delete csharp-blur-function
Ruby
gcloud functions delete blur_offensive_images
PHP
gcloud functions delete blurOffensiveImages
También puedes borrar funciones de Cloud Run en la consola de Google Cloud.