Context
Human pose ships with a COCO-17 skeleton and an open extension point: the MeshBackend ABC in src/multicam_sim/pose.py is meant to let a dense body model (SMPL / SMPL-X) emit a PoseTrajectory, after which projection/occlusion/manifest are unchanged. No backend is implemented.
What to do (design + dependency work, happy to mentor)
Implement a MeshBackend subclass that takes SMPL (or SMPL-X) parameters and produces a PoseTrajectory on the COCO-17 skeleton (regress the 17 keypoints from the mesh's joints). Keep smplx/model weights behind an optional extra so the core package stays light; document how to obtain the body model.
Acceptance criteria
- Given a minimal set of parameters (e.g. rest pose),
to_pose_trajectory("p0") returns a valid PoseTrajectory whose to_entity() yields all 17 COCO joints.
- Heavy deps are optional and guarded; the test skips cleanly when the model isn't available.
- Design notes in the PR on the SMPL-joint to COCO-17 mapping;
ruff, mypy src, pytest -q green.
Extension point and skeleton: DESIGN.md pose extension.
Context
Human pose ships with a COCO-17 skeleton and an open extension point: the
MeshBackendABC insrc/multicam_sim/pose.pyis meant to let a dense body model (SMPL / SMPL-X) emit aPoseTrajectory, after which projection/occlusion/manifest are unchanged. No backend is implemented.What to do (design + dependency work, happy to mentor)
Implement a
MeshBackendsubclass that takes SMPL (or SMPL-X) parameters and produces aPoseTrajectoryon the COCO-17 skeleton (regress the 17 keypoints from the mesh's joints). Keepsmplx/model weights behind an optional extra so the core package stays light; document how to obtain the body model.Acceptance criteria
to_pose_trajectory("p0")returns a validPoseTrajectorywhoseto_entity()yields all 17 COCO joints.ruff,mypy src,pytest -qgreen.Extension point and skeleton: DESIGN.md pose extension.