Amazon Web Services ブログ
Realtek、Plumerai、Amazon Kinesis Video Streams を活用したエッジでの効率的な動画ストリーミングとビジョンAI
はじめに
エッジでの人工知能(AI)は、スマートビデオデバイスの分野で人気を集めています。例えば、スマートホームカメラやビデオドアベルは、家庭での監視システムに革命をもたらしました。 単なる録画と遠隔閲覧ツールだったものが、知的な観測者へと進化しました。AI の導入により、現在のカメラは常にシーンを分析し、モーションイベントをユーザーに通知し、顔なじみの顔を認識し、荷物の配達を検知し、録画動作を動的に調整できるようになりました。 エンタープライズ監視カメラも同様の例です。これらのカメラは優れた解像度と高性能なコンピューティング能力を備え、より高度な AI モデルを実現できます。 これらの機能強化により、より遠くからの鮮明な検出が可能になります。 顧客は、プライバシーを維持し、帯域幅コストを削減しながら、現地でデータを処理できる知能的な監視システムを求めています。 これらのニーズに対応するために、AWS Internet of Things(AWS IoT) チームは、Amazon Kinesis Video Streams、Realtek の低消費電力 Ameba Pro2 マイクロコントローラー、および Plumerai の効率的な機械学習モデルを組み合わせた、AWS パートナーとのスマートカメラソリューションを開発しました。 このブログ記事では、エッジでの人体検知アルゴリズム処理と連動したイベントトリガーによるビデオアップロードに関するガイダンスを提供します。
ソリューションアーキテクチャ
- まず、カメラ部分について説明します。デバイスのファームウェアには、定義済み API 経由でカメラモジュールにアクセスするための Realtek SDK が統合されています。
- 映像フラグメントは Plumerai の機械学習モデルに送信され、物体検出が行われます。
- サンプルアプリケーションは、検出結果をバウンディングボックスのオーバーレイとして元のビデオフラグメントに追加します。このサンプルは、Kinesis Video Streams Producer SDK を使用して、フラグメントを継続的にクラウドにアップロードします。(補足として、検出結果をトリガーとして 20 秒間の映像セグメントをアップロードするよう設定することも可能です。)
- Kinesis Video Streams Producer SDK は、HTTPS の持続的接続を使用する PutMedia API を使用し、MKV フラグメントをストリーミング方式で継続的にアップロードします。
- メディアデータは取り込まれ、サービスによって後の分析のためにすべてのメディアデータが永続的に保存されます。
- フロントエンドアプリケーションは、Kinesis Video Streams の HLS または DASH プロトコルを使用して、ライブ映像や録画済み映像を再生します。
- このソリューションでは、AI エージェントによる分析のため、映像と音声のデータを Large Language Models (LLMs) に送信します。(セマンティックビデオ検索については次回のブログで説明します。)
統合のポイント
Amazon Kinesis Video Streams の利用
Kinesis Video Streams によって、企業のIPカメラ、ロボット、自動車向けの映像ソリューションの在り方が大きく変わります。主な利点は次のとおりです。
- 完全マネージド型のアーキテクチャのため、エンジニアリングチームはインフラストラクチャではなくイノベーションに注力できます。特に、リソースが限られた企業に最適です。
- AWS SDK はオープンソース化されています。大手企業は特に、プラットフォームの制約に縛られないこの独立性を高く評価します。
- 柔軟な従量課金モデルを提供。デバイス開発に数か月から数年を要する場合でも、カメラが実運用されるまでコストはかかりません。一般的なクラウドストレージの利用率は30%以下で、年々使用量が減少するため、固定ライセンス料と比較してコストを大幅に抑えることができます。
Plumerai
Plumerai は埋め込み AI ソリューションに特化しており、特にディープラーニングを小規模かつ効率的にすることに注力しています。 Plumerai のモデルは、小型で手頃な価格の低電力ハードウェアでの推論をサポートします。 同社は、以下の方法で Realtek Ameba Pro2 プラットフォーム向けに AI モデルの最適化も行っています。
- アセンブリレベルの最適化により、Arm Cortex-M CPU のパフォーマンスを最大化し、DSP 命令を利用して拡張シグナルプロセッシング機能を実現できます。
- Neural Architecture Search (NAS) により、Realtek NPU およびメモリアーキテクチャに最適な AI モデルを選択し、0.4 TOPS の NPUアクセラレーションを実現します。
- Plumerai モデルは、Realtek オンチップハードウェアアクセラレータ (スケーラー、フォーマットコンバーター) を利用して計算負荷を軽減します。
- AI モデルは RTOS をサポートしており、SoC のリアルタイムオペレーティングシステムとシームレスに統合されます。
- このアプリケーションは Realtek のメディアストリーミングフレームワーク と統合されています。
- 高速ブート設計により、短時間で起動でき、バッテリー寿命が延びるだけでなく、動体検出の高速化も実現します。
- エッジ AI モデルは、3000 万枚の画像とビデオデータで学習されています。
これらの機能強化により、実際の運用環境では以下のような性能が実現されます:
- メモリの無駄なく精密に検出できます。
- 180 ° の広範囲レンズにより、広範囲の撮影が可能。
- 20 メートル (65 フィート) 以上離れた位置から人物を検出可能。
- 最大 20 人までを同時に追跡でき、混雑した状況でも対応可能。
- 固有の ID システムで個人を特定できる追跡が可能。
- 明るい日中から真っ暗闇まで、一貫した性能を発揮します。
Realtek Ameba Pro2
上図は、Realtek Ameba Pro2 のデータアーキテクチャを示しています。統合ビデオエンコーダ (IVE) と、メディアの生データを処理してビデオオフロードエンジン (VOE) に結果を渡すイメージシグナルプロセッサ (ISP) が含まれています。VOE は、複数のビデオチャネルと同時のビデオストリームを管理し、動体検出アルゴリズムをサポートします。ニューラルプロセッシングユニット (NPU) が、画像または画像領域の推論を実行します。並列処理ユニット (PPU) は、高解像度画像からの関心領域 (ROI) の切り出し、NPU 推論入力のリサイズ、高解像度チャネルからの最終出力の取得など、マルチタスク処理を担当します。このアーキテクチャにより、エッジでの映像分析において以下のような強力な機能が実現可能となります:
- 最大の効率を得るために最小限の CPU 電力で動作します。
- 動きに対してほぼリアルタイムで応答します。
- 起動シーケンス中でもビデオ処理を開始できます。
- セキュアな WiFi または Ethernet 経由で、SD カードとクラウドの両方にストリーミングできます。
- NPU を活用して優れた AI パフォーマンスを実現します。
- マルチメディアフレームワーク SDK を通じて、Plumerai モデルと Kinesis Video Streams に統合できます。
手順
このセクションでは、エッジ AI を実行し、動画のフラグメントをストリーミングするためのソリューションの構築手順の概要を説明します。
必要なもの
- 次の権限を持つ AWS アカウント:
- AWS コンソールへのログイン
- Kinesis Video Streams API (GetDataEndpoint、DescribeStream、PutMedia)
- Amazon Elastic Compute Cloud (Amazon EC2) インスタンスの作成 (SDK とバイナリをビルドするため)
- Kinesis Video Streams コンソールで作成された “kvs-plumerai-realtek-stream” という名前のストリームリソース。
- Realtek Ameba Pro2 Mini MCU。
- 組み込みシステムと Linux 環境での作業に関する基本的な知識。
- SDK をダウンロードし、AWS にビデオをアップロードするためのインターネット接続。
- Plumerai が提要するライブラリと機械学習モデルのファイル 。(Plumerai ウェブサイトでリクエストを送信してください。)
ビルド環境のセットアップ
このブログでは、ビルド環境として Ubuntu LTS 22.04 の Amazon EC2 を使用しています。 独自の Ubuntu コンピュータを使って SDK をクロスコンパイルすることもできます。
Amazon EC2 インスタンスのセットアップ:
- AWS 管理コンソールにサインインし、Amazon EC2 に移動します。
- 次の構成でインスタンスを起動します:
- インスタンス名: KVS_AmebaPlumerAI_poc
- アプリケーションと OS イメージ: Ubuntu Server 22.04 LTS (HVM)
- インスタンスタイプ: t3.large
- ログイン用の新しい秘密鍵作成: kvs-plumerai-realtek-keypair
- ストレージの設定: 100GiB
- SSH 接続を許可するため、SSH 接続に関する事前設定に従ってください。
GitHub からサンプルスクリプトをダウンロード:
- 次のコマンドを使用して、Amazon EC2 インスタンスにログインします (xxx.yyy.zzz をインスタンスの IP アドレスに置き換えてください)。詳細な手順は、SSH クライアントを使用して Linux インスタンスに接続するを参照してください。
ssh -o ServerAliveInterval = 60 -i kvs-plumerai-realtek-keypair.pem ubuntu @ 54.xxx.yyy.zzz git clone https://github.com/aws-samples/sample-kvs-edge_ai-video-streaming-solution.git cd ./sample-kvs-edge_ai-video-streaming-solution/KVS_Ameba_Plumerai
Plumerai ライブラリを取得する:
- Plumerai のお問い合わせフォームからリクエストを送信し、デモパッケージのコピーを受け取ってください。パッケージが手に入ったら、Amazon EC2 インスタンス内の「plumerai」ディレクトリをそのパッケージに置き換えてください。更新後のディレクトリ構造は以下のようになります。
Ameba SDK を入手する:
- 最新の Ameba Pro2 SDK を入手するには、Realtek にお問い合わせください。ディレクトリ構造においては、Amazon EC2 内の “ambpro2_sdk” を置き換えてください。ディレクトリ構造は以下のようになります:
依存関係のインストールと環境構築
- GitHub リポジトリの sample-kvs-edge_ai-video-streaming-solution ディレクトリ内にある setup_kvs_ameba_plumerai.sh スクリプトを実行します:
chmod +x setup_kvs_ameba_plumerai.sh./setup_kvs_ameba_plumerai.sh
スクリプトは自動的に、 Linux の依存関係のインストール、Realtek ツールチェーンのビルド、必要な Plumerai のパッチ実行、モデルファイルのコピー、Kinesis Video Streams Producer SDK のダウンロードを実行します。 プロセスでエラーが発生した場合は、Realtek または Plumerai へご連絡ください。
Kinesis Video Streams Producer SDK のサンプル設定
AWS の認証情報、ストリーム名、AWS リージョンを設定するには、以下を使用してください。これらは、component/example/kvs_producer_mmf/sample_config.h ファイルで確認できます。
// KVS general configuration
#define AWS_ACCESS_KEY "xxxxx"
#define AWS_SECRET_KEY "xxxxx"
// KVS stream configuration
#define KVS_STREAM_NAME "kvs-plumerai-realtek-stream"
#define AWS_KVS_REGION "us-east-1"
#define AWS_KVS_SERVICE "kinesisvideo"
#define AWS_KVS_HOST AWS_KVS_SERVICE "." AWS_KVS_REGION ".amazonaws.com"
/home/ubuntu/KVS_Ameba_Plumerai/ambpro2_sdk/component/example/kvs_producer_mmf/app_example.c ファイル内の example_kvs_producer_mmf();
と example_kvs_producer_with_object_detection();
をコメントアウトしてください。
//example_kvs_producer_mmf();
//example_kvs_producer_with_object_detection();
コンパイルとビルド
以下のコードを実行して KVS_Ameba_Plumerai ディレクトリに移動し、コンパイルとビルドの更新を行います。
cd ./KVS_Ameba_Plumerai
cmake -DVIDEO_EXAMPLE=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=../ambpro2_sdk/project/realtek_amebapro2_v0_example/GCC-RELEASE/toolchain.cmake -Sambpro2_sdk/project/realtek_amebapro2_v0_example/GCC-RELEASE -Bbuild
cmake --build build --target flash_nn
Ameba Pro2 の中のサンプルを実行
バイナリイメージのダウンロードと書き込み:
- Amazon EC2 インスタンスから flash_ntz.nn.bin バイナリイメージをローカルマシンにダウンロードします。例えば、以下のようなコマンドをローカルマシンで実行します( IP アドレスとフォルダパスは適切なものに変更してください):
scp -i kvs-keypair.pem ubuntu @ 54.64.xxx.xxx:/home/ubuntu/sample-kvs-edge_ai-video-streaming-solution/KVS_Ameba_Plumerai/build/flash_ntz.nn.bin ./flash_ntz.nn.bin
- Ameba Pro2 MCU を USB 経由でローカルマシンに接続し、両側のボタンを押してダウンロードモードに入ります。Realtek が提供する Ameba Pro2 イメージツールを使用して、バイナリイメージを書き込み、再起動します。
例えば、Windows 環境では以下のようなコマンドを使用します(ツールへのパスと COM ポート番号は環境に合わせて変更してください):
C:\Users\Administrator\Desktop\Pro2_PG_tool_v1.3.0>.\uartfwburn.exe -p COM3 -f flash_ntz.nn.bin -b 2000000 -U
Mac OS では以下のコマンドを使用してください。
./uartfwburn.arm.darwin -p /dev/cu.usbserial-110 -f ./flash_ntz.nn.bin -b 3000000
- 処理が完了すると、以下のような出力ログが表示されます:
WiFiの設定方法:
- 赤色 LED インジケーターの横にあるリセットボタンを押します。
- シリアルツールを使用して、以下のように設定します:
- Baud rate = 115200
- Data bits = 8
- Parity = None
- stop bits = 1, XON_OFF
- WiFi の設定情報を貼り付けます(ご使用のネットワークに合わせて情報を変更してください):
ATW0=myHotspotName ATW1=myPassword ATWC
- 入力が終わったら、Enter キーを押します。
- 処理が完了すると、以下のような出力ログが表示されます:
AWS マネジメントコンソールで映像を確認する
Ameba Pro2 を USB ポートに接続したまま、カメラを人の動きが撮影できる向きに設置します。
Kinesis Video Streamsのコンソールを開き、作成したビデオストリームを選択します。物体検出結果がバウンディングボックス付きで表示された映像を確認できます。
人物と顔を示すバウンディングボックス付きの映像フラグメントが、サービスに正常に取り込まれ、永続的に保存されました。
性能の概要
ラボでのテスト結果によると、エッジ上のアプリケーションはわずか 1.5MB の ROM スペースしか必要とせず、Ameba Pro2 の NPU に最適化されています。このファームウェアは CPU 使用率わずか 20% で、毎秒約 10 フレームの処理速度を実現しました。これにより、追加のアプリケーションを実行する余裕も十分に残されています。
コストとクリーンアップ
通常、コンパイルとテストの全工程は 10 時間程度で完了します。総コストは 5 米ドル未満です。Amazon EC2 の詳細な料金については「Amazon EC2 オンデマンドインスタンスの料金」を、Kinesis Video Streams については「Kinesis Video Streamsの料金」をご参照ください。このサンプルアプリケーションは以下の 3 つの部分で構成されています:
- Kinesis Video Streams へのデータ取り込み
- HLS を使用した Kinesis Video Streams からのデータ消費
- Kinesis Video Streams でのデータ保存
コストを節約するため、作成したリソースは以下の手順で削除してください:
- Amazon EC2 コンソールを開き、KVS_AmebaPlumerAI_poc インスタンスを終了
- Kinesis Video Streams コンソールを開き、kvs-plumerai-realtek-stream ストリームを削除
まとめ
ビデオアプリケーションの詳細については、以下を参照してください:
- Kinesis Video Streams からのメディアデータの使用
- Amazon Kinesis Video Streams のサンプル
- 迅速なテストと実験のための amazon-kinesis-video-streams-media-viewer
- AWS IoT YouTube チャンネルの「WebRTC 用 Amazon Kinesis Video Streamsでカメラを 10 分で接続」の動画
- AWS Black Belt オンラインセミナーの「Amazon Kinesis Video Streams 基礎編」「Amazon Kinesis Video Streams 応用編」
Amazon Kinesis Video Streams、Realtek、Plumerai の連携により、エッジビジョンAI と高度なビデオストリーミング機能を活用した最先端のホームセキュリティソリューションが実現しました。この統合システムは、スマートホームと企業向け監視市場の双方で高まりつつある AI/ML ビデオソリューションへの需要に応えるものです。また、このソリューションは、監視機能の向上、効率的な処理、シームレスなクラウド統合を提供することで、家庭やビジネスにおける AI を活用したセキュリティ強化の可能性を示しています。
デバイス上で直接 AI 検出を行うこのエッジファーストのアプローチにより、必要になるまでビデオデータをローカルに保持することができ、プライバシーを保護しながら帯域幅の使用を大幅に削減できます。インテリジェントなビデオソリューションへの需要が続く中、この技術は、スマート監視システムおよびビデオモニタリングシステムの分野における新たな基準を確立しています。
この記事は Zihang Huang、Marco Jacobs、Siva Somasundaram、Emily Chou によって書かれた Efficient video streaming and vision AI at the edge with Realtek, Plumerai, and Amazon Kinesis Video Streams の日本語訳です。この記事は ソリューションアーキテクトの深澤 真愛が翻訳しました。