Amazon Web Services ブログ

Amazon Rekognition Video を使用して、大規模なコンテンツを簡単に管理できる自動アラートシステムを構築する

ビデオを制作したり、ビデオを見るのに時間を費やしたり、ビデオを共有したりする人々が急激に増えつつあります。今日制作されるビデオの大半はユーザーが作成したコンテンツですが、こうしたコンテンツをそのまま公開するとリスクが生じます。不適切なコンテンツや望ましくないコンテンツを削除して、顧客にとって肯定的なウェブサイト体験を確保するために、企業はスケーラブルなコンテンツモデレーションプロセスが必要です。

このブログ記事では、Amazon Rekognition Video を使用してコンプライアンスとモデレーションを強化するために、ビデオコンテンツを評価するためのサーバーレスアーキテクチャを構築する方法を説明します。顧客 (特にメディアやエンターテインメント企業) は、対象者の年齢に応じたコンテンツを構築したり、ビデオで不適切なコンテンツを識別したりするために、ビデオを分類するという課題に直面しています。Amazon Rekognition Video は、物体の経路を追跡し、アクティビティを検出し、物体、有名人、コンテンツのタイプを認識する、深層学習による動画分析サービスです。Amazon Rekognition Video は明示的で疑わしいコンテンツを検出できるため、アプリケーションやコンプライアンスの要件に基づいてビデオをフィルタリングできます。

従来、ビデオ内でのコンプライアンスは企業にとって手作業であり、ビデオを検証するには完全に視聴する必要がありました。このプロセスは時間がかかり、スケーラビリティがなく、間違いが発生する可能性がありました。私たちが提案するソリューションは、オペレータの手作業の効率を大幅に改善し、レビューされるビデオコンテンツの量を減らし、レビュー担当者はフラグが立てられたコンテンツにのみ集中することができます。このブログ記事で使用されているサーバレスソリューションは Amazon Rekognition であり、費用対効果に優れたスケーラブルなコンテンツモデレーションプロセスを顧客に提供します。これは、企業がビデオをモニターし公開するのに役立ちながら、肯定的な顧客体験を保証し、潜在的な評価に関するリスクを限定します。

ソリューションを起動するには、次の AWS CloudFormation スクリプトを使用します。

 

ソリューションのアーキテクチャ概要

この例では、不要なコンテンツのフラグが設定されているビデオのコンテンツ管理者に警告する、実際のユースケースに近い例を取り上げます。コンテンツのパイプラインに統合するために、Amazon S3 イベントを使用するワークフロートリガー (新しいアセットの到着)、Amazon DynamoDB を使用するコンテンツメタデータストレージ、および Amazon Glacier を使用するデジタルアセットアーカイブで表現します。この例では、最小限のコードベースによって、Amazon Simple Notification Service(SNS)、AWS Lambda、Amazon Rekognition を使用するサーバーレスワークフローのカップリングのシンプルさを示しています。

アセットを取り込む Amazon S3 バケットにメディアをアップロードした直後に処理が開始されます。Amazon S3 イベント通知が、ビデオファイルで StartContentModeration API アクションを開始するビデオプロセッサ Lambda 関数をトリガーします。Amazon Rekognition Video によるメディア処理の完了ステータスは、Amazon SNS を介して取得され、次にコンテンツ警告 Lambda 関数をトリガーします。この Lambda 関数は、GetContentModeration API アクションを使用してモデレーションラベルを取得し、ラベルを解析し、SNS トピックを介して警告します。SNS トピックに登録されているチームには、ファイルの名前と存在するモデレーションラベルの数がすぐに通知されます。完全なモデレーションラベルの情報は、タイムスタンプとともにデータベースに保存されます。S3 バケットのビデオファイルは、低コストのアーカイブストレージを提供する Amazon Glacier にアーカイブするために送信され、これで処理パイプラインが完成します。

練習の目的のため、水泳のシーンのビデオを使用します。ビデオが処理されると、このソリューションは次のアラート通知を提供します。

ソリューションの詳細

私たちのビデオプロセッサ Lambda 関数は、アセットの Amazon S3 への到着によってトリガーされ、これにより Amazon Rekognition Video API がコンテンツのモデレーションを開始します。Amazon Rekognition によって実行される分析のために取得された JobId は、Amazon DynamoDB テーブルに保存されます。Lambda 関数からの次のコードスニペットは、Amazon Rekognition をトリガーしてビデオコンテンツのモデレーションを開始し、JobId 情報を DynamoDB テーブルに配置する方法を示しています。

response = rekognition.start_content_moderation(Video={"S3Object": {"Bucket": bucket,"Name": key}}, MinConfidence=50,ClientRequestToken=token,
NotificationChannel={"SNSTopicArn": snstopic,"RoleArn": rolearn},JobTag=jobtag)

jobId=response["JobId"]

table.put_item(Item={'jobid': jobId, 'videoname': key, 'Token':token, 'ContentModeration': i})

Amazon Rekognition がビデオ処理を完了すると、NotificationChannel で指定された Amazon SNS トピックに完了ステータスがパブリッシュされます。SNS トピックにパブリッシュされる有効なステータス値は、「SUCCEEDED」、「FAILED」、または「ERROR」です。大きなビデオファイルの解析の状態を確認するには、Get 操作の応答 (GetContentModeration など) の JobStatus の値を確認します。値が「IN_PROGRESS」であれば、分析はまだ完了しておらず、完了ステータスはまだ SNS トピックにパブリッシュされていません。

コンテンツアラート機能は SNS メッセージによってトリガーされ、まず SUCCEEDED メッセージを確認して GetContentModeration API 操作を開始します。AWS Step Functions を使用して、FAILED または ERROR ステータスを処理することができます。Lambda 関数からの次のコードスニペットは、Amazon Rekognition をトリガーしてビデオコンテンツのモデレーションを開始し、JobId 情報を DynamoDB テーブルに配置する方法を示しています。

responseGet = rekognition.get_content_moderation(JobId=job, MaxResults=123, SortBy="TIMESTAMP")

table.put_item(Item={'VideoName': vfile, 'Timestamp': tstamp, 'Confidence':confidence, 'ModerationLabel':name, 'ModerationCategory':parentName})

最後に、パイプラインを完成させるために、低コストで長期間の深いアーカイブで終わる従来のメディア処理ワークフローのように、ソースオブジェクトが Amazon Glacier に移行することでライフサイクルを完了できるようにします。

実装

このアーキテクチャを AWS にデプロイする手順は、次のステップで構成されています。

ステップ 1。 AWS CloudFormation をダウンロードする。

  • CloudFormation スクリプト (Yaml ファイル) をこのリンクを使ってダウンロードする。
  • CloudFormation スクリプトを S3 バケットまたはローカルに保存する。

ステップ 2。 CloudFormation スクリプトを実行する。

  • AWS マネジメントコンソールにログインし、CloudFormation コンソールを選択する。
  • CloudFormation コンソールで、[Create stack] を選択する。
  • [Choose a template] で、ステップ 1 でダウンロードした CloudFormation スクリプト (Yaml ファイル) を指定する。
  • [Next] を選択する。

ステップ 3。 スタックを起動する。

  1. スタックの入力パラメータを入力する: スタック名 – 作成したスタックを追跡する一意の名前を指定する。
  2. S3MediaBucket – 作成する S3 バケットの一意の名前を指定する。バケット命名規則
  3. DynamoDBMetadataTableName – ビデオ内の不適切なシーンのメタデータを保存するためのデータベースを指定する。
  4. DynamoDBVideoAnalysisTableName – jobid などのファイル情報を保存するためのデータベースを指定する。
  5. EmailAddr – ビデオに不適切なコンテンツが含まれている場合、警告する有効な E メールアドレスを指定する。

ステップ 4。 CloudFormation のアクセス許可を設定する。

  • [Next] を選択して、AWS が、作成したコンポーネントに基づいて IAM ロールの作成を処理するようにする。

ステップ 5。 E メールの登録を確認する。

  • CloudFormation スタックが CREATE COMPLETE ステータスになったら、入力パラメータとして指定した E メールアドレスの受信ボックスをチェックする。
  • スタック作成時に指定した E メールアドレスに送信された E メールで、[Confirm subscription] を選択する。

ステップ 6。 ソリューションを実行する。

  • ステップ 1 (S3MediaBucket) で説明した S3 バケットに、.mp4 形式のビデオファイルをロードする。
  • ステップ 2 (DynamoDBMetadataTableName) で説明した DynamoDB テーブルにあるビデオのコンテンツモデレーションのラベルを確認する。
  • ステップ 2 (EmailAddr) で説明した E メールアドレスに送信されたアラート通知を、不適切なコンテンツで強調表示されたシーンの総数とともに表示する。

まとめ

ユーザ生成コンテンツ (UGC) が急速に増加するにつれ、企業が不適切なコンテンツの存在を事前に自らおよびユーザに警告する必要性が高まっています。ウェブサイトが UGC をどのように管理するかは、しばしばオンラインブランドのアイデンティティにとって不可欠な部分です。このブログは、特に顧客がブランドアイデンティティを構築するのを支援することに焦点を当てています。


今回のブログ投稿者について

Suman Koduri は、アマゾン ウェブ サービスのシニアテクニカルアカウントマネージャーです。彼は、エンタープライズサポートの顧客と協力し、AWS プラットフォームを最大限に活用するための技術的なガイダンスと支援を提供しています。空き時間には、ハーフマラソンを走ったり、バイクに乗るのが大好きです。