Amazon Web Services ブログ

Amazon Rekognition Video と Amazon Kinesis Video Streams を使用してサーバーレスのビデオ分析環境を構築し、ライブフィードをベースにした顔分析を簡単に実行する

ビデオを撮影し、保存するとろこまではごく一般的に行われていますが、そのビデオに主要人物、場所、またはものが映り込んでいるかどうかは、だれかが画面の前に座って、そのビデオを見る時間がとれるまで分析されることはありませんでした。  深層学習を活用した使い勝手の良いサービスを使用して、ビデオを分析するプロセスを合理化し、自動化できるとしたらどうでしょう?

Amazon Rekognition Video は、人物を追跡したり、活動を検出したり、物体、有名人、および不適切なコンテンツを認識したりする、深層学習を使用した動画分析サービスです。Amazon Rekognition Video は、ライブストリーム内の顔を検出して認識できます。Rekognition Video は、Amazon S3 に保存されている既存のビデオを分析し、活動、人物と顔、物体を示すラベルをタイムスタンプ付きで返すため、シーンを簡単に見つけることができます。Amazon Kinesis Video Streams からライブビデオの顔認識を実行することも可能です。Amazon Kinesis Video Streams を使用することで、分析、機械学習 (ML)、およびその他の処理のために、接続されたデバイスから AWS へ動画を簡単かつ安全にストリーミングできるようになります。

今回のブログ記事では、自分で顔認識機能をテストする方法をご紹介します。この機能を利用することで、ライブビデオフィードから、既知の個人の顔情報を集めた特定の顔情報コレクションに一致する顔がそのビデオに含まれているかを判別することもできます。 これらの例としては、要人、参考人、会社や組織の特定の人々、または個々のユースケースで意味をなすあらゆる種類の顔情報コレクションが挙げられます。

サーバーレスアーキテクチャの概要

以下はこのブログ記事でご紹介するビデオ分析フローを図式化したものです。このコレクションでは単一の顔を使用しますが、容易に数百万の顔情報コレクションに拡張することができます。

このブログ記事では、Amazon Kinesis Video Stream にライブフィードを送信するためにあなたのノート PC のウェブカムを使用します。 そこから Amazon Rekognition Video のプロセッサがフィードを分析し、私たちの作成したコレクションと比較します。  一致した結果は、AWS Lambda と Amazon Simple Notification Service (Amazon SNS) との統合によりメールで私たちに送信されます。

結果を理解する

次に、ライブのビデオストリームで顔情報が特定されたときに、Amazon Rekognition Video からの結果を見てみます。この結果はウェブカムのフィードに既知または未知の顔が現れたときに、Amazon SNS を介して通知を送信するため、私たちの Lambda 関数へと送信します。

Rekognition Video のストリームプロセッサは各ビデオストリームのフラグメントについて、Kinesis Data Stream へメッセージを出力します。次にこの出力部分について、細かく見ていきましょう。

InputInformation: これには、どのビデオストリームで顔が検出されたか、ライブストリームのフラグメント番号、ビデオとサーバーの生成元、そして、秒単位のオフセットなどの情報が含まれます。

StreamProcessingInformation: Rekognition Stream プロセッサのステータス。これは結果の読み書き中、基本的に常時「RUNNING」 (実行中) になります。

FaceSearchResponse: このセクションにはライブビデオフィードで検出された顔のリストが含まれます。 フィードで検出された各顔情報には、境界ボックスのメタデータ、信頼スコア、ランドマークロケーションのほか、ストリームプロセッサの開始時に使用された顔コレクションに一致した顔 (存在する場合) が含まれます。

次の例では、セクションに顔が含まれるものの、その顔情報が顔コレクションに一致しないセグメントを示しています。

次に異なる例として、2 件の顔が識別されたが、コレクションに一致したのは 1 件のみであったセグメントの例を示します。

最初の例では、MatchedFaces 情報を調べれば、外部イメージ ID (この例では「Snively」) のほか、検出された顔が一致したと判定する根拠となった一致信頼スコアを示しています。

例を示します。

環境を設定する

注意: 次のステップではマシン上に AWS CLI が構成済みであることを前提としています。構成が済んでいないときは、ここで詳しい手順をご覧ください。 https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html

これは容易に設定できます。ご使用の環境を整え、コンピュータのウェブカムのビデオを認識するための簡単なステップを実行するだけです。

このブログ記事で解説されている本ビデオ分析ストリーム/ソリューションのほとんどをユーザーのためにセットアップする AWS CloudFormation スタックがあります。このスタックは次のイメージの点線で囲まれたセクションに含まれるコンポーネントを作成します。

CloudFormation スクリプトを開始したあとは、クラウドサービスの残りのセットアップステップと、Kinesis Video Stream 用のビデオプロデューサにウェブカムをチューニングする方法を順序立てて説明していきます。

  1. 次のリンクを使用すると、自動的に us-east-1: CloudFormation Stack で新しい CloudFormation Stack を開始します。

  1. [Next] (次へ) を選択します。

  1. メール アドレス (SNS 通知で使用される) を入力して [Next] (次へ) を閉じます。

  1. [Next] (次へ) を選択します。
  2. 確認のチェックボックスをオンにしてから [Create] (作成) を選択します。

  1. CloudFormation Stack が作成されるのを待ちます。

ステータスに CREATE_COMPLETE と表示されたら、完了したことを意味します。

  1. 次に、コマンドラインで AWS CLI を使用し、このブログ用の顔コレクションを作成しましょう。

aws rekognition create-collection --collection-id rekVideoBlog --region us-west-2

  1. 続いて、先程作成したコレクションに顔を追加しましょう (あなたの写真を使用してください)。

最初に、us-east-2 リージョンの Amazon S3 バケットにあなたの写真をアップロードします。続いて、S3BUCKET、MYFACE_KEY を、バケットとアップロード元のバケットの場所で置き換えます。YOURNAME にはあなたの名前を入力してください。これはあなたの顔が検出されたとき、外部イメージ ID として使用されます。

aws rekognition index-faces --image '{"S3Object":{"Bucket":"<S3BUCKET>","Name":"<MYFACE_KEY>.jpeg"}}' --collection-id "rekVideoBlog" --detection-attributes "ALL" --external-image-id "<YOURNAME>" --region us-west-2

FaceDetail レコードが返されるはずです。  これが例の最初の部分です。

これで、ライブのカメラフィードで顔が検出されとき通知に使用する顔コレクションが登録されました。もちろん、このコレクションには何百万人分もの顔を追加できます。

  1. 次に、接続するウェブカム用の Kinesis Video Stream を作成します。

a. Kinesis Video ストリームコンソールを開き、us-west-2 リージョンで開始します。

https://us-west-2.console.aws.amazon.com/kinesisvideo/streams?region=us-west-2

b. [Create] (作成) を選択します。

c.

c. 「LiveRekognitionVideoAnalysisBlog」という名前を付けます。

d. デフォルトのままでビデオストリームを作成します。

ビデオプロセッサを作成する

ストリームプロセッサには Kinesis データストリームと Kinesis ビデオストリームに関する情報が含まれます。また、入力ストリーミングビデオ上で認識したい顔を含むコレクションの ID が含まれます。

以下は ARN_VIDEO_STREAM_YOU_CREATED が表示される場所の例です。

Kinesis Video Stream ARN:

CloudFormation スクリプトの Outputs が表示される場所の例:

  1. 次の情報を含む JSON ファイルを作成します。
{
       "Name": "streamProcessorForBlog",
       "Input": {
              "KinesisVideoStream": {
                     "Arn": "<ARN_VIDEO_STREAM_YOU_CREATED>"
              }
       },
       "Output": {
              "KinesisDataStream": {
                     "Arn": "<KINESIS_DATA_STREAM IN_CLOUDFORMATION_OUTPUT>"
              }
       },
       "RoleArn": "<IAM_ROLE_ARN_IN_CLOUDFORMATION_OUTPUT>",
       "Settings": {
              "FaceSearch": {
                     "CollectionId": "rekVideoBlog",
                     "FaceMatchThreshold": 85.5
              }
       }
}
  1. ストリーム プロセッサを作成するための CLI コマンドを実行します。

aws rekognition create-stream-processor --region us-west-2 --cli-input-json file://<PATH_TO_JSON_FILE_ABOVE>

  1. 次にストリームプロセッサを開始します。

aws rekognition start-stream-processor --name streamProcessorForBlog --region us-west-2

コマンドをご覧いただくと、ストリーム名がストリームプロセッサを作成するのに使用した JSON ファイルの名前と一致するのがおわかりいただけるはずです。

  1. 次のように list コマンドを実行することで、ストリームプロセッサが実行中の状態かどうかを確認できます。

aws rekognition list-stream-processors --region us-west-2

以下の例ではまだ開始中です。

{
    "StreamProcessors": [
        {
            "Status": "STARTING", 
            "Name": "streamProcessorForBlog"
        }
    ]
}

これは実行中であることを意味します。

{
    "StreamProcessors": [
        {
            "Status": "RUNNING", 
            "Name": "streamProcessorForBlog"
        }
    ]
}

ライブフィードとなるウェブカムを構成する

このブログでは次の場所にある AWS Labs GitHub リポジトリの標準 Amazon Kinesis Video Streams Producer SDK を使用します。

https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp#building-from-source

リポジトリには Kinesis Video Stream に書き込むための方法が複数含まれます。 これらには皆さんの Mac または PC のウェブカム、Raspberry Pi プロジェクト、その他のメソッドを使用するネイティブ SDK である gstreamer アプリケーションが含まれています。

私たちはソースからリポジトリのネイティブセクションを構築していきますが、このブログ記事用にはウェブカムを使用する gstreamer アプリケーションを活用します。これを実行するために Raspberry Pi や他のメソッドを使用する必要はありません。

まず、ネイティブプロジェクトを構築する前に、すべての事前要件が満たされていることを確認してください。ネイティブプロジェクトの構築後、次の環境変数を設定します。

注意: 下記のように、AWS の変数名にはすべて大文字を使用してください。

export AWS_ACCESS_KEY_ID=<FILL_IN>

export AWS_SECRET_ACCESS_KEY=<FILL_IN>

その後、次のコマンドを実行します:

。/kinesis_video_gstreamer_sample_app LiveRekognitionVideoAnalysisBlog

注意: デフォルトリージョンが us-west-2 に設定されます。 このブログ記事で使用するリージョンとは別のリージョンをご使用になる場合は、リージョン変数も設定する必要があります。

SNS サブスクリプションを確認する

CloudFormation スクリプトを開始すると、SNS サブスクリプションの一部で入力したメールアドレスが自動的に使用されます。次のような確認メッセージが表示されます。

ウェブカムで既知および未知の人物が検出されると通知が届きます。

例を示します。

クリーンアップ

次のクリーンアップを実行すると Rekognition ストリームプロセッサを停止し、このブログ記事中で作成した全コンポーネントが削除されます。

  1. Stream プロセッサを停止および削除します。

aws rekognition stop-stream-processor --name streamProcessorForBlog --region us-west-2

aws rekognition delete-stream-processor --name streamProcessorForBlog --region us-west-2

  1. Rekognition コレクションを削除します。

aws rekognition delete-collection --collection-id rekVideoBlog --region us-west-2

  1. Kinesis Video Stream を削除する

Kinesis Video コンソールに移動します。

「LiveRekognitionVideoAnalysisBlog」ビデオストリームを選択し、[Delete] (削除) を選択します。

  1. CloudFormation Stack を削除します。

CloudFormation コンソールに移動し、RekognitionVideoBlog を選択します。 [Actions] (アクション) ボタンを選択し、スタックを削除して確認します。

まとめ

サーバーを全く介することなく、リアルタイムのライブビデオフィード、顔分析、通知システムを構築しました。Amazon Kinesis Video Streams を使用すると、分析、機械学習 (ML)、およびその他の処理のために、接続されたデバイスから AWS へ動画を簡単かつ安全にストリーミングできるようになります。


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

Ben Snively は AWS パブリックセクタースペシャリストソリューションアーキテクトです。 同氏は、政府機関、非営利団体、教育機関のお客様のビッグデータ/分析や AI/ML 分析プロジェクトに協力して、AWS を使用するソリューションの構築を支援しています。