Gesture Scoring Engine is a local research prototype for geometry-based hand-gesture scoring. It converts hand landmarks into a compact 26-dimensional feature vector, compares attempts with population gesture descriptors, adapts scoring strictness over repeated attempts, and visualizes how score variables can be interpreted over time.
The public repository contains the core Python code, tests, selected experiment figures, and a static browser demo. It does not include the raw HaGRID data, processed descriptor artifacts, private project notes, LaTeX report sources, or local build caches.
Open the hosted demo:
https://rt64m.github.io/gesture-scoring-engine/web_demo/
- Core scoring and analysis modules in
src/ - Reproducibility and export scripts in
scripts/ - Virtual-subject strategy experiments in
experiments/ - Regression tests in
tests/ - A local static showcase demo in
web_demo/ - Selected paper/demo figures in
report/figures/and supplemental figures inartifacts/figures/
The maintained target set contains ten static hand gestures:
fist, four, ok, one, palm, peace, three, stop, call, rock
All scoring, demo data, and published figures are built around this ten-gesture scope.
This project does not use real patient data. Patient or recovery wording in the demo refers to simulated/virtual-subject histories. Camera input in the browser demo is processed locally in the browser; the demo does not upload frames, landmarks, scores, or user state to a project backend.
gesture-scoring-engine/
+-- src/ # core feature, descriptor, scoring, threshold, progress modules
+-- scripts/ # CLI demos, descriptor building, data export, report figure scripts
+-- experiments/ # virtual-subject comparison experiments
+-- tests/ # pytest regression tests
+-- web_demo/ # static browser demo
+-- report/figures/ # selected generated figures
+-- artifacts/figures/ # supplemental generated figures
+-- pyproject.toml
+-- uv.lock
+-- README.md
`-- .gitignore
- Python 3.12 or compatible
uvfor dependency management- A modern browser for
web_demo/ - Browser camera permission and network access to the configured MediaPipe assets if using the live classifier page
Install dependencies:
uv syncRun tests:
uv run python -m pytest tests -qThe easiest way to view the demo is through GitHub Pages:
https://rt64m.github.io/gesture-scoring-engine/web_demo/
No Python environment is required for the hosted demo.
To run the same demo locally, refresh exported demo data if needed:
Refresh exported demo data:
uv run python scripts/export_demo_data.pyStart a static server from the repository root:
uv run python -m http.server 8000Open:
http://localhost:8000/web_demo/
The demo currently includes:
- ten-gesture camera classification from one sampled screenshot per second, with the previous-second snapshot shown and analyzed below the live preview
- Palm cold-start scoring scenarios where the first adaptive score matches direct scoring, then later scores change through the learned user model and threshold state
- simulated Palm skeleton playback from a curled-finger patient attempt toward a five-finger upright target
- traces for
tau, baseline, momentum, blend weight, distance, and challenge-zone state - an inverse-scoring view where adaptive score can stay in a narrow band while tau tightens and inferred progress rises
The classifier page can be paused at any time. Pausing keeps the camera preview visible but stops the one-second snapshot sampling and analysis refresh.
Run a cold-start scoring demo:
uv run python scripts/demo_cold_start.py --gesture fist --profile improving_sequenceRun a dynamic-threshold simulation:
uv run python scripts/simulate_progression.py --scenario fatigue_dip --rounds 12 --noise 2Generate a simulated progress report:
uv run python scripts/demo_progress.py --scenario linear_recovery --days 30Run the virtual-subject strategy comparison:
uv run python experiments/run_comparison.py --patients-per-curve 3 --sessions 8 --attempts-per-session 10The patients argument denotes virtual subjects generated by the simulator, not real patients.
The descriptor-building pipeline expects HaGRID-style landmark annotation JSON files under data/raw/, but raw and processed data are intentionally not committed. To rebuild descriptors locally, place or download the required annotations and run:
uv run python scripts/download_hagrid_annotations.py
uv run python -m scripts.build_descriptorsGenerated descriptor and feature files are local artifacts and remain ignored by Git.
Recent local validation before publication:
uv run python -m pytest tests -q: 47 tests passed- LaTeX citation/reference audit for the private report: no undefined citations, missing figures, or BibTeX errors
- Browser smoke test for the static demo: navigation, scenario switching, playback controls, inverse scoring view, desktop layout, and mobile-sized layout passed
No license has been declared yet. Until a license is added, all rights are reserved by default.