はじめに
Jetpack 6.2 のリリースと同時に Jetson プラットフォームサービス (JPS: Jetson Platform Services) がバージョン 2.0 としてアップデート リリースされました。これは、以前リリースされた「Metropolis Microservices on Jetson (MMJ)」の進化形であり、Jetpack 內でのマイクロサービスのネイティブ統合が強化されています。現在のリリースは JetPack 6.1 GA (BSP R36.4.0) または JetPack 6.2 (BSP R36.4.3) で動作します。
本稿では、この JPS 2.0 の概要と、その中の「VLM ビデオ要約サービス」のデモについて説明します。
今回リリースされた JPS 2.0 の主なハイライトを以下に挙げます。詳細は、オンラインドキュメントの Release Notes (version 2.0) を參照してください。
- エッジ向けの軽量なビデオ要約および検索サービス
- NVIDIA Grounding-DINO モデルを使用したゼロショット検出用の新しい AI サービス
- Jetson Orin Nano Super のサポート (Jetpack 6.2 – Jetson Linux 36.4.3 のサポート)
- エッジとクラウド間の Metropolis 分析サービスの統合 API
Jetson プラットフォームサービスの概要
Jetson プラットフォーム サービスは、NVIDIA Jetson でのエッジ AI アプリケーションの開発、デプロイ、管理を簡素化するプラットフォームを提供します。これにより、開発者は大規模で複雑なアプリケーションを、小規模でモジュール式のマイクロサービスに分割し、他のアプリケーションやサービスと統合するための API を利用することができます。
その中核となるのは、生成 AI、ディープラーニング、および分析を活用した複數の AI サービスであり、動畫分析、動畫の理解と要約、テキスト ベースのプロンプト、ゼロ ショット検出、物體移動の時空間分析など、最先端の機能を提供します。
これらの機能は、既存の Metropolis エコシステムの Video Storage Toolkit (VST) や DeepStream などと組み合わせることで、視覚やその他のエッジ AI アプリケーション向けの完全なシステムを迅速に組み立てるための構成要素となります。

JPS には以下のサービスが含まれています。各サービスの詳細については、下記リンク先のオンラインドキュメントを參照してください。
- AI サービス (AI Services)
- NVIDIA ディープストリーム (DeepStream)
- ゼロショット検出 (Zero Shot Detection)
- 視覚言語モデル (Visual Language Models – VLM)
- グラウンディング DINO (Grounding DINO – GDINO)
- VLM ビデオ要約 (VLM Video Summarization)
- AI サービスのカスタマイズ (Customization)
- 基盤サービス (Foundation Services)
- ビデオ ストレージ ツールキット (Video Storage Toolkit)
- レディス (Redis)
- API ゲートウェイ – イングレス (Ingress)
- ストレージ (Storage)
- ネットワーキング (Networking)
- モニタリング (Monitoring)
- IoT ゲートウェイ (IOT Gateway)
- ファイヤーウォール (Firewall)
AI サービス
Jetson AI サービス (AI Services) は、最適化されたすぐに使用できるビデオ分析機能を提供し、定義された API を通じて活用することができます。これらのサービスは、他の Jetson プラットフォーム サービスと容易に統合することができ、カメラの検出とストリーミング (VST 経由)、動的ストリームの追加(SDR 経由)、マイクロサービス統合のためのメッセージ バス (Redis 経由) など、プロダクショングレードの機能をサポートするエンドツーエンドのアプリケーションを迅速に実現にします。
AI サービスは、通常、Docker-compose を通じてシステムに関連するコンテナーの大規模なデプロイメントの一部としてコンテナーとしてデプロイされます。このような統合の例は、Jetson プラットフォーム サービス リリースに含まれるさまざまなリファレンス ワークフローで紹介されています。REST API は、ストリームの追加/削除、モデルの操作、および構成に関連するさまざまな標準操作を定義しています。
生成 AI は AI サービスによってサポートされており、オープン ボキャブラリー サポートを通じた物體検出など、従來の課題を再定義するだけでなく、ビデオ入力と自然言語で対話できる視覚言語モデルを使用した新しいユース ケースを通じて、コンピューター ビジョンにおける前例のないユースケースを可能にします。
本稿の後半では、VLM ビデオ要約 (VLM Video Summarization) のデモを紹介します。
基盤サービス
基盤サービス (Foundation Services) は、カメラの検出やビデオ動畫の保存 (VST)、マイクロサービス用の API メカニズム (Ingress) や共有メッセージ バスの提供 (Redis) 、外部ストレージのマイクロサービスへの割り當て、ネットワークやシステム (CPU, GPU, EMC, 他) のモニタリング、IoT ゲートウェイやファイアウォールなど、アプリケーションのワークフローを開発するのに役立つマイクロサービスです。

クイック スタート
JPS のインストールやセットアップはこちらの Quick Start Guide で紹介されています。
ハードウェア:
- Jetson AGX Orin 開発者キット
- NVMe SSD (Linux システムやモデルのダウンロードなのの作業用に 256Gb 以上の容量の SSD を推奨します)
- その他 (オプション。ヘッドレスで使用する場合は必須ではありません)
- PC モニター
- キーボード
- マウス
ソフトウェア:
- Jetpack 6.1 GA (BSP R36.4.0) または Jetpack 6.2 (BSP R36.4.3)
【メモ】本稿の後半で紹介されている「VLM ビデオ要約」では、生成されたテキストの要約作成に OpenAI の API を使用しています。デモを実機で実行する場合は事前に OpenAI API キー (有料) を準備してください。
【メモ】実行中は、システムメモリを含めて合計 10G バイト前後のメモリを消費します (free コマンドでの確認結果)。従って、メモリの搭載量がそれ以下の Jetson Orin NX / Nano シリーズでは実行できないので注意してください。
インストール
JPS のインストールには、2 つの方法があります。
- SDK Manager を使って GUI から Jetson Platform Services をインストールする。
- Jetson のコマンドライン ターミナルから
apt
コマンドを使ってインストールする。(既に該當するバージョンの Jetpack、あるいは Jetson Linux (BSP) がインストールされている Jetson をお持ちの場合)
本稿後半の「VLM ビデオ要約サービス」では、上記 2 の方法を使用しています。
尚、サービスは docker のインスタンスとして起動します。事前に Jetson 上で nvidia-docker (NVIDIA Container Toolkit) が動作するようにセットアップしてください。SDK Manager で Jetson をセットアップし、Jetson Linux をインストールした場合は、既にセットアップされています。
VLM ビデオ要約サービス (VLM Video Summarization)
ここでは、JPS 2.0 で AI サービスの1つとして実裝された VLM ビデオ要約サービスのデモを紹介します。
映像録畫システムは大量のデータを収集しますが、重要なイベントは稀であり、イベントが発生するまでには長時間にわたることもありますが、その発生時間の長さに基づいて長い説明が必要とは限りません。これらの點から、効率的でかつ効果的な映像要約は、AI ベースの映像システムの全體的な有用性において重要な機能となります。生成 AI は、業界が積極的に研究してきた自然言語インターフェイスに基づく映像要約のための正確で一般化可能な技術を提供します。この映像要約マイクロサービスは、ユーザーがすぐに利用できる機能とデザインの要件に対応しています。その設計と機能は、NVIDIA が data center GPU 用にリリースした Video Search and Summarization (VSS) Agent Blueprint をモデルにしています。
ビデオ要約サービスの使用には、VSS ブループリントとの API 互換性を実現することを目的にした 2 段階のプロセスが含まれます。まず、ユーザーは files
API を介してファイルをアップロードし、ハンドルを取得します。その後、summarize API
を呼び出して要約機能を開始できます。
ビデオ要約マイクロサービスは、NVIDIA Jetson プラットフォーム向けの NanoLLM フレームワークに基づいています。
JPS のインストール
本稿の執筆にあたって今回は BSP R36.4.0 から BSP R36.4.3 へアップグレードした Jetson AGX Orin 開発者キット (32Gb 版) を使用しました。そのため、JPS パッケージのインストールには apt
コマンドによるインストールを行っていますが、SDK Manager を使い Jetpack と同時に JPS をインストールした場合は、この手順をスキップしてください。
詳細は、オンライン ドキュメント Quick Start Guide > Install も參照してください。
また、今回の Jetson AGX Orin 開発者キットはヘッドレス モードで使用しているため、Jetson へリモート ログインした SSH ターミナルからコマンドを入力しています。
sudo apt update
sudo apt install nvidia-jetson-services
Jetson パフォーマンス設定の更新
デバイスから最高のパフォーマンスを得たい場合は、オプションで次のように最大電力とクロック速度を設定できます。
sudo nvpmodel -m 0 ;# 再起動が必要です
sudo jetson_clocks
ビデオ要約サービスの設定と実行
Jetson の SSH ターミナルからコマンドを入力します (SSH ターミナルは 2 つ以上オープンしてください)。
これらのコマンドは、下記のリンクにあるオンライン ドキュメントに記載されていますので、そちらも併せて參照してください。
- オンライン ドキュメント – VLM Video Summarization > Running Video Summarization
さらに、GitHub にもコードが公開されています。GitHub にはビデオ要約サービスでサポートされている API についての記載もありますので、API の使用に際して事前に參照いただくことをお勧めいたします。
手順 1: JPS の起動
Jetson のターミナルから以下のコマンドを入力して Redis サービスを起動します。
sudo systemctl start jetson-redis
Jetson の起動と同時にサービスを立ち上げたい場合は、start
の代わりに enable
を指定してください。
sudo systemctl enable jetson-redis
手順 2: 作業用フォルダーの作成
作業用のフォルダーを $HOME 內に作成します。
mkdir -p ~/JPS2.0/VSS/
cd ~/JPS2.0/VSS/
mkdir config/ data/
mkdir -p data/vsm-cache/ ;# cache for models.
mkdir -p data/vsm-videos/ ;# video file location in container.
GitHub に JSON 設定ファイル (main_config.json) のコードが公開されていますが、今回はオンライン ドキュメントのコードをコピー & ペーストして作成します。
vi ./config/main_config.json
以下の內容で JSON 設定ファイル (main_config.json) を作成してください。openai_api_key
は、お持ちの OpenAI API キーに更新する必要があります。このキーは、要約サービスが正常に機能するために必要です。
{
"api_server_port": 19000,
"redis_host": "localhost",
"redis_port": 6379,
"redis_stream": "test",
"redis_output_interval": 60,
"log_level": "INFO",
"jetson_ip": "localhost",
"video_port": 81,
"max_images": 8,
"ingress_port": 30080,
"streamer_port": 31000,
"segment_time": 20,
"openai_api_key": "key"
}
手順 3: ビデオ要約サービス コンテナーの起動
ビルド済みのビデオ要約サービス コンテナーのイメージ ファイルをダウンロードして起動します。
cd ~/JPS2.0/VSS/
[sudo] docker pull nvcr.io/nvidia/jps/vlm_summarization:2.0.9
[sudo] docker run -itd --runtime nvidia --network host \
-v ./config/main_config.json:/configs/main_config.json \
-v ./data/vsm-videos/:/data/videos/ \
-v ./data/vsm-cache/:/root/.cache/huggingface/ \
-e CONFIG_PATH="/configs/main_config.json" \
nvcr.io/nvidia/jps/vlm_summarization:2.0.9
-v オプションで指定した ./data/vsm-videos/
および ./data/vsm-cache/
は、手順 2 の最初で作成したフォルダーです。手順 2 とは別のフォルダーに変更する場合はこれらを変更してください。
手順 4: docker コンテナーのログ表示
起動した docker コンテナーのコンテナー ID を取得して docker のログを表示します。
docker ps -a
以下の例では vlm_summarization:2.0.9
と redisfab/redistimeseries:master-arm64v8-jammy
の2つのコンテナーが実行中になっています。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dee6542f74d1 nvcr.io/nvidia/jps/vlm_summarization:2.0.9 "python3 /video_summ…" 21 minutes ago Up 21 minutes vibrant_curie 3c5b28540eaf redisfab/redistimeseries:master-arm64v8-jammy "docker-entrypoint.s…" 2 days ago Up 2 days redis |
コンテナー ID を指定してログを表示します。上記の例の <container ID>
は dee6542f74d1
になります。
docker logs -f <container ID>
モデルのダウンロードなど処理が行われるため起動完了まで少し時間がかかりますが、起動が完了すると以下のログが表示されます。
INFO: Started server process [1]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:19000 (Press CTRL+C to quit)
手順 5: 動畫ファイルのアップロード
このステップは、手順 1?4 までのコマンド入力を行った SSH ターミナル (「ターミナル A」とします) とは別の SSH ターミナル (「ターミナル B」とします) からコマンド入力を行います。
要約を行いたい動畫ファイルをアップロードします。今回は、DeepStream のデモ動畫を使用しました。

手順 3 の docker run
コマンドの -v ./data/vsm-videos/:/data/videos/
オプションで指定したフォルダー ./data/vsm-videos/
へ動畫ファイルを配置して以下のコマンドを入力します。
curl -s -X POST "http://localhost:19000/files?filepath=/data/videos/sample_1080p_h264.mp4" | jq .
成功すると file_id
が返されます。
"99da51d4-f4ca-4d36-83c9-2ae65e78d334"
念のため、アップロードされたファイルのリストと ID を確認します。
curl -s -X GET http://localhost:19000/files | jq .
以下が上記コマンドのレスポンスです。
{
"99da51d4-f4ca-4d36-83c9-2ae65e78d334": {
"filepath": "/data/videos/sample_1080p_h264.mp4"
}
}
手順 6: 要約のリクエスト
以下の方法でビデオの要約をリクエストしてください。"id"
はアップロードした動畫ファイルの "file_id"
です。また、指定可能な "model"
は "vila-1.5"
と "gpt-4o"
です。
curl -s -X POST "http://localhost:19000/summarize" \
-H "accept: application/json" \
-H "Content-Type: application/json" \
-d '{"stream": false, "id": "99da51d4-f4ca-4d36-83c9-2ae65e78d334", "model": "vila-1.5", "chunk_duration": 20}' | jq .
上記の処理には少し時間がかかります。SSH ターミナル A に戻ると、その途中経過がログとして表示されます。以下のログが表示されれば要約が終了していますのでターミナル B へ戻ってください。
"summaries": [ここには時系列ごとの要約が表示されます]
"final_summary": ここに要約結果のログが表示されます
手順 7: 要約結果の取得
要約結果を取得するには、ターミナル B で次のようにします。"id"
は要約のリクエストと同様に、アップロードした動畫ファイルの "file_id"
です。
curl -s -X GET "http://localhost:19000/summarize?stream=false&id=99da51d4-f4ca-4d36-83c9-2ae65e78d334" | jq .
以下が上記コマンドのレスポンスです。
{
"file_id": "99da51d4-f4ca-4d36-83c9-2ae65e78d334",
"summaries": [
"00:00-00:19: The video shows a person, often wearing a red jacket and black pants, continuously walking on the sidewalk alongside a road where several cars of various colors and sizes are seen either driving or parked.",
"00:20-00:39: The video captures a busy street with various colored cars and a green bus moving in both directions, alongside a sidewalk where multiple people, including a person in a blue jacket and black pants, are walking during a clear day.",
"00:40-00:48: A person is consistently walking on the sidewalk, while several cars, including a silver Mercedes-Benz, are driving on the road, with trees, buildings, and a street light in the background under a clear blue sky."
],
"final_summary": "The video predominantly showcases a person, frequently dressed in either a red or blue jacket and black pants, walking consistently along a sidewalk adjacent to a busy road. The road is populated with various cars, including a silver Mercedes-Benz and a green bus, moving in both directions. The environment is urban, with buildings, trees, and a street light visible in the background, and the weather is clear."
}
あまり特徴のない動畫の為、多くのイベントはありませんが、0 ~ 19 秒の間の「赤いジャケットと黒いズボンを身に著けた人物」、20 ~ 39 秒の間の「緑色のバスが両方向に移動しており」、および 40 ~ 48 秒の間の「シルバーのメルセデス?ベンツ」など、いくつかのポイントを挙げています。
なお、下記は今回のビデオ要約を機械翻訳で日本語化したものです。
summaries
:
- 00:00 – 00:19: 映像では、赤いジャケットと黒いズボンを身に著けた人物が、歩道を歩き続ける様子が映し出されています。その橫では、さまざまな色やサイズの車が走行または駐車している道路が見られます。
- 00:20 – 00:39: 映像は賑やかな街の通りを捉えています。さまざまな色の車や緑色のバスが両方向に移動しており、歩道には複數の人々が歩いています。中でも青いジャケットと黒いズボンを身に著けた人物が目立ちます。この撮影は晴れた日に行われました。
- 00:40 – 00:48: ひとりの人物が歩道を一貫して歩いており、その橫をシルバーのメルセデス?ベンツを含む何臺かの車が走っています。背景には木々、建物、街燈があり、澄み渡る青空の下で撮影されています。
final_summary
:
映像には、頻繁に赤または青のジャケットと黒のパンツを身に著けた人物が、歩道を歩いている様子が映し出されています。歩道は交通量の多い道路に沿っており、シルバーのメルセデス?ベンツや緑色のバスなど様々な車両が両方向に行き交っています。周囲の環境は都市部で、背景には建物、木々、街燈などが見られ、天候は晴れています。
00:00 – 00:19 | 6 秒 | |
00:20 – 00:39 | 23 秒 | 26 秒 |
00:40 – 00:48 | 43 秒 |
ビデオ要約サービスの API とカスタマイズ
今回はビルド済みの docker コンテナー イメージを NGC からダウンロードして実行しましたが、VLM ビデオ要約サービスの Dockerfile は GitHub に公開されています。また、API の詳細も GitHub に記載されており、ユーザー自身で API のカスタマイズや追加が可能です。
次のコマンドを使用して、VLM ビデオ要約サービス docker コンテナー イメージをビルドします。
# clone repogitory
git clone --recurse-submodules https://github.com/NVIDIA-AI-IOT/jetson-platform-services
# build docker container image
cd jetson-platform-services/inference/video_summarization/ && \
docker build -t video_summarization_microservice .
次のコマンドを使用してマイクロサービスを起動します。
docker run -itd --runtime nvidia --network host \
-v ./config/main_config.json:/configs/main_config.json \
-v <path to a video file in a host>:/data/videos/ \
-e CONFIG_PATH="/configs/main_config.json" \
video_summarization_microservice
最後に
今回はご紹介しませんでしたが、JPS には、ゼロショット検出、VLM、 AI NVR など実際の運用環境で再利用可能なサンプル ワークフローなども公開されています。
Jetson AGX / NX / Nano など、各モデルに合わせた設定ファイル (yaml や json) なども公開されていますので、この機會にお持ちの環境に合わせてお試しください。
関連情報
- オンラインド キュメント: Jetson Platform Services documentation
- NGC: Jetson Platform Services Reference Workflow & Resources
- GitHub: Jetson Platform Services > Video Summarization Microservice
- NVIDIA Developer: Getting Started With Jetson Platform Services
- NVIDIA Jetson AI Lab – Tutorial: Jetson Platform Services
- NVIDIA Forum: jetson platform services