본문으로 건너뛰기

보조 시각화

비디오 뷰어는 프레임 연동 데이터를 오버레이 대신 비디오 옆에 표시할 수 있습니다. 각 채널에는 독립적인 패널이 있으며 여러 뷰는 탭으로 표시됩니다. 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를 사용하여 메시지 하나를 전송합니다. 동일한 타임스탬프의 뷰는 최대 16개까지 탭으로 표시됩니다. 일반 오버레이 메시지도 같은 프레임에서 비디오 위에 계속 렌더링할 수 있습니다. 해당 프레임에 속하는 모든 데이터는 채널과 소스 PTS를 동일하게 유지하십시오.

렌더러는 frontend/src/viewer/auxiliaryVisualization.js에 등록합니다. 렌더러는 이름, 제목 및 draw(context, viewport, payload, frame) 함수를 제공합니다. 대화형 렌더러는 컨트롤과 포인터 핸들러가 있는 세션도 제공할 수 있습니다. 패널은 다시 그리기 예약, 설정 및 정리를 관리합니다.

프로토콜이나 렌더러를 변경한 후 뷰어 검사를 실행하십시오.

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