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

Comment créer une application de modération vidéo avec AWS Rekognition ?

Publié le May 25, 2021

Temps de lecture : 3 minutes

Dans les espaces éducatifs et événementiels notamment, l'ajout d'une modération active sur les vidéos des participants peut s'avérer très utile, car elle permet de bloquer les contenus inappropriés des autres. L'application que nous construisons avec ce tutoriel vous permettra également de sauvegarder des données pendant l'appel et de lancer des analyses post appel sur les performances de détection.

Dans cet article de blog, nous allons mettre en œuvre une application de Video Moderation en utilisant Video API de Vonage de Vonage et AWS Rekognition. L'application modérera la vidéo publiée par Caméra et partage d'écran pour chacun des éditeurs dans la session. Si l'application détecte un contenu inapproprié, elle mettra en sourdine la vidéo de l'éditeur incriminé et enverra une notification à tous les participants.

Vous voulez aller plus loin ? Vous pouvez trouver le code de ce tutoriel sur GitHub et le tutoriel vidéo et la démo sur Youtube

Conditions préalables

  1. Un compte Video API de Vonage. Si vous n'en avez pas encore, vous pouvez créer un Account dans le Tableau de bord Video

  2. Un compte Un Account AWS

Architecture du projet

Schema showing project architectureSchema showing project architecture

Le backend de l'application est mis en œuvre à l'aide de composants AWS Serverless tels que AWS Lambda, AWS API Gateway, AWS DynamoDB et le service AWS Rekognition.

Le backend est contenu dans le dossier src/functions. Il existe deux fonctions principales :

  • api/room.js: gère la création de la salle dans DynamoDB et attribue l'identifiant de session de l'API Video de Vonage au nom de la salle en question.

  • api/moderation.jsLe service AWS Rekognition : reçoit l'image base64 du client, envoie l'image au service AWS Rekognition et renvoie le résultat au client.

La fonction room reçoit un paramètre appelé roomName. En se basant sur le paramètre roomNameelle vérifie si la salle existe. Si c'est le cas, elle renvoie le sessionId relatif à la salle existante et le jeton pour rejoindre la salle. Si ce n'est pas le cas, il crée un nouveau sessionId, l'enregistre dans DynamoDB et renvoie les informations d'identification (sessionId et token).

La fonction de modération reçoit les images de la caméra côté client ou du partage d'écran. Avant d'envoyer les images au serveur AWS Rekognition, la fonction les décode au format 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();
}

Ensuite, il appelle la detectModerationLabels fonction. La fonction detectModerationLabels renvoie les objets détectés et la confiance. Si aucun objet n'est identifié, la fonction renvoie un tableau vide. Dans le cas contraire, la fonction renvoie au client un tableau contenant l'objet identifié.

Côté client

L'application côté client est une application à page unique React. Le point d'entrée du projet est le fichier src/client/index.js (fichier d'index). Le fichier d'index importe le fichier App, qui contient la définition des routes et des composants.

Pages

Les routes sont définies dans le fichier App.js. Le code utilise le module react-router-dom pour déclarer les routes. Il existe deux routes principales :

  • Salle d'attente : L'utilisateur peut définir les paramètres de son microphone et de sa caméra et effectuer un test préalable à l'appel sur cette page. Il peut ensuite participer à l'appel vidéo.

  • Video Room : L'utilisateur peut se connecter à la session, publier son flux et s'abonner à chaque flux de la salle.

L'élément clé à noter sur la page de la Video Room est le crochet personnalisé : useModeration (hooks/useModeration). Le crochet useModeration envoie toutes les secondes une capture d'écran de la caméra (ou de l'écran) à la fonction API de modération.

Pour la diffusion en direct, l'idéal est de disposer d'un processus permettant d'extraire périodiquement des images et d'utiliser l'API Rekognition basée sur l'image pour l'analyse. Cela vous permet d'obtenir la réponse de détection de manière asynchrone et d'étendre votre processus d'IA/ML à l'avenir (la plupart des modèles d'apprentissage automatique sont basés sur l'image). Par conséquent, l'envoi d'une capture d'écran toutes les secondes est un bon compromis entre la détection de contenu en direct et l'utilisation du CPU/de la bande passante du client qui utilise l'application vidéo. Pour obtenir une capture d'écran du flux, l'application utilise la fonction getImgData fournie par le SDK 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 fonction de modération détecte un contenu inapproprié, le hook useModeration affiche une barre d'avertissement pour l'éditeur actuel et désactive sa webcam ou son écran pendant une période définie (par exemple, 10 secondes). Le crochet envoie également un signal aux autres participants leur indiquant que la vidéo de l'éditeur a été désactivée en raison d'un contenu inapproprié.

Conclusion

Cet article montre comment intégrer une API de modération de contenu, AWS Rekognition, dans l'API Video de Vonage. La façon dont l'application réagit au contenu inapproprié est entièrement personnalisable en fonction de votre cas d'utilisation - elle peut couper l'audio/vidéo de l'éditeur, ou même déconnecter de force l'utilisateur et lui interdire de rejoindre à nouveau la session.

Pour plus de détails sur la façon dont vous pouvez modérer le contenu à l'aide de l'API Video de Vonage, jetez un coup d'œil à cet article.

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

Partager:

https://a.storyblok.com/f/270183/400x266/5bd495df3c/enrico-portolan.png
Enrico PortolanAuteur invité

Enrico est un ancien membre de l'équipe Vonage. Il a travaillé en tant qu'ingénieur de solutions, aidant l'équipe de vente avec son expertise technique. Il est passionné par le cloud, les startups et les nouvelles technologies. Il est le cofondateur d'une startup WebRTC en Italie. En dehors du travail, il aime voyager et goûter autant d'aliments bizarres que possible.