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

AWS RekognitionでVideo Moderationアプリケーションを構築する方法

最終更新日 May 25, 2021

所要時間:1 分

特に教育やイベントスペースでは、参加者のビデオにアクティブモデレーションを追加することは、他の人からの不適切なコンテンツをブロックすることが可能になるため、非常に便利です。このチュートリアルで作成するアプリケーションは、通話中のデータを保存し、通話後の検出パフォーマンスに関する分析を実行することもできます。

このブログ投稿では、Video Moderationアプリケーションを実装します。 VonageビデオAPIAWS Rekognition.このアプリケーションは、カメラと画面共有によって公開されたビデオを、各公開者のセッションでモデレートします。アプリケーションが不適切なコンテンツを検出した場合、問題のあるパブリッシャーのビデオをミュートし、すべての参加者に通知を送信します。

先に進みたいですか?このチュートリアルのコードは GitHubに、チュートリアルとデモのビデオは Youtube

前提条件

  1. Video APIアカウント。まだアカウントをお持ちでない場合は ビデオダッシュボード

  2. AWSアカウント AWSアカウント

プロジェクト・アーキテクチャ

Schema showing project architectureSchema showing project architecture

アプリケーションのバックエンドは、AWS Lambda、AWS API Gateway、AWS DynamoDB、AWS RekognitionサービスなどのAWS Serverlessコンポーネントを使用して実装されています。

バックエンドは src/functions フォルダにあります。主な関数は2つあります:

  • api/room.jsDynamoDB でルームの作成を処理し、Vonage Video API の sessionId を特定のルーム名に割り当てます。

  • api/moderation.js: クライアントからbase64の画像を受け取り、AWS Rekognitionサービスに画像を送信し、結果をクライアントに送り返す。

ルーム関数は roomName.というパラメーターを受け取ります。 roomNameに基づいて、部屋が存在するかどうかをチェックする。存在する場合は sessionIdを返します。存在しない場合は、新しい sessionIdを作成し、DynamoDBに保存し、クレデンシャル(sessionIdとtoken)を送り返す。

モデレーション機能は、クライアント側のカメラまたは画面共有から画像を受信します。AWS Rekognitionサーバーに画像を送信する前に、この関数は画像を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();
}

そして detectModerationLabels関数を呼び出す。そして detectModerationLabels関数は検出されたオブジェクトと信頼度を返す。オブジェクトが検出されなかった場合,関数は空の配列を返します.そうでない場合、関数は識別されたオブジェクトを含む配列をクライアント側に返します。

クライアント側

クライアント側のアプリケーションはReactのシングル・ページ・アプリケーションです。プロジェクトのエントリー・ポイントは src/client/index.jsファイルです。インデックスファイルは、ルートとコンポーネントの定義を含むAppファイルをインポートします。

ページ

ルートはApp.jsファイルで定義されている。コードでは react-router-domモジュールを使います。主なルートは2つあります:

  • 待合室:ユーザーは、このページでマイクとカメラの設定を行い、通話前テストを行うことができます。その後、ビデオ通話に参加できます。

  • Videoルーム:ユーザーはセッションに接続し、ストリームを公開し、ルーム内の各ストリームを購読することができます。

Video Roomページで注意すべき点は、カスタムフックです: useModeration(hooks/useModeration)です。この useModerationフックは1秒ごとにカメラ (または画面) のスクリーンショットをモデレーション API 関数に送信します。

ライブストリーミングでは、定期的にフレームを抽出し、画像ベースのRekognition APIを使用して分析するプロセスを持つことが理想的です。これにより、非同期で検出応答を得ることができ、また将来的にAI/MLプロセスを拡張することができる(機械学習モデルのほとんどは画像に基づいている)。したがって、1秒ごとにスクリーンショットを送信することは、ライブコンテンツの検出と、ビデオアプリケーションを使用するクライアントのCPU/帯域幅の使用量の間の良い妥協点です。ストリームのスクリーンショットを取得するために、アプリケーションは getImgData関数を使用します。

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
  );

モデレーション機能が不適切なコンテンツを検出した場合 useModerationフックは現在のパブリッシャーに警告のスナックバーを表示し、定義された時間 (たとえば 10 秒間) ウェブカメラやスクリーンを無効にします。フックは他の参加者にも、不適切なコンテンツのためにパブリッシャーのビデオが無効化されたことを伝えるシグナルを送信します。

結論

この投稿では、Vonage Video API にコンテンツモデレーション API、AWS Rekognition を統合する方法を示します。アプリケーションが不適切なコンテンツにどのように反応するかは、ユースケースに応じて完全にカスタマイズ可能で、Publisher の音声/ビデオをミュートしたり、ユーザーを強制的に切断してセッションへの再参加を禁止したりすることもできます。

Vonage Video APIを使用してコンテンツを管理する方法の詳細については、次の記事を参照してください。 記事.

リソース https://github.com/nexmo-se/video-api-aws-moderation

シェア:

https://a.storyblok.com/f/270183/400x266/5bd495df3c/enrico-portolan.png
Enrico Portolanゲスト執筆者

エンリコはVonageの元チームメンバーです。ソリューション・エンジニアとして、技術的な専門知識で営業チームをサポートした。 クラウド、スタートアップ、新技術に情熱を注ぐ。イタリアのWebRTCスタートアップの共同設立者。仕事以外では、旅行とできるだけ多くの奇妙な食べ物を味わうのが好き。