Cloud Vision para moderar imágenes automáticamente

Clase 10 de 22Curso de Firebase 5: Cloud Functions

Resumen

La moderación automática de imágenes es clave para la confianza. Aquí verás cómo usar la API de Cloud Vision de Google para validar contenido con safe search, descargar archivos desde un bucket, y automatizar el estado del post y las notificaciones, todo desde Cloud Fusion y sin tocar el front end.

¿Cómo configurar el cliente de Vision y preparar el bucket?

Primero se definen variables y constantes para la librería de Vision y el bucket. Luego se crea el cliente de Vision instanciando la clase ImageAnnotatorClient. Con esto podrás invocar el análisis de imágenes.

  • Instalar e importar la librería de Vision.
  • Crear el cliente: una instancia de ImageAnnotatorClient.
  • Usar el bucket: identificar ruta del archivo y una ruta temporal en tmp.

Ejemplo de configuración e instalación en código:

// Cliente de Vision
const vision = require('@google-cloud/vision');
const client = new vision.ImageAnnotatorClient();

// Descarga desde el bucket a una ruta temporal
await bucket.file(rutaArchivo).download({ destination: tmpRutaArchivo });

¿Cómo aplicar safe search y obtener las anotaciones clave?

Con el archivo ya en la ruta temporal, se llama a la función de Vision para la detección de contenido seguro. Con una sola línea, Google aplica machine learning para evaluar si la imagen es apropiada.

  • Llamar al análisis: client.safeSearchDetection(tmpRutaArchivo).
  • Gestionar promesas: esperar el resultado antes de continuar.
  • Leer el arreglo de resultados: tomar la posición 0 cuando es una sola imagen.

Código de análisis y extracción de atributos:

const [result] = await client.safeSearchDetection(tmpRutaArchivo);
const safe = result.safeSearchAnnotation; // safeSearchAnnotation

const adulto = safe.adult;      // adult
const violento = safe.violence; // violence
const medico = safe.medical;    // medical

¿Qué atributos devuelve safe search?

  • adult: detección de contenido adulto.
  • violence: detección de contenido violento.
  • medical: detección de contenido médico.

Se evalúan contra etiquetas de probabilidad como likely o very. Una función interna, por ejemplo esAdecuada, compara si el resultado es diferente a esos valores para considerar la imagen apropiada.

const esApta = (
  esAdecuada(adulto) && esAdecuada(violento) && esAdecuada(medico)
);

¿Qué acciones automatizamos en base de datos y notificaciones?

Si la imagen es adecuada, se actualiza el estado del post para que pueda publicarse. Si no lo es, se envía una notificación al usuario que subió la imagen, usando el token que está guardado en el post.

  • Actualizar estado publicado: estado true cuando todo es adecuado.
  • Enviar notificación: al token asociado al post cuando es inapropiada.
  • Integración limpia: no se requiere cambiar nada del front end.

Flujo de decisión y acciones:

if (esApta) {
  await actualizarEstadoPost(idPost, true); // publicar
  return;
}

await enviarNotificacionRespuesta(idPost); // inapropiada

¿Qué hacen las funciones auxiliares en la base de datos?

  • actualizarEstadoPost: accede a la colección de posts por ID y cambia el campo publicado.
  • enviarNotificacionRespuesta: consulta el post, obtiene el token y envía el mensaje al usuario.

Así, con promesas bien manejadas y acceso controlado al bucket, se orquesta una moderación robusta: descargar, analizar, evaluar y actuar. Si deseas profundizar en consultas y envío de notificaciones, puedes revisarlo en el curso de Firebase para la web.

¿Tienes casos de uso que quieras automatizar con Cloud Vision o reglas distintas para contenido adulto, violento o médico? Cuéntalo y lo exploramos juntos.