Class Skeleton3DResult#

Class Documentation#

class Skeleton3DResult#

Parses a session-root “skeleton3d.json” file written by analysis/run_pose3d.py into a queryable in-memory structure, for the Analysis tab’s 3D Pose Reconstruction plugin (per-camera reprojected skeleton overlay during playback, plus an interactive 3D room view). Mirrors GazeFusionResult (src/analysis/gaze_fusion_result.hpp) closely — same load()

/is_valid() shape and the same “keyed on the shared master

tick/timestamp, not any single video’s frame_index” nearest-frame lookup, since reconstruction is inherently cross-camera. Diverges from

GazeFusionResult in carrying MULTIPLE people per frame (gaze fusion only ever tracks one face) with a persistent trackId across frames.

Usage:

auto result = Skeleton3DResult::load(jsonPath);
if (result.is_valid()) { ... }

Public Functions

Skeleton3DResult() = default#
inline bool is_valid() const#
inline const QStringList &source_videos() const#
inline const QVector<Skeleton3DRoomCamera> &cameras() const#
inline const QStringList &keypoint_names() const#
inline const QVector<QPair<int, int>> &skeleton_edges() const#
inline double master_fps() const#
inline const QVector<Skeleton3DFrame> &frames() const#
const Skeleton3DFrame *nearest_frame(int64_t timestampNsEstimate) const#

Nearest-frame lookup by timestamp (ns) estimate — binary search, since frames() is stored in the ascending timestampNs order run_pose3d.py writes ascending master ticks in. Returns nullptr if there are no frames.

Public Static Functions

static Skeleton3DResult load(const QString &jsonPath)#

Parses jsonPath. Returns a default-constructed (is_valid() == false) result if the file is missing or malformed.