Evaluates monocular 3D human pose and trajectory estimation in global coordinates, specifically probing a model's ability to maintain physical plausibility (e.g., avoiding scene penetration, minimizing foot sliding) while tracking dynamic camera motion on complex, non-flat terrain. Use when the user wants to benchmark on MoviCam, or asks about evaluating this task. Reports MPJPE.
Scanned 9/11/2026
Install to Claude Code
npx -y skills add qhjqhj00/research-skills-pool --skill movicam-eval --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Movicam Eval?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/qhjqhj00-movicam-eval)More formats (shields.io, HTML) on the badges page.
---
name: movicam-eval
description: Evaluates monocular 3D human pose and trajectory estimation in global coordinates, specifically probing a model's ability to maintain physical plausibility (e.g., avoiding scene penetration, minimizing foot sliding) while tracking dynamic camera motion on complex, non-flat terrain. Use when the user wants to benchmark on MoviCam, or asks about evaluating this task. Reports MPJPE.
metadata:
skill_kind: dataset_eval
source_arxiv: 2507.17406
bibtex_key: aytekin2025physdynpose
confidence: high
---
# movicam-eval
> Physics-based Human Pose Estimation from a Single Moving RGB Camera — Aytekin et al. (2025) (arXiv:2507.17406, 2025)
## What this evaluates
Evaluates monocular 3D human pose and trajectory estimation in global coordinates, specifically probing a model's ability to maintain physical plausibility (e.g., avoiding scene penetration, minimizing foot sliding) while tracking dynamic camera motion on complex, non-flat terrain.
## Datasets
- **MoviCam** — total ?; splits: test (-1); repo https://github.com/aidilayce/physdynpose
## Metrics
- `MPJPE` **(primary)** — range: mm
- Mean Per Joint Position Error in mm. Computed as the average Euclidean distance between predicted and ground-truth 3D joint positions.
- `PA-MPJPE` — range: mm
- Procrustes-aligned MPJPE in mm. MPJPE computed after rigid alignment (rotation + translation) of predictions to ground truth.
- `W-MPJPE` — range: mm
- World-aligned MPJPE in mm. MPJPE after aligning the initial frames of predictions and ground-truth data in world coordinates.
- `WA-MPJPE` — range: mm
- World-aligned All-trajectories MPJPE in mm. MPJPE after aligning all trajectories in world coordinates.
- `RTE` — range: percent
- Root Translation Error in %. Normalized by the subject’s actual displacement, calculated over the entire trajectory after rigid alignment.
- `Jitter` — range: mm/s
- Temporal smoothness error in mm/s. Measures frame-to-frame velocity changes of the pose.
- `FS` — range: mm
- Foot Sliding in mm. Average toe joint displacement during contact phases.
- `% frames with scene penetration` — range: percent
- Percentage of frames where the predicted human mesh intersects the ground-truth scene geometry.
- `Average penetration depth` — range: mm
- Average penetration depth in mm. Mean intersection depth per frame where penetration occurs.
- `Average height above scene` — range: mm
- Average height above the scene in mm. Mean vertical distance between the subject and the ground-truth height map.
## Input / output format
**Input**: Monocular RGB video frames from a moving camera.
**Output**: Per-frame 3D human joint positions, root trajectory, and mesh vertices in global/world coordinates.
## Scoring recipe
```python
def compute_metrics(pred_joints, gt_joints, pred_root, gt_root, pred_mesh, gt_scene):
mpjpe = np.mean(np.linalg.norm(pred_joints - gt_joints, axis=-1))
pa_mpjpe = procrustes_align(pred_joints, gt_joints)
w_mpjpe = align_initial_frames(pred_joints, gt_joints)
wa_mpjpe = align_all_trajectories(pred_joints, gt_joints)
rte = np.linalg.norm(pred_root - gt_root) / np.linalg.norm(gt_root[-1] - gt_root[0]) * 100
jitter = compute_temporal_smoothness(pred_joints)
fs = compute_foot_sliding(pred_joints, contact_mask)
penetration_frames = detect_mesh_scene_intersection(pred_mesh, gt_scene)
penetration_depth = compute_intersection_depth(pred_mesh, gt_scene)
height_above = compute_vertical_distance(pred_mesh, gt_scene)
return {
'MPJPE': mpjpe, 'PA-MPJPE': pa_mpjpe, 'W-MPJPE': w_mpjpe,
'WA-MPJPE': wa_mpjpe, 'RTE': rte, 'Jitter': jitter, 'FS': fs,
'% penetration': np.mean(penetration_frames) * 100,
'Avg penetration': np.mean(penetration_depth),
'Avg height': np.mean(height_above)
}
```
## Common pitfalls
- Confusing PA-MPJPE (local alignment) with W-MPJPE/WA-MPJPE (global/world alignment), as the latter are critical for evaluating trajectory drift and physical plausibility in moving-camera settings.
- Ignoring physical plausibility metrics (penetration, foot sliding, height above scene) in favor of raw pose accuracy, since high PA-MPJPE does not guarantee realistic human-scene interaction.
- Failing to account for camera motion when evaluating global trajectory errors, as SLAM inaccuracies on flat terrain can artificially inflate RTE and W-MPJPE.
## Evidence (verbatim from paper)
> We evaluate the performance of the methods in two parts: (a) 3D reconstruction errors and (b) physical plausibility. 3D Reconstruction Errors. To evaluate 3D human pose and trajectory estimation accuracy, we compute Mean Per Joint Position Error (MPJPE) and Procrustes-aligned MPJPE (PA-MPJPE) in mm. We also report W-MPJPE, which is MPJPE after aligning the initial frames of predictions and ground-truth data, and WA-MPJPE, which is after aligning all trajectories. Additionally, we follow [[26]] in reporting Root Translation Error (RTE) as %, normalized by the subject’s actual displacement, calculated over the entire trajectory after rigid alignment.
## Citation
```bibtex
@misc{aytekin2025physdynpose,
title={Physics-based Human Pose Estimation from a Single Moving RGB Camera},
author={Aytekin et al. (2025)},
year={2025},
note={arXiv:2507.17406}
}
```
- arXiv: 2507.17406
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!