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
- Implementar una función de Cloud Functions en segundo plano 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
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.
-
En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.
-
Habilita las API de Cloud Functions, Cloud Build, Cloud Storage, and Cloud Vision.
- Instala Google Cloud CLI.
-
Para inicializar la CLI de gcloud, ejecuta el siguiente comando:
gcloud init
-
En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.
-
Habilita las API de Cloud Functions, Cloud Build, Cloud Storage, and Cloud Vision.
- Instala Google Cloud CLI.
-
Para inicializar la CLI de gcloud, ejecuta el siguiente comando:
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 de Cloud Storage para subir imágenes, en el que
YOUR_INPUT_BUCKET_NAME
es un nombre de bucket único a nivel global:gsutil mb 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:gsutil mb 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 Functions, como sigue:
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 con el fin de interactuar con los servicios de Google Cloud Platform, 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 Cloud 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 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 blurOffensiveImages \ --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 \ --runtime=RUNTIME \ --trigger-bucket=YOUR_INPUT_BUCKET_NAME \ --set-env-vars=BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME
Go
gcloud functions deploy BlurOffensiveImages \ --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 \ --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 \ --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 \ --runtime=RUNTIME \ --trigger-bucket=YOUR_INPUT_BUCKET_NAME \ --set-env-vars=BLURRED_BUCKET_NAME=YOUR_OUTPUT_BUCKET_NAME
PHP
gcloud functions deploy blurOffensiveImages \ --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:
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.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:
- 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 de Cloud Functions 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 Functions en la consola de Google Cloud.