En este instructivo, se muestra cómo usar Cloud Functions, ImageMagick y la API de Google Cloud Vision 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 Cloud 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 Functions
- Cloud Storage
- Cloud Vision
- Cloud Build
- Pub/Sub
- Artifact Registry
- Eventarc
- Cloud Logging
Para obtener detalles, consulta Precios de Cloud Functions.
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Antes de comenzar
- Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.
-
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.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.
-
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 función de Cloud Functions analiza la imagen con la API de Cloud Vision.
- Si se detecta contenido violento o destinado a adultos, la función de Cloud Functions 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 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:gsutil mb -l REGION gs://YOUR_INPUT_BUCKET_NAME
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:gsutil mb -l REGION 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.
Ve al directorio que contiene el código de muestra de Cloud Functions, como sigue:
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 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 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 Cloud 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 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 funciones de 2ª gen., especifica el nombre del bucket solo sin el
gs://
inicial; por ejemplo: --trigger-event-filters="bucket=my-bucket"
.
Suba una imagen
Sube una imagen ofensiva, como la imagen de un zombi que come carne humana:
gsutil 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, haz lo siguiente:
- En la consola de Google Cloud, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.
Borra la función de Cloud Functions
Borrar las funciones de Cloud 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 funciones de Cloud Functions en la consola de Google Cloud.