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.
Objetivos
- Despliega una función de Cloud Run en segundo plano activada por almacenamiento.
- Usa la API Cloud Vision para detectar contenido violento o para adultos.
- Usa ImageMagick para difuminar imágenes ofensivas.
- Prueba la función subiendo una imagen de un zombi carnívoro.
Costes
En este documento, se utilizan los siguientes componentes facturables de Google Cloud:
- Cloud Run functions
- Cloud Storage
- Cloud Vision
Para generar una estimación de costes basada en el uso previsto,
utiliza la calculadora de precios.
Antes de empezar
- 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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, Cloud Storage, and Cloud Vision APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, Cloud Storage, and Cloud Vision APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
- Prepara tu entorno de desarrollo.
- 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.
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/
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.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.- 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.
Si ya tienes instalada la CLI de gcloud, actualízala ejecutando el siguiente comando:
gcloud components update
Visualizar el flujo de datos
El flujo de datos en la aplicación del tutorial de ImageMagick consta de varios pasos:
Preparar la aplicación
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:
En este ejemplo concreto, no incluyas gs://
como parte de los nombres de los contenedores
en el comando deploy
.
Subir una imagen
Limpieza
Para evitar que los recursos utilizados en este tutorial se cobren en tu cuenta de Google Cloud, elimina el proyecto que contiene los recursos o conserva el proyecto y elimina los recursos.
Eliminar el proyecto
La forma más fácil de evitar que te cobren es eliminar el proyecto que has creado para el tutorial.
Para ello, sigue las instrucciones que aparecen a continuación:
Eliminar la función
Si eliminas funciones de Cloud Run, no se eliminarán los recursos almacenados en Cloud Storage.
Para eliminar la función que has desplegado en este tutorial, 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
Ruby
gcloud functions delete blur_offensive_images
También puedes eliminar funciones de Cloud Run desde la Google Cloud consola.