https://d226lax1qjow5r.cloudfront.net/blog/blogposts/how-to-build-a-video-moderation-application-with-aws-rekognition/blog_video-api_moderation_1200x600.png

Cómo crear una aplicación de moderación de Video con AWS Rekognition

Publicado el May 25, 2021

Tiempo de lectura: 3 minutos

En los espacios de educación y eventos en particular, añadir una moderación activa en los vídeos de los participantes puede ser muy útil, ya que permite bloquear el contenido inapropiado de los demás. La aplicación que construyamos con este tutorial también te permitirá guardar datos durante la llamada y ejecutar análisis posteriores a la llamada sobre las actuaciones de detección.

En esta entrada de blog, implementaremos una aplicación de Moderación de Video utilizando la API de Video de Vonage y AWS Rekognition. La aplicación moderará el video publicado por Camera y Screen sharing para cada uno de los editores en la sesión. Si la aplicación detecta contenido inapropiado, silenciará el vídeo del editor infractor y enviará una notificación a todos los participantes.

¿Quieres avanzar? Puedes encontrar el código de este tutorial en GitHub y el Video tutorial y demo en Youtube

Requisitos previos

  1. Una cuenta de Video API de Vonage. Si aún no tienes una, puedes crear una Account en el Panel de Video

  2. Una cuenta de Account AWS

Arquitectura de proyectos

Schema showing project architectureSchema showing project architecture

El backend de la aplicación se implementa con componentes de AWS Serverless, como AWS Lambda, AWS API Gateway, AWS DynamoDB y el servicio AWS Rekognition.

El backend está contenido en la carpeta src/functions. Hay dos funciones principales:

  • api/room.jsgestiona la creación de la sala en DynamoDB y asigna el ID de sesión de la API de Video de Vonage al nombre específico de la sala.

  • api/moderation.jsAWS Rekognition: recibe la imagen base64 del cliente, la envía al servicio AWS Rekognition y devuelve el resultado al cliente.

La función de sala recibe un parámetro llamado roomName. Basándose en el parámetro roomNamecomprueba si la sala existe. En caso afirmativo, devuelve el sessionId relacionado con la sala existente y el token para unirse a la sala. En caso contrario, crea una nueva sessionId, la guarda en DynamoDB y devuelve las credenciales (sessionId y token).

La función de moderación recibe las imágenes de la cámara del lado del cliente o de la pantalla compartida. Antes de enviar la imagen al servidor de AWS Rekognition, la función las descodifica en formato base64.

const AWS = require("aws-sdk");
const Rekognition = new AWS.Rekognition();
const config = require("../config.json");

function detectModerationLabels(imageBuffer) {
  var params = {
    Image: {
      Bytes: imageBuffer,
    },
    MinConfidence: Number(config.AWS_REKOGNITION_MIN_CONFIDENCE),
  };
  return Rekognition.detectModerationLabels(params).promise();
}

A continuación, llama a la detectModerationLabels función La función detectModerationLabels devuelve los objetos detectados y la confianza. Si no se identifica ningún objeto, la función devuelve una matriz vacía. En caso contrario, la función devuelve al cliente una matriz con el objeto identificado.

Cliente

La aplicación del lado del cliente es una React Single Page Application. El punto de entrada del proyecto es el archivo src/client/index.js . El archivo index importa el archivo App, que contiene la definición de Rutas y Componentes.

Páginas

Las rutas se definen en el archivo App.js. El código utiliza el módulo react-router-dom para declarar las rutas. Hay dos rutas principales:

  • Sala de espera: El usuario puede configurar sus ajustes de micrófono y cámara y realizar una prueba previa a la llamada en esta página. A continuación, puede unirse a la videollamada.

  • Sala de Video: El usuario puede conectarse a la sesión, publicar su flujo y suscribirse a cada flujo dentro de la sala.

La clave a tener en cuenta en la página de la Sala de Video es el gancho personalizado: useModeration (hooks/useModeration). El useModeration envía cada segundo una captura de pantalla de la cámara (o de la pantalla) a la función API de moderación.

Para la retransmisión en directo, lo ideal es contar con un proceso que extraiga periódicamente fotogramas y utilice la API de Rekognition basada en imágenes para su análisis. Esto le permite obtener la respuesta de detección de forma asíncrona y también le permite ampliar su proceso de IA/ML en el futuro (la mayoría de los modelos de aprendizaje automático se basan en la imagen). Por lo tanto, enviar una captura de pantalla cada segundo es un buen compromiso entre la detección de contenido en directo y el uso de CPU/ancho de banda del cliente que utiliza la aplicación de vídeo. Para obtener la captura de pantalla del flujo, la aplicación utiliza la función getImgData proporcionada por el SDK de Video.

useInterval(
    () => {
      if (
        currentPublisher &&
        !currentPublisher.isLoading() &&
        currentPublisher.stream &&
        currentPublisher.stream.hasVideo &&
        isModerationActive
      ) {
        sendImage(currentPublisher.getImgData()).then((res) => {
          if (res && res.error) {
            return;
          }
          if (res && res.data && res.data.labels && res.data.labels.length) {
            setModerationLabels(parseModerationLabels(res.data.labels));
            setWarnOpenSnackbar(true);
            setCameraIsInappropriate(res.data.innapropriate);
          }
        });
      }
    },
    isIntervalRunning ? intervalDelay : null
  );

Si la función de moderación detecta contenido inapropiado, el gancho useModeration hook muestra una barra de advertencia al editor actual y desactiva su webcam o pantalla durante un periodo de tiempo definido (por ejemplo, 10 segundos). El gancho también envía una señal a los demás participantes informándoles de que el vídeo del editor ha sido desactivado por contenido inapropiado.

Conclusión

Esta publicación muestra cómo integrar una API de moderación de contenido, AWS Rekognition, en la Video API de Vonage. La forma en que la aplicación reacciona ante el contenido inapropiado es completamente personalizable en función de su caso de uso: puede silenciar el audio/vídeo del editor o incluso desconectar forzosamente al usuario y prohibirle que vuelva a unirse a la sesión.

Para obtener más información sobre cómo moderar contenido mediante la API de Video de Vonage, consulta este artículo.

Recursos: https://github.com/nexmo-se/video-api-aws-moderation

Compartir:

https://a.storyblok.com/f/270183/400x266/5bd495df3c/enrico-portolan.png
Enrico PortolanAutor invitado

Enrico es un antiguo miembro del equipo de Vonage. Trabajó como ingeniero de soluciones, ayudando al equipo de ventas con su experiencia técnica. Es un apasionado de la nube, las startups y las nuevas tecnologías. Es cofundador de una startup WebRTC en Italia. Fuera del trabajo, le gusta viajar y probar tantas comidas raras como sea posible.