Amazon Web Services ブログ

Amazon Kinesis Video Streams – コンピュータビジョン・アプリケーションのためのサーバーレスな動画データの収集と保存

携帯電話、防犯カメラ、ベビーモニター、ドローン、WEBカメラ、車載カメラ、さらには人工衛星まで、これらすべては高輝度で高品質の動画ストリームを生成できます。 住宅、オフィス、工場、都市、街路、高速道路は現在、膨大な数のカメラを備えています。これらのカメラは、洪水などの自然災害時に被害状況の調査を可能にし、公共の安全性を高め、子供が安全かつ健康であることを知らせ、無限に繰り返す「失敗」動画のための一瞬を補足し(個人的な趣味の話です)、身元の判定に役立つデータを集め、交通の問題を解決するなど、様々な場面で活用されます。

この動画データの洪水を扱うことは、言い表せないほど難しいことです。 入力ストリームには、個別に、または何百万という単位でデータが到着します。 ストリームには価値あるリアルタイムなデータが含まれており、遅延したり、一時停止したり、より適切なタイミングで処理するためにデータを脇に置いておいたりすることはできません。生のデータを取得すると、他の課題が発生します。動画データの保存、暗号化、索引作成などが頭に浮かびますね。価値を引き出すこと、つまりコンテンツに深く潜って、そこにあることを理解し、行動を起こすことは、次の大きなステップです。

新しい Amazon Kinesis Video Streams

2017年11月29日、リアルタイムストリーミングサービスであるAmazon Kinesisファミリーの新しいメンバーとして、Amazon Kinesis Video Streamsをご紹介します。 これによって、独自のインフラストラクチャを構築して動かすことなく、何百万ものカメラデバイスからストリーミング動画(または時系列にエンコードされたデータ)を取り込むことができます。 Amazon Kinesis Video Streamsは、入力ストリームを受け入れ、永続的かつ暗号化された形式で保存し、時間に基づいたインデックスを作成し、コンピュータビジョン・アプリケーションの作成を可能にします。 あなたはAmazon Recognition VideoやMXNetTensorFlow、OpenCV、または独自のカスタムコード、つまりクールな新しいロボットや、分析、あなたが考え出すコンシューマー・アプリケーションを支えるあらゆるコードを使用して、入力ストリームを処理することができます。

インフラストラクチャの全ては、私たちが管理します。まず、あなたはProducer SDK(デバイス側)を使用してアプリケーションを作成し、お好みのデバイスから動画を送信します。送信された動画は、安全なTLS接続を介して受信され、AWS Key Management Service (KMS)のキーで暗号化された後に、時間に基づいてインデックス化した形式で保存されます。次に、あなたはVideo Streams Parser Library(クラウド側)を使用して動画ストリームからデータを取り出し、そこから価値を引き出します。

どのくらいのデータを送信するかに関わらず、つまり低解像度でも高解像度でも、あるいは1台のデバイスからでも数百万台からでも、Kinesis Video Streamsはあなたのニーズに合わせてスケールします。私はこの台詞を飽きずに何度も言っていますが、あなたは自身のアプリケーションとビジネスに集中することができます。 Amazon Kinesis Video Streamsは、あなたが既に知っているAWSの機能の上に構築されています。コスト効率が高く耐久性があるS3に動画を保存しており、アクセス制御にAWS Identity Access Management(IAM)を使用して、AWSマネジメントコンソールAWSコマンドラインインターフェイス(CLI)、および一連のAPIからアクセスすることができます。

Amazon Kinesis Video Streams のコンセプト

コンセプトを一通りご紹介してから、ストリームを設定してみることにしましょう。

プロデューサー – プロデューサーは、データをストリームに入力するデータソースです。これらは、ベビーモニター、ドローンのビデオカメラ、またはもっとエキゾチックなもの(もしかすると温度センサーや人工衛星!)かもしれません。Amazon Kinesis Video Producer SDKは、接続の確立と動画のストリーミングを容易にする一連の機能を提供します。

ストリーム – ストリームは、ライブの動画データを転送し、必要に応じて保存し、リアルタイムまたはバッチで処理できるようにします。ストリームは、音声、レーダー、LiDAR(ライダー)、センサーの読み取り値などを含む、他の時系列にエンコードされたデータも運ぶことができます。ほとんどの場合で、プロデューサーとストリームの間には1対1の関係があります。独立した複数のアプリケーションが、一つのストリームからデータを取得して処理することができます。

フラグメントとフレーム – フラグメントは、ストリームからの個々の連続したフレームを一定の時間内で束ねた一つのまとまりです。

コンシューマー – コンシューマーは、ストリームからデータ(フラグメントまたはフレーム)を取得し、それを処理、分析、または表示します。 コンシューマーは、リアルタイムまたは事後に実行することができ、Video Streams Parser Libraryの上に構築されます。

Amazon Kinesis Video Streams の使用

先程述べたように、プロデューサーとストリームの間には1対1の関係があります。ほとんどの場合、プロデューサーの各インスタンスは、Kinesis Video Streams APIを使用して固有のストリームを作成します。ただし、テストやデモを目的とする場合や、少ない一定数のストリームのみを必要とする場合には、ストリームを手動で作成することもできます。

ストリームを手動で作成するときには、Kinesis Video Streamsのコンソール画面を開き、Create video stream をクリックします:

ストリームの名前を簡単に入力し、Create stream をクリックします:

ストリームの設定をカスタマイズしたいときには、Use default settings のチェックを外して設定を行うことができます(ほとんどの設定は後から変更可能です):

ストリームはすぐに使用できる状態になります。ストリーミングを開始するとすぐに、コンソール上に動画が表示されます:

Kinesisチームがこのスクリーンを私に共有してくれたのですが、私には実際に現場で見学する時間がありませんでした。だからチーター(ズル)なのでしょうか? (訳注:プロデューサーから動画データを送信すると、コンソール上で動画が再生されます。)

Amazon Kinesis Video Streams での開発

次のステップでは、Producer SDKを使用してプロデューサー・アプリケーションをビルドします。このアプリケーションは、デバイス上またはその外部で実行され、ストリームを作成して、PutMedia 関数を呼び出すことでストリームのフラグメント(通常は各々が2〜10秒の動画を表します)をストリームに送信する役割を持ちます。

コンシューマー側は、GetMedia および GetMediaFromFragmentList 関数を呼び出してMatroska(MKV)コンテナ・フォーマットのストリームからコンテンツにアクセスし、内包するVideo Streams Parser Libraryを使用して目的のコンテンツを抽出します。 GetMedia は、低レイテンシの連続的なストリーミング処理での使用を意図しています。一方 GetMediaFromFragmentList はバッチ指向であり、選択的な処理を可能にします。

今すぐ利用可能

Amazon Kinesis Video Streamは、米国東部(バージニア北部)、米国西部(オレゴン)、EU(アイルランド)、EU(フランクフルト)、アジアパシフィック(東京)の各リージョンで利用可能であり、本日2017年11月29日からコンピュータビジョン・アプリケーションの構築を開始することができます。

利用価格は、プロデューサーにより生成された動画の量、コンシューマーにより処理された動画の量、保存された動画の量、これら3つの要素に基づいています。

Jeff;

原文:Amazon Kinesis Video Streams – Serverless Video Ingestion and Storage for Vision-Enabled Apps
翻訳:SA山崎