Facebook Research Hand Tracking Challenge Toolkit - evaluation and visualization tools for 3D hand tracking. Supports loading HOT3D data, computing metrics (PA-MPJPE, AUC, etc.), visualizing 3D pose projections, and generating tracking evaluation reports. Essential for benchmarking hand tracking algorithms.
61
73%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Low
Low-risk findings worth noting
Fix and improve this skill with Tessl
tessl review fix ./skills/vision/hand-tracking-toolkit/SKILL.mdComprehensive toolkit from Meta Facebook Research for evaluating and visualizing 3D hand tracking systems. Provides standardized metrics, visualization tools, and data loaders for the HOT3D dataset. Essential for researchers developing and benchmarking hand tracking algorithms on multi-view egocentric data.
Use this for: Evaluating hand tracking performance, generating evaluation reports, visualizing 3D predictions vs ground truth.
Use when you need to:
Compute widely-used hand tracking metrics:
Rich visualization options:
Easy data loading:
# Clone repository
git clone https://github.com/facebookresearch/hand_tracking_toolkit.git
cd hand_tracking_toolkit
# Install
pip install -r requirements.txt
# Run evaluation
python evaluate.py \
--predictions path/to/predictions.pkl \
--ground_truth path/to/hot3d/sequence \
--output_dir ./results
# Generate visualizations
python visualize.py \
--predictions path/to/predictions.pkl \
--ground_truth path/to/hot3d/sequence \
--output visualizations.pngfrom toolkit import Evaluator
import pickle
# Load predictions
with open('predictions.pkl', 'rb') as f:
predictions = pickle.load(f)
# Load ground truth
evaluator = Evaluator()
evaluator.load_ground_truth('path/to/hot3d_sequence')
# Compute metrics
metrics = evaluator.evaluate(predictions)
print(f"PA-MPJPE: {metrics['pa_mpjpe']:.2f} mm")
print(f"AUC: {metrics['auc']:.3f}")
print(f"PCK@0.1: {metrics['pck_01']*100:.1f}%")from toolkit import Visualizer
viz = Visualizer()
# Load data
viz.load_predictions('predictions.pkl')
viz.load_ground_truth('ground_truth_path')
# Create visualization
fig = viz.plot_3d_skeleton(
frame_id=100,
show_pred=True,
show_gt=True,
show_errors=True
)
fig.savefig('comparison_3d.png')from toolkit import ReportGenerator
report = ReportGenerator()
report.load_evaluation_results('results.json')
# Generate PDF report
report.generate_pdf(
output_path='evaluation_report.pdf',
include_plots=True,
include_per_joint_errors=True
)Prediction format:
predictions = {
'sequence_id': 'seq001',
'frames': [
{
'frame_id': 0,
'left_hand': np.array((21, 3)), # 21 joints x 3 coords
'right_hand': np.array((21, 3)),
'confidence': np.array(21),
},
# ... more frames
]
}| Metric | Description | Lower is Better |
|---|---|---|
| MPJPE | Mean per-joint position error (mm) | ✓ |
| PA-MPJPE | Aligned MPJPE (procrustes) | ✓ |
| AUC | Area under error threshold curve | ✗ |
| PCK | % keypoints within threshold | ✗ |
Works with:
Apache 2.0
df37802
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.