Procesamiento de Imágenes con API de Cloud Vision de Google
Clase 10 de 22 • Curso de Firebase 5: Cloud Functions
Resumen
¿Cómo se integra Google Vision API para validar imágenes?
Google Vision API es una poderosa herramienta que nos permite validar el contenido de las imágenes sin necesidad de modificar el frontend de nuestras aplicaciones. Esto es posible gracias a la creación de clientes a través de sus bibliotecas y la ejecución de funciones específicas para detectar y clasificar contenidos potencialmente inapropiados en imágenes. Analicemos cómo lograr esta integración paso a paso.
¿Qué es un cliente de Vision API?
Para utilizar Google Vision API, empezamos creando un cliente de "ImageAnnotatorClient". Esta instancia es fundamental, ya que nos permite enviar imágenes a Google y recibir etiquetas sobre su contenido, evaluandoasí si la imagen contiene material violento, adulto o médico.
const vision = require('@google-cloud/vision');
const client = new vision.ImageAnnotatorClient();
¿Cómo descargar una imagen desde un bucket?
Para procesar una imagen con Vision API, primero necesitamos descargarla desde un bucket de almacenamiento en la nube. Utilizamos el método file
para indicar la imagen a descargar y download
para especificar su destino en nuestro entorno temporal de Cloud Fusion.
const bucket = storage.bucket('nombre-del-bucket');
await bucket.file('ruta/al/archivo.jpg').download({destination: '/tmp/ruta-de-archivo'});
¿Cómo se valida una imagen con Google Vision API?
Una vez descargada, la imagen se pasa a la función safeSearchDetection
del cliente de Vision para analizar su contenido. Esta función aplica algoritmos de machine learning para asegurarse de que la imagen es segura.
const [result] = await client.safeSearchDetection('/tmp/ruta-de-archivo');
const detections = result.safeSearchAnnotation;
¿Cómo interpretar los resultados de la detección?
Los resultados devueltos por Vision API indican la probabilidad de que la imagen contenga contenido específico. Clasificamos estos resultados en variables como adulto
, violencia
, y médico
.
const adulto = detections.adult;
const violencia = detections.violence;
const médico = detections.medical;
¿Qué se hace con los resultados?
El siguiente paso es comparar estos valores con etiquetas predefinidas para determinar si la imagen es adecuada. Si la imagen es apropiada, se actualiza el estado en la base de datos para que la imagen se publique. Si no, se notifica al usuario que la imagen no es adecuada.
if (esAdecuada(adulto) && esAdecuada(violencia) && esAdecuada(médico)) {
await actualizarEstadoDelPost(idPost, true);
} else {
await enviarNotificacion(idPost);
}
¿Cómo se gestionan las funciones de actualización en el backend?
¿Cómo se actualiza el estado de un post?
Usamos una función para buscar por ID el post en la base de datos y cambiar su estado de publicación.
async function actualizarEstadoDelPost(idPost, estado) {
// Lógica para actualizar el estado del post en Firestore
}
¿Cómo se envía una notificación al usuario?
Cuando la imagen no es apropiada, se debe notificar al usuario. Se utiliza el token del post para enviar un mensaje a través de Firebase.
async function enviarNotificacion(idPost) {
// Lógica para enviar la notificación al usuario
}
¿Cuáles son los beneficios de usar Google Vision API sin modificar el frontend?
La gran ventaja de usar Google Vision API directamente desde el backend es que potencialmente podemos integrar funcionalidades avanzadas de detección de contenido sin tocar si quiera el código del frontend. Esta separación de responsabilidades permite a equipos de desarrollo trabajar de manera más eficiente, aumentando el valor ofrecido a los usuarios sin la necesidad de cambios significativos en la interfaz de usuario.
Este enfoque no solo mejora la rapidez del desarrollo, sino que también favorece la escalabilidad y seguridad al gestionar contenido potencialmente inapropiado de forma centralizada antes de que llegue a ser publicado. Esto demuestra una de las más grandes eficiencias que proporciona Google Cloud en el manejo de contenido multimedia.