メインコンテンツまでスキップ

補助ビジュアライゼーション

ビデオビューアーでは、フレームに関連付けられたデータをオーバーレイではなく、動画の横に表示できます。各チャンネルには独立したパネルがあり、複数のビューはタブとして表示されます。Insight は不透明な JSON ペイロードを登録済みレンダラーに渡します。最初の組み込みレンダラーは、BlazePose のワールドランドマークを 3D スケルトンとして表示します。

補助データをチャンネルのメタデータ UDP ポート(metadataUDP + N)へ送信します。timestamp には、ソース動画の PTS を整数ミリ秒で設定します。ビューアーは、デコードされた RTP フレームと完全に一致する補助データだけを受け入れ、短い配信途切れの間は最後に一致したビューを最大 160 ミリ秒保持します。

メッセージコントラクト​

{
"type": "auxiliary-visualization",
"timestamp": 1234,
"frame_id": "42",
"data": {
"schema_version": 1,
"id": "world-pose",
"renderer": "blazepose-3d",
"title": "3D Pose",
"payload": {
"poses": [{
"id": "pose_1",
"keypoints": [
{"name": "nose", "x": 0.01, "y": -0.42, "z": -0.08, "confidence": 0.98}
]
}]
}
}
}
フィールド要件
schema_version整数 1。不明なバージョンは無視されます。
id安定した空でないビュー識別子。
renderer登録済みのビューアーレンダラー。不明な名前は無視されます。
titleオプションのパネルラベル。
payloadレンダラー固有の JSON オブジェクト。

このエンベロープは姿勢専用ではありません。点群、メッシュ、チャート、その他の 3D ビューは、トランスポートやパネルを変更せずにレンダラーを登録し、独自のペイロードを定義できます。

BlazePose 3D​

blazepose-3d ペイロードは poses[] を受け入れます。各要素には、有限の x、y、z ワールド座標を持つ名前付き keypoints[] を含めます。信頼度は任意です。信頼度が低い関節は消えるのではなく薄く表示されます。スケルトンは、頭部、胴体、被写体の左側、右側を別々の色で表示します。複数の姿勢には異なる輪郭色も割り当てられます。

Viewer Configuration の 3D Pose を開くと、表示、パネルサイズ、透明度、カメラのヨーとピッチ、参照キューブの表示をグローバルまたはチャンネルごとに設定できます。パネルのコントロールでキューブの表示切り替えとカメラのリセットができ、キャンバスをドラッグすると固定表示角度を選べます。レンダラーは相関済みの各フレームを直接描画し、2D オーバーレイとは別に平滑化やアニメーションを行いません。

既定のカメラは安定したメートル法フレームを使用します。送信側は payload.view.center.{x,y,z} と payload.view.half_extent で上書きできます。

複数のビューとレンダラー​

ビューごとに異なる data.id を使って 1 件のメッセージを送信します。同じタイムスタンプには最大 16 ビューがタブとして表示されます。通常のオーバーレイメッセージも同じフレームで動画上に描画できます。そのフレームに属するすべてのデータで、チャンネルとソース PTS を一致させてください。

レンダラーは frontend/src/viewer/auxiliaryVisualization.js に登録します。レンダラーは名前、タイトル、draw(context, viewport, payload, frame) 関数を提供します。対話型レンダラーは、コントロールとポインターハンドラーを持つセッションも提供できます。パネルが再描画のスケジューリング、設定、クリーンアップを管理します。

プロトコルまたはレンダラーを変更した後は、ビューアーのチェックを実行します。

cd frontend
npm ci
npm run test:viewer
npm run build:viewer