Vision-Based Hand Motion Analysis for Surgical Skill Assessment
This repository accompanies the master thesis:
Seeing Surgical Skill: Vision-Based Hand Motion Analysis for Assessment in Orthopedic Trauma Training
Finn Weikert, 2026
This project explores whether markerless hand tracking from video can be used to assess surgical skill in orthopedic training.
Pipeline:
-
Extract hand landmarks from video (MediaPipe)
-
Build kinematic motion representations
-
Model surgical skill using:
- Global motion efficiency (PC1)
- Local motion structure (BoW, MIL)
Key takeaway: A single global efficiency component explains most of the skill signal, while local motion patterns provide consistent improvements.
├── data/
├── notebooks/
├── scripts/
├── src/thesis_package/
├── results/
├── saved_models/
├── early_experiments/
├── thesis.pdf
└── environment.yml
- Pre-extracted landmark trajectories (
.pkl) - Processed palm trajectories + orientation landmarks
- Expert skill scores (
.csv) - Example videos (raw + tracking overlay)
metrics/pc1_features.csv(precomputed global features)
⚠️ Original surgical videos are not included (confidential)
All experiments, figures, and results from the thesis:
01_exploration_tracking.ipynb– tracking & preprocessing02_global_feature_screening.ipynb– global features + PC103_window_feature_set_evaluation.ipynb– local features04_bow_analysis.ipynb– Bag-of-Words modeling05_mil_attention_analysis.ipynb– MIL + attentionExploratory_motion_ae.ipynb– autoencoder experiments
Run the main experiments without notebooks:
python scripts/run_global_models.py
python scripts/run_bow_models.py
python scripts/run_mil_models.pyCore implementation:
features/– feature extraction (global + local + BoW)models/– MLP, MIL (attention), autoencodertracking/– MediaPipe + postprocessingtraining/– LOSO evaluation + training loops
figures/– thesis figurestables/– reproduced performance tables
Pretrained MIL models (LOSO × ensemble). ➡️ Included to avoid long retraining times
Unused / exploratory code (not maintained)
conda env create -f environment.yml
conda activate env-mlLaunch notebooks:
jupyter notebook- Use scripts for clean reproduction
- Use
saved_models/to skip heavy training - All reported results are reproducible from this repo
- Data is partially shared (no raw videos)
- Focus is on methodology + modeling, not dataset release
- All figures/tables in the thesis are generated from this code
See thesis.pdf for full details:
- methodology
- experiments
- discussion
For questions, feel free to reach out.