kinemotion 0.30.0__tar.gz → 0.31.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of kinemotion might be problematic. Click here for more details.
- kinemotion-0.31.1/.basic-memory/biomechanics/camera-perspective-analysis-45deg-vs-lateral.md +195 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.basic-memory/biomechanics/cmj-physiological-bounds-for-validation.md +35 -74
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.basic-memory/biomechanics/cmj-validation-implementation-complete.md +11 -3
- kinemotion-0.31.1/.basic-memory/biomechanics/technical-implementation-45deg-perspective-correction.md +396 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.basic-memory/development/cmj-phase-detection-testing-gap-analysis.md +7 -10
- kinemotion-0.31.1/.basic-memory/project-management/issue-12-mvp-scaffolding-complete.md +181 -0
- kinemotion-0.31.1/.basic-memory/project-management/issue-12-unblocked-tasks-breakdown.md +92 -0
- kinemotion-0.31.1/.basic-memory/project-management/issue-12-use-real-metrics-now.md +111 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.basic-memory/project-management/specialized-subagents-routing-guide.md +1 -1
- kinemotion-0.31.1/.basic-memory/strategy/deployment-decision-analysis-for-kinemotion.md +66 -0
- kinemotion-0.31.1/.claude/agents/frontend-developer.md +606 -0
- kinemotion-0.31.1/.claude/hooks/fix-basic-memory-names.sh +50 -0
- kinemotion-0.31.1/.github/dependabot.yml +54 -0
- kinemotion-0.31.1/.github/workflows/deploy.yml +117 -0
- kinemotion-0.31.1/.github/workflows/security.yml +124 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.gitignore +1 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.pre-commit-config.yaml +2 -6
- kinemotion-0.31.1/.serena/memories/camera-perspective-validation-study.md +154 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.serena/memories/project_overview.md +16 -1
- {kinemotion-0.30.0 → kinemotion-0.31.1}/CHANGELOG.md +46 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/CLAUDE.md +3 -2
- {kinemotion-0.30.0 → kinemotion-0.31.1}/PKG-INFO +1 -1
- kinemotion-0.31.1/backend/.dockerignore +56 -0
- kinemotion-0.31.1/backend/.env.example +30 -0
- kinemotion-0.31.1/backend/Dockerfile +55 -0
- kinemotion-0.31.1/backend/README.md +519 -0
- kinemotion-0.31.1/backend/docs/fly-deployment.md +226 -0
- kinemotion-0.31.1/backend/docs/implementation-summary.md +458 -0
- kinemotion-0.31.1/backend/docs/setup.md +444 -0
- kinemotion-0.31.1/backend/docs/tests.md +503 -0
- kinemotion-0.31.1/backend/fly.toml +79 -0
- kinemotion-0.31.1/backend/pyproject.toml +120 -0
- kinemotion-0.31.1/backend/src/kinemotion_backend/__init__.py +3 -0
- kinemotion-0.31.1/backend/src/kinemotion_backend/app.py +594 -0
- kinemotion-0.31.1/backend/tests/README.md +430 -0
- kinemotion-0.31.1/backend/tests/__init__.py +1 -0
- kinemotion-0.31.1/backend/tests/conftest.py +192 -0
- kinemotion-0.31.1/backend/tests/test_api_endpoints.py +311 -0
- kinemotion-0.31.1/backend/tests/test_error_handling.py +261 -0
- kinemotion-0.31.1/backend/tests/test_health.py +72 -0
- kinemotion-0.31.1/backend/tests/test_r2_integration.py +403 -0
- kinemotion-0.31.1/backend/tests/test_validation.py +300 -0
- kinemotion-0.31.1/backend/uv.lock +1498 -0
- kinemotion-0.31.1/docs/development/agents-guide.md +396 -0
- kinemotion-0.31.1/docs/guides/cloud-run-deployment.md +350 -0
- kinemotion-0.31.1/docs/guides/cmj-recording-protocol-es.md +125 -0
- kinemotion-0.31.1/docs/guides/cmj-recording-protocol.md +125 -0
- kinemotion-0.31.1/docs/guides/deployment-checklist.md +290 -0
- kinemotion-0.31.1/docs/guides/local-testing.md +585 -0
- kinemotion-0.31.1/docs/guides/setup-issue-12.md +499 -0
- kinemotion-0.31.1/docs/quick-start.md +135 -0
- kinemotion-0.31.1/docs/reference/cloud-run-quick-reference.md +180 -0
- kinemotion-0.31.1/frontend/.editorconfig +8 -0
- kinemotion-0.31.1/frontend/.env.example +13 -0
- kinemotion-0.31.1/frontend/.gitattributes +4 -0
- kinemotion-0.31.1/frontend/.gitignore +40 -0
- kinemotion-0.31.1/frontend/.pnp.cjs +9737 -0
- kinemotion-0.31.1/frontend/.pnp.loader.mjs +2126 -0
- kinemotion-0.31.1/frontend/.yarn/install-state.gz +0 -0
- kinemotion-0.31.1/frontend/README.md +203 -0
- kinemotion-0.31.1/frontend/index.html +14 -0
- kinemotion-0.31.1/frontend/src/App.tsx +62 -0
- kinemotion-0.31.1/frontend/src/components/ErrorBoundary.tsx +54 -0
- kinemotion-0.31.1/frontend/src/components/ErrorDisplay.tsx +58 -0
- kinemotion-0.31.1/frontend/src/components/LoadingSpinner.tsx +50 -0
- kinemotion-0.31.1/frontend/src/components/RecentUploads.tsx +61 -0
- kinemotion-0.31.1/frontend/src/components/ResultsDisplay.tsx +165 -0
- kinemotion-0.31.1/frontend/src/components/ResultsSkeleton.tsx +28 -0
- kinemotion-0.31.1/frontend/src/components/UploadForm.tsx +183 -0
- kinemotion-0.31.1/frontend/src/hooks/useAnalysis.ts +140 -0
- kinemotion-0.31.1/frontend/src/hooks/useRecentUploads.ts +58 -0
- kinemotion-0.31.1/frontend/src/index.css +899 -0
- kinemotion-0.31.1/frontend/src/main.tsx +13 -0
- kinemotion-0.31.1/frontend/src/types/api.ts +130 -0
- kinemotion-0.31.1/frontend/src/vite-env.d.ts +9 -0
- kinemotion-0.31.1/frontend/vite.config.ts +23 -0
- kinemotion-0.31.1/frontend/yarn.lock +1707 -0
- kinemotion-0.31.1/local_dev.sh +173 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/pyproject.toml +15 -3
- kinemotion-0.31.1/scripts/basic-memory-utils.sh +83 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/src/kinemotion/api.py +13 -7
- {kinemotion-0.30.0 → kinemotion-0.31.1}/src/kinemotion/cmj/analysis.py +6 -3
- {kinemotion-0.30.0 → kinemotion-0.31.1}/src/kinemotion/cmj/cli.py +11 -6
- {kinemotion-0.30.0 → kinemotion-0.31.1}/src/kinemotion/cmj/debug_overlay.py +3 -3
- {kinemotion-0.30.0 → kinemotion-0.31.1}/src/kinemotion/cmj/kinematics.py +10 -5
- {kinemotion-0.30.0 → kinemotion-0.31.1}/src/kinemotion/core/cli_utils.py +4 -2
- {kinemotion-0.30.0 → kinemotion-0.31.1}/src/kinemotion/core/cmj_metrics_validator.py +40 -21
- {kinemotion-0.30.0 → kinemotion-0.31.1}/src/kinemotion/core/dropjump_metrics_validator.py +8 -5
- {kinemotion-0.30.0 → kinemotion-0.31.1}/src/kinemotion/core/metadata.py +2 -1
- {kinemotion-0.30.0 → kinemotion-0.31.1}/src/kinemotion/core/quality.py +5 -4
- {kinemotion-0.30.0 → kinemotion-0.31.1}/src/kinemotion/core/smoothing.py +4 -2
- {kinemotion-0.30.0 → kinemotion-0.31.1}/src/kinemotion/core/video_io.py +3 -2
- {kinemotion-0.30.0 → kinemotion-0.31.1}/src/kinemotion/dropjump/analysis.py +12 -7
- {kinemotion-0.30.0 → kinemotion-0.31.1}/src/kinemotion/dropjump/cli.py +7 -4
- {kinemotion-0.30.0 → kinemotion-0.31.1}/src/kinemotion/dropjump/kinematics.py +6 -3
- {kinemotion-0.30.0 → kinemotion-0.31.1}/tests/core/test_quality.py +4 -1
- {kinemotion-0.30.0 → kinemotion-0.31.1}/tests/test_adaptive_threshold.py +18 -18
- {kinemotion-0.30.0 → kinemotion-0.31.1}/tests/test_cmj_analysis.py +76 -67
- {kinemotion-0.30.0 → kinemotion-0.31.1}/tests/test_cmj_joint_angles.py +44 -35
- {kinemotion-0.30.0 → kinemotion-0.31.1}/tests/test_cmj_kinematics.py +2 -1
- {kinemotion-0.30.0 → kinemotion-0.31.1}/tests/test_com_estimation.py +3 -3
- {kinemotion-0.30.0 → kinemotion-0.31.1}/tests/test_filtering.py +14 -13
- {kinemotion-0.30.0 → kinemotion-0.31.1}/tests/test_joint_angles.py +3 -1
- {kinemotion-0.30.0 → kinemotion-0.31.1}/tests/test_polyorder.py +3 -3
- {kinemotion-0.30.0 → kinemotion-0.31.1}/tests/test_video_io.py +2 -2
- {kinemotion-0.30.0 → kinemotion-0.31.1}/uv.lock +252 -45
- kinemotion-0.31.1/vercel.json +6 -0
- kinemotion-0.30.0/.claude/agents/QUICKSTART.md +0 -233
- kinemotion-0.30.0/.claude/agents/README.md +0 -251
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.basic-memory/README.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.basic-memory/api/api-reference-quick-commands.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.basic-memory/biomechanics/cmj-landing-detection-window-validation.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.basic-memory/biomechanics/drop-jump-vs-cmj-key-differences.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.basic-memory/codebase/codebase-architecture-overview.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.basic-memory/development/ci-caching-issue-investigation-deep-squat-test-failure.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.basic-memory/development/ci-vs-local-test-failure-investigation.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.basic-memory/development/development-standards-quality-gates.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.basic-memory/project-management/kinemotion-project-setup-complete.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.basic-memory/strategy/mvp-feedback-collection-plan.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.basic-memory/strategy/mvp-first-strategic-direction.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.basic-memory/strategy/mvp-validation-checkpoints.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.basic-memory/strategy/strategic-priority-tasks-current-roadmap.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.claude/agents/biomechanics-specialist.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.claude/agents/computer-vision-engineer.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.claude/agents/devops-cicd-engineer.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.claude/agents/ml-data-scientist.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.claude/agents/project-manager.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.claude/agents/python-backend-developer.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.claude/agents/qa-test-engineer.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.claude/agents/technical-writer.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.dockerignore +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.gitattributes +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.github/pull_request_template.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.github/workflows/docs.yml +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.github/workflows/release.yml +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.github/workflows/test.yml +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.readthedocs.yml +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.serena/.gitignore +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.serena/memories/code_style_and_conventions.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.serena/memories/github-project-setup-summary.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.serena/memories/mvp-first-strategy.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.serena/memories/specialist-agents-routing.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.serena/memories/suggested_commands.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.serena/project.yml +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/.tool-versions +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/CODE_OF_CONDUCT.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/CONTRIBUTING.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/Dockerfile +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/GEMINI.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/LICENSE +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/README.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/SECURITY.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/README.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/api/cmj.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/api/core.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/api/dropjump.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/api/overview.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/development/errors-findings.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/development/testing.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/development/type-hints.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/development/validation-plan.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/development/validation-roadmap.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/development/wallball-norep-detection.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/guides/bulk-processing.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/guides/camera-setup.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/guides/cmj-guide.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/index.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/reference/json-output-format.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/reference/json-structure-comparison.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/reference/parameters.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/reference/pose-systems.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/paper-downloader/HOW-TO-FIND-DOIS.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/paper-downloader/README.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/paper-downloader/dois.txt +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/paper-downloader/download.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/paper-downloader/pyproject.toml +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/paper-downloader/uv.lock +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/MANUAL-DOWNLOAD-GUIDE.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/README.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/convert_pdfs.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Ward_Putting-i-in-Team.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/jump-performance/2011_Harper_10-to-5-Jump-Test.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/jump-performance/2014_Samozino_FV-Imbalance.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/jump-performance/2022_Wells_Golf-Clubhead-CMJ.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/running-biomechanics/2016_Moore_Economical-Running-Technique.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/smartphone-technology/2022_Bishop_MyJumpLab-Validation.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/markdown/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/online-references-for-papers.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Ward_Putting-i-in-Team.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/jump-performance/2011_Harper_10-to-5-Jump-Test.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/jump-performance/2014_Samozino_FV-Imbalance.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/jump-performance/2022_Wells_Golf-Clubhead-CMJ.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Moore_Economical-Running-Technique.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/smartphone-technology/2022_Bishop_MyJumpLab-Validation.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/research/thirdparty/pdfs/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.pdf +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/1-STRATEGIC_SUMMARY.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/2-STRATEGIC_ANALYSIS.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/MVP_FEEDBACK_COLLECTION.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/MVP_VALIDATION_CHECKPOINTS.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/README.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/STYLE_GUIDE.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/01-executive-summary.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/02-technical-assessment.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/03-refactoring-roadmap.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/README.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/BIOMECHANICS/01-executive-summary.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/BIOMECHANICS/02-technical-assessment.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/BIOMECHANICS/03-reference-guide.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/BIOMECHANICS/README.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/COMPUTER_VISION/01-executive-summary.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/COMPUTER_VISION/02-real-time-architecture.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/COMPUTER_VISION/03-implementation-checklist.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/COMPUTER_VISION/README.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/CONSOLIDATED/01-agent-consensus.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/CONSOLIDATED/02-critical-findings.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/CONSOLIDATED/03-roadmap-adjustments.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/CONSOLIDATED/04-decision-points.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/CONSOLIDATED/README.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/CONSOLIDATED/risk-register.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/CONSOLIDATED/timeline-roadmap.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/DEVOPS_CI_CD/01-executive-summary.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/DEVOPS_CI_CD/02-infrastructure-assessment.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/DEVOPS_CI_CD/03-implementation-roadmap.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/DEVOPS_CI_CD/README.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/01-executive-summary.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/02-technical-assessment.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/03-parameter-specifications.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/README.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/QA_TESTING/01-executive-summary.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/QA_TESTING/02-roadmap-assessment.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/QA_TESTING/03-testing-checklists.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/QA_TESTING/README.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/TECHNICAL_WRITING/01-executive-summary.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/TECHNICAL_WRITING/02-documentation-strategy.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/TECHNICAL_WRITING/03-action-plan.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/strategy/agent-assessments/TECHNICAL_WRITING/README.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/technical/framerate.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/technical/implementation-details.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/technical/imu-metadata.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/technical/real-time-analysis.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/technical/triple-extension.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/translations/es/camera-setup.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/validation/determinism-test.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/validation/known-height-validation.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/docs/validation-status.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/examples/bulk/README.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/examples/bulk/bulk_processing.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/examples/bulk/simple_example.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/examples/programmatic_usage.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/justfile +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/mkdocs.yml +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/presentation/.gitignore +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/presentation/README.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/presentation/demos/.gitignore +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/presentation/demos/README.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/presentation/demos/api_demo.ipynb +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/presentation/demos/batch_processing_demo.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/presentation/demos/sample_data/.gitkeep +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/presentation/presentation_guide.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/presentation/revealjs/.gitignore +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/presentation/revealjs/Makefile +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/presentation/revealjs/README.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/presentation/revealjs/slides.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/presentation/speaker_script.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/requirements-docs.txt +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/samples/cmjs/README.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/scripts/README.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/scripts/SCRIPTS_QUICKREF.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/scripts/analyze_determinism_variance.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/scripts/generate_test_data.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/scripts/plot_validation_results.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/scripts/project/README.md +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/scripts/project/add-issue.sh +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/scripts/project/batch-set-fields.sh +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/scripts/project/helpers.sh +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/scripts/project/list.sh +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/scripts/project/set-field.sh +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/scripts/project/set-status.sh +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/scripts/project/summary.sh +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/scripts/project.sh +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/scripts/test_determinism.sh +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/scripts/validate_known_heights.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/sonar-project.properties +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/src/kinemotion/__init__.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/src/kinemotion/cli.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/src/kinemotion/cmj/__init__.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/src/kinemotion/cmj/joint_angles.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/src/kinemotion/core/__init__.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/src/kinemotion/core/auto_tuning.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/src/kinemotion/core/cmj_validation_bounds.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/src/kinemotion/core/debug_overlay_utils.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/src/kinemotion/core/dropjump_validation_bounds.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/src/kinemotion/core/filtering.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/src/kinemotion/core/formatting.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/src/kinemotion/core/pose.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/src/kinemotion/dropjump/__init__.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/src/kinemotion/dropjump/debug_overlay.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/src/kinemotion/py.typed +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/tests/__init__.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/tests/test_api.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/tests/test_aspect_ratio.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/tests/test_cli_cmj.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/tests/test_cli_dropjump.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/tests/test_cli_imports.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/tests/test_cmj_physiological_bounds.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/tests/test_contact_detection.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/tests/test_dropjump_validation_integration.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/tests/test_formatting.py +0 -0
- {kinemotion-0.30.0 → kinemotion-0.31.1}/tests/test_kinematics.py +0 -0
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Camera Perspective Analysis - 45° vs Lateral Angle Impact on Joint Angle Calculations
|
|
3
|
+
type: note
|
|
4
|
+
permalink: biomechanics/camera-perspective-analysis-45deg-vs-lateral
|
|
5
|
+
tags:
|
|
6
|
+
- camera-angle
|
|
7
|
+
- ankle-angle
|
|
8
|
+
- perspective
|
|
9
|
+
- validation
|
|
10
|
+
- issue-10
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Camera Perspective Analysis: 45° vs Lateral Angle Impact on Joint Angles
|
|
14
|
+
|
|
15
|
+
**Critical Finding:** The ankle angle and triple extension algorithms currently **DO NOT account for camera viewing angle**.
|
|
16
|
+
|
|
17
|
+
## Current Algorithm Behavior
|
|
18
|
+
|
|
19
|
+
### Code Analysis
|
|
20
|
+
|
|
21
|
+
**File:** `src/kinemotion/cmj/joint_angles.py`
|
|
22
|
+
|
|
23
|
+
All joint angle calculations use the same approach:
|
|
24
|
+
- **`calculate_angle_3_points(point1, point2, point3)`** - Generic 3-point angle calculator
|
|
25
|
+
- Uses law of cosines: `cos(angle) = (v1 · v2) / (|v1| * |v2|)`
|
|
26
|
+
- Works purely on 2D pixel coordinates from MediaPipe pose landmarks
|
|
27
|
+
- **No camera angle correction or perspective adjustment**
|
|
28
|
+
|
|
29
|
+
### How Angles are Calculated
|
|
30
|
+
|
|
31
|
+
1. **Ankle angle:** foot_index → ankle → knee (3-point angle in 2D)
|
|
32
|
+
2. **Knee angle:** ankle → knee → hip (3-point angle in 2D)
|
|
33
|
+
3. **Hip angle:** knee → hip → shoulder (3-point angle in 2D)
|
|
34
|
+
4. **Trunk tilt:** hip-to-shoulder angle relative to vertical
|
|
35
|
+
|
|
36
|
+
All calculations assume **the 2D pixel positions directly represent true joint angles** with no perspective correction.
|
|
37
|
+
|
|
38
|
+
## The Problem: Viewing Angle Effects
|
|
39
|
+
|
|
40
|
+
### What MediaPipe Gives Us
|
|
41
|
+
- 2D pixel coordinates (x, y) in normalized frame coordinates (0-1)
|
|
42
|
+
- Confidence scores (z) for each landmark
|
|
43
|
+
- **NO 3D information** (depth is estimated but not used for angle calculations)
|
|
44
|
+
- **NO camera intrinsic parameters** (focal length, principal point)
|
|
45
|
+
- **NO camera extrinsic parameters** (viewing angle relative to subject)
|
|
46
|
+
|
|
47
|
+
### How 45° View Differs from Lateral (90°)
|
|
48
|
+
|
|
49
|
+
#### Lateral View (90° - Pure Side View)
|
|
50
|
+
```
|
|
51
|
+
Camera ←→ Athlete
|
|
52
|
+
|
|
53
|
+
In 2D frame coordinates:
|
|
54
|
+
- Ankle, knee, hip aligned on Y-axis
|
|
55
|
+
- Joint angles in frame ≈ true anatomical angles
|
|
56
|
+
- Pure sagittal plane measurement
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
#### 45° View (Between Side and Front)
|
|
60
|
+
```
|
|
61
|
+
Athlete
|
|
62
|
+
↙ 45°
|
|
63
|
+
Camera
|
|
64
|
+
|
|
65
|
+
In 2D frame coordinates:
|
|
66
|
+
- Landmarks appear rotated in frame
|
|
67
|
+
- Ankle position compressed/shifted due to perspective
|
|
68
|
+
- Joint angles in frame ≠ true anatomical angles
|
|
69
|
+
- Mixed sagittal + frontal plane components
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Specific Impact on Ankle Angle
|
|
73
|
+
|
|
74
|
+
**Scenario:** Athlete plantarflexes at takeoff
|
|
75
|
+
|
|
76
|
+
**Lateral (90°) View:**
|
|
77
|
+
```
|
|
78
|
+
Expected: 80° (neutral) → 120° (plantarflex) = 40° progression
|
|
79
|
+
Measured: ≈ 80° → ≈ 120° = ≈ 40° ✓ CORRECT
|
|
80
|
+
Reason: Pure 2D angle matches anatomical angle
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**45° View (Current Code - NO Correction):**
|
|
84
|
+
```
|
|
85
|
+
Expected: 80° (neutral) → 120° (plantarflex) = 40° progression
|
|
86
|
+
Measured: ≈ 75° → ≈ 110° = ≈ 35° ❌ UNDERESTIMATED
|
|
87
|
+
Reason: Perspective foreshortening compresses ankle motion
|
|
88
|
+
- Foot appears less plantarflexed than reality
|
|
89
|
+
- 3D ankle angle compressed to 2D frame coordinates
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Mathematical Basis
|
|
93
|
+
|
|
94
|
+
### Why This Happens
|
|
95
|
+
|
|
96
|
+
When camera is at 45°:
|
|
97
|
+
- Athlete's foot is partially pointing away from camera
|
|
98
|
+
- Plantarflexion motion has components:
|
|
99
|
+
1. **In-plane (visible):** The sagittal movement toward camera
|
|
100
|
+
2. **Out-of-plane (not visible):** The depth component away from camera
|
|
101
|
+
|
|
102
|
+
2D pixel angle captures only in-plane component, **missing ~15-25% of plantarflexion**.
|
|
103
|
+
|
|
104
|
+
### Approximate Error Estimate
|
|
105
|
+
|
|
106
|
+
For a 45° camera angle viewing a plantarflexing ankle:
|
|
107
|
+
- **Systematic bias:** -5° to -10° (underestimation)
|
|
108
|
+
- **Proportional error:** -10% to -15% of true angle progression
|
|
109
|
+
- **Example:** True 40° progression measured as 34-36°
|
|
110
|
+
|
|
111
|
+
## Impact on Validation
|
|
112
|
+
|
|
113
|
+
### Issue for CMJ Ankle Angle Validation (Issue #10)
|
|
114
|
+
|
|
115
|
+
**Current target:** 30°+ ankle angle progression (80° → 120°+)
|
|
116
|
+
|
|
117
|
+
**What happens with 45° video:**
|
|
118
|
+
```
|
|
119
|
+
If true progression is 40° with ideal lateral view:
|
|
120
|
+
- Measured at 45° angle: ~34-36° ✓ Still passes criterion
|
|
121
|
+
- But measurement is systematically biased low
|
|
122
|
+
- Cannot be compared directly to lateral-view reference studies
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
**Specific risk:**
|
|
126
|
+
- Videos recorded at 45° may show ankle progression at edge of acceptance
|
|
127
|
+
- Same athlete at lateral (90°) view would show 5-10° more progression
|
|
128
|
+
- Inconsistent validation across different camera angles
|
|
129
|
+
|
|
130
|
+
### Impact on Triple Extension Analysis
|
|
131
|
+
|
|
132
|
+
Less critical than ankle, but still affected:
|
|
133
|
+
|
|
134
|
+
1. **Hip angle:** Mostly in sagittal plane - minimal 45° effect (~2-3° error)
|
|
135
|
+
2. **Knee angle:** Similar to hip - ~3-5° error
|
|
136
|
+
3. **Ankle angle:** Most affected - ~5-10° error (as above)
|
|
137
|
+
4. **Trunk tilt:** Depends on frame orientation - ~2-5° error
|
|
138
|
+
|
|
139
|
+
## Solutions (Not Yet Implemented)
|
|
140
|
+
|
|
141
|
+
### Option 1: Camera Angle Correction (Recommended)
|
|
142
|
+
- Add camera angle parameter to analysis
|
|
143
|
+
- Apply 2D→3D perspective transformation
|
|
144
|
+
- Requires knowing camera intrinsic/extrinsic parameters
|
|
145
|
+
- **Effort:** Moderate (1-2 weeks)
|
|
146
|
+
|
|
147
|
+
### Option 2: Dual-Camera Stereo (Research-Grade)
|
|
148
|
+
- Use Pose2Sim for 3D reconstruction
|
|
149
|
+
- Eliminates perspective ambiguity entirely
|
|
150
|
+
- **Effort:** High (requires additional infrastructure)
|
|
151
|
+
|
|
152
|
+
### Option 3: Validation Against Lateral View
|
|
153
|
+
- Record same athletes with both 45° and lateral cameras
|
|
154
|
+
- Create correction factors empirically
|
|
155
|
+
- **Effort:** Medium (requires validation study)
|
|
156
|
+
|
|
157
|
+
### Option 4: Document Limitation (Current Approach)
|
|
158
|
+
- Clearly state in guidelines: "Use lateral view for accurate measurements"
|
|
159
|
+
- Accept that 45° view is for improved visibility, not accuracy
|
|
160
|
+
- **Effort:** Low (documentation only)
|
|
161
|
+
|
|
162
|
+
## Recommendation for Recording Guidelines
|
|
163
|
+
|
|
164
|
+
**Current `INSTRUCCIONES-GRABACION-CMJ-ES.md` recommends 45° angle based on:**
|
|
165
|
+
- Better ankle/knee visibility (40-60% vs 18-27% in lateral)
|
|
166
|
+
- Reduced occlusion
|
|
167
|
+
- Better tracking quality
|
|
168
|
+
|
|
169
|
+
**But this introduces systematic measurement bias.**
|
|
170
|
+
|
|
171
|
+
### Choice to Make:
|
|
172
|
+
1. **Accept the trade-off:** Better visibility but ~10% ankle angle underestimation
|
|
173
|
+
2. **Use lateral view instead:** Pure measurements but ~30% lower landmark visibility
|
|
174
|
+
3. **Use 45° with documented correction:** Requires algorithm changes
|
|
175
|
+
|
|
176
|
+
## Code Status Summary
|
|
177
|
+
|
|
178
|
+
| Component | Status | Impact |
|
|
179
|
+
|-----------|--------|--------|
|
|
180
|
+
| `calculate_angle_3_points()` | 2D only, no perspective correction | All joint angles affected |
|
|
181
|
+
| `calculate_ankle_angle()` | No camera angle consideration | 5-10° systematic error at 45° |
|
|
182
|
+
| `calculate_triple_extension()` | Passes through angles as-is | Depends on individual angles |
|
|
183
|
+
| Documentation | No mention of camera angle limitations | Users unaware of bias |
|
|
184
|
+
|
|
185
|
+
## Evidence
|
|
186
|
+
|
|
187
|
+
- **Baldinger et al. (2025):** "Influence of the Camera Viewing Angle on OpenPose Validity in Motion Analysis" - documents ~15-20% joint angle errors with suboptimal camera angles
|
|
188
|
+
- **Project guidelines (docs/guides/camera-setup.md):** Recommends 45° for visibility but doesn't mention measurement accuracy trade-offs
|
|
189
|
+
|
|
190
|
+
## Action Items for Project
|
|
191
|
+
|
|
192
|
+
1. **Clarify recording guidelines:** Choose between visibility vs accuracy trade-off
|
|
193
|
+
2. **Document limitations:** If using 45°, explicitly state ±5-10° ankle angle uncertainty
|
|
194
|
+
3. **Consider 3D reconstruction:** Implement stereo or other 3D methods for future research-grade analysis
|
|
195
|
+
4. **Validate empirically:** Record test videos at multiple angles, compare measurements
|
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
---
|
|
2
|
+
title: CMJ Physiological Bounds for Validation
|
|
3
|
+
type: note
|
|
4
|
+
permalink: biomechanics/cmj-physiological-bounds-for-validation
|
|
5
|
+
tags:
|
|
6
|
+
- cmj
|
|
7
|
+
- validation
|
|
8
|
+
- biomechanics
|
|
9
|
+
- bounds
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# CMJ Physiological Bounds for Validation
|
|
8
13
|
|
|
9
14
|
This document defines realistic physiological bounds for Counter Movement Jump (CMJ) metrics used in kinemotion. These bounds prevent false positives from noise while catching real errors in video processing and phase detection.
|
|
10
15
|
|
|
@@ -28,7 +33,7 @@ From jump height formula: h = g·t²/8, therefore t = √(8h/g)
|
|
|
28
33
|
| **Recreational Typical** | 0.40-0.65 | Untrained to moderately trained (~20-50cm jumps) |
|
|
29
34
|
| **Elite Typical** | 0.65-0.95 | Trained athletes (60-90cm jumps) |
|
|
30
35
|
| **Absolute Maximum** | 1.1 | Elite male athletes only (>100cm jumps) |
|
|
31
|
-
| **Error Threshold** |
|
|
36
|
+
| **Error Threshold** | <0.08s or >1.3s | Indicates frame rate issue or detection failure |
|
|
32
37
|
|
|
33
38
|
### Calculation Examples
|
|
34
39
|
|
|
@@ -46,8 +51,6 @@ From jump height formula: h = g·t²/8, therefore t = √(8h/g)
|
|
|
46
51
|
- **Upper bound**: Human biomechanics limits maximum upward velocity to ~4.5 m/s (elite males). Using v² = 2gh: maximum jump ~103cm → t = 1.03s.
|
|
47
52
|
- **Frame rate dependency**: At lower frame rates (24fps), minimum flight time increases proportionally.
|
|
48
53
|
|
|
49
|
-
______________________________________________________________________
|
|
50
|
-
|
|
51
54
|
## 2. JUMP HEIGHT (meters)
|
|
52
55
|
|
|
53
56
|
### Definition
|
|
@@ -65,7 +68,7 @@ Maximum vertical displacement during flight, calculated from flight time: h = g
|
|
|
65
68
|
| **Trained Typical** | 0.50-0.75 | Athletes, active individuals |
|
|
66
69
|
| **Elite Typical** | 0.70-1.00 | Competitive athletes, basketball/volleyball players |
|
|
67
70
|
| **Absolute Maximum** | 1.15 | Genetic outliers, world-class performers |
|
|
68
|
-
| **Error Threshold** |
|
|
71
|
+
| **Error Threshold** | <0.02m or >1.30m | Indicates detection failure or data corruption |
|
|
69
72
|
|
|
70
73
|
### Reverse Velocity Verification
|
|
71
74
|
|
|
@@ -87,8 +90,6 @@ For independent validation, jump height should satisfy: h ≈ v_peak²/(2g)
|
|
|
87
90
|
- **Upper bound**: Peak concentric velocity physiologically maxes at ~4.5 m/s. Even elite males rarely exceed 110cm.
|
|
88
91
|
- **Gender differences**: Females typically 60-70% of male values; adjust upper bounds accordingly.
|
|
89
92
|
|
|
90
|
-
______________________________________________________________________
|
|
91
|
-
|
|
92
93
|
## 3. COUNTERMOVEMENT DEPTH (meters)
|
|
93
94
|
|
|
94
95
|
### Definition
|
|
@@ -105,7 +106,7 @@ Vertical distance traveled from standing position to lowest point of squat.
|
|
|
105
106
|
| **Deep CMJ** | 0.45-0.70 | Trained athletes, below-parallel squat |
|
|
106
107
|
| **Very Deep** | 0.65-0.90 | Tall individuals with excellent mobility |
|
|
107
108
|
| **Absolute Maximum** | 1.00 | Only possible for very tall athletes (>6'2") |
|
|
108
|
-
| **Error Threshold** |
|
|
109
|
+
| **Error Threshold** | <0.05m or >1.10m | Indicates pose tracking failure |
|
|
109
110
|
|
|
110
111
|
### Correlation with Jump Height
|
|
111
112
|
|
|
@@ -121,8 +122,6 @@ Research (Nordez et al., 2009; Lees et al., 2004):
|
|
|
121
122
|
- **Upper bound**: Human leg structure limits squat depth; >1.0m impossible without leg extension miscalculation.
|
|
122
123
|
- **Athlete variation**: Tall athletes naturally deeper; short athletes naturally shallower.
|
|
123
124
|
|
|
124
|
-
______________________________________________________________________
|
|
125
|
-
|
|
126
125
|
## 4. CONTACT TIME / CONCENTRIC DURATION (seconds)
|
|
127
126
|
|
|
128
127
|
### Definition
|
|
@@ -140,7 +139,7 @@ Time from lowest point (end of eccentric phase) to takeoff (start of propulsion
|
|
|
140
139
|
| **Slow (Untrained)** | 0.60-0.90 | Deconditioned, elderly |
|
|
141
140
|
| **Very Slow** | 0.80-1.20 | Weak, injured, or controlled movement |
|
|
142
141
|
| **Absolute Maximum** | 1.5 | Only in severe weakness or very elderly |
|
|
143
|
-
| **Error Threshold** |
|
|
142
|
+
| **Error Threshold** | <0.08s or >1.80s | Indicates phase detection failure |
|
|
144
143
|
|
|
145
144
|
### Reactive Strength Index (RSI) Cross-Check
|
|
146
145
|
|
|
@@ -148,7 +147,7 @@ RSI = flight_time / contact_time
|
|
|
148
147
|
|
|
149
148
|
| RSI Range | Interpretation |
|
|
150
149
|
| --------- | ------------------------------------ |
|
|
151
|
-
|
|
|
150
|
+
| <0.3 | Error (invalid metrics) |
|
|
152
151
|
| 0.3-0.8 | Untrained, poor reactive strength |
|
|
153
152
|
| 0.8-1.5 | Recreational, moderate RSI |
|
|
154
153
|
| 1.5-2.5 | Trained athletes |
|
|
@@ -157,12 +156,10 @@ RSI = flight_time / contact_time
|
|
|
157
156
|
|
|
158
157
|
### Why This Range
|
|
159
158
|
|
|
160
|
-
- **Lower bound**: Contact time
|
|
159
|
+
- **Lower bound**: Contact time <100ms requires ~200 m/s² acceleration (7G force); only possible with extreme training + equipment assistance.
|
|
161
160
|
- **Upper bound**: Contact time >1.5s indicates incomplete squat or detection of standing phase (should have stopped at lowest point).
|
|
162
161
|
- **RSI validation**: Contact time too short relative to flight time flags detection errors.
|
|
163
162
|
|
|
164
|
-
______________________________________________________________________
|
|
165
|
-
|
|
166
163
|
## 5. PEAK ECCENTRIC VELOCITY (m/s, downward)
|
|
167
164
|
|
|
168
165
|
### Definition
|
|
@@ -179,7 +176,7 @@ Maximum downward velocity during countermovement (negative values in signed velo
|
|
|
179
176
|
| **Trained** | 1.5-2.5 | Fast, controlled eccentric |
|
|
180
177
|
| **Elite** | 2.2-3.5 | Very fast eccentric phase |
|
|
181
178
|
| **Absolute Maximum** | 4.0 | Extreme athletes only |
|
|
182
|
-
| **Error Threshold** |
|
|
179
|
+
| **Error Threshold** | <0.10 m/s or >5.0 m/s | Indicates signal noise or tracking failure |
|
|
183
180
|
|
|
184
181
|
### Relationship to Countermovement Depth
|
|
185
182
|
|
|
@@ -198,8 +195,6 @@ Expected: v_eccentric = √(2g·depth)
|
|
|
198
195
|
- **Upper bound**: Maximum possible from v² = 2gh with 1.0m depth → v ≈ 4.4 m/s.
|
|
199
196
|
- **Validation**: Cross-check with: v² ≈ 2g·countermovement_depth
|
|
200
197
|
|
|
201
|
-
______________________________________________________________________
|
|
202
|
-
|
|
203
198
|
## 6. PEAK CONCENTRIC VELOCITY (m/s, upward)
|
|
204
199
|
|
|
205
200
|
### Definition
|
|
@@ -217,7 +212,7 @@ Maximum upward velocity during propulsion phase (from lowest point to takeoff).
|
|
|
217
212
|
| **Trained** | 2.5-3.5 | Athletes, 40-70cm jumps |
|
|
218
213
|
| **Elite** | 3.2-4.2 | High-level athletes, 65-90cm jumps |
|
|
219
214
|
| **Absolute Maximum** | 4.8 | Only elite male athletes (>100cm jumps) |
|
|
220
|
-
| **Error Threshold** |
|
|
215
|
+
| **Error Threshold** | <0.20 m/s or >5.5 m/s | Indicates detection error |
|
|
221
216
|
|
|
222
217
|
### Jump Height Verification Formula
|
|
223
218
|
|
|
@@ -242,8 +237,6 @@ Independent validation: h = v_peak² / (2g)
|
|
|
242
237
|
- **Upper bound**: Human physiology limits peak acceleration to ~10 m/s² in concentric phase over ~0.4s contact → ~4.0 m/s maximum.
|
|
243
238
|
- **Age/gender factors**: Females typically 80-85% of male values; adjust accordingly.
|
|
244
239
|
|
|
245
|
-
______________________________________________________________________
|
|
246
|
-
|
|
247
240
|
## 7. TRIPLE EXTENSION ANGLES (degrees)
|
|
248
241
|
|
|
249
242
|
### Definition
|
|
@@ -258,7 +251,7 @@ Joint angles at moment of takeoff, measuring hip, knee, ankle extension.
|
|
|
258
251
|
| **Trained Athletes** | 170-185° | Adequate extension |
|
|
259
252
|
| **Recreational** | 160-175° | Acceptable but less efficient |
|
|
260
253
|
| **Poor Extension** | 140-160° | Incomplete extension, weak hip power |
|
|
261
|
-
| **Error Threshold** |
|
|
254
|
+
| **Error Threshold** | <120° or >195° | Not at takeoff or processing error |
|
|
262
255
|
|
|
263
256
|
### 7.2 KNEE ANGLE
|
|
264
257
|
|
|
@@ -268,7 +261,7 @@ Joint angles at moment of takeoff, measuring hip, knee, ankle extension.
|
|
|
268
261
|
| **Trained Athletes** | 170-188° | Good extension |
|
|
269
262
|
| **Recreational** | 160-180° | Acceptable |
|
|
270
263
|
| **Poor Extension** | 140-165° | Incomplete quad extension |
|
|
271
|
-
| **Error Threshold** |
|
|
264
|
+
| **Error Threshold** | <130° or >200° | Not at takeoff or hyperextension error |
|
|
272
265
|
|
|
273
266
|
### 7.3 ANKLE ANGLE (plantarflexion)
|
|
274
267
|
|
|
@@ -278,7 +271,7 @@ Joint angles at moment of takeoff, measuring hip, knee, ankle extension.
|
|
|
278
271
|
| **Trained Athletes** | 125-150° | Good plantarflexion |
|
|
279
272
|
| **Recreational** | 115-140° | Acceptable |
|
|
280
273
|
| **Limited Plantarflexion** | 100-120° | Poor calf involvement |
|
|
281
|
-
| **Error Threshold** |
|
|
274
|
+
| **Error Threshold** | <90° (dorsiflexion) or >165° | Not at takeoff or tracking failure |
|
|
282
275
|
|
|
283
276
|
**Note**: Ankle angle measurement is challenging in side-view video due to foot foreshortening. MediaPipe may miss foot/ankle details.
|
|
284
277
|
|
|
@@ -290,7 +283,7 @@ Joint angles at moment of takeoff, measuring hip, knee, ankle extension.
|
|
|
290
283
|
| **Slight Forward** | 10-25° | Normal, healthy forward lean |
|
|
291
284
|
| **Moderate Forward** | 20-35° | Acceptable, some forward lean |
|
|
292
285
|
| **Excessive Forward** | 30-50° | Poor balance or off-center jump |
|
|
293
|
-
| **Error Threshold** |
|
|
286
|
+
| **Error Threshold** | <-10° (backward) or >60° | Likely off-balance or tracking error |
|
|
294
287
|
|
|
295
288
|
### Why These Ranges
|
|
296
289
|
|
|
@@ -299,8 +292,6 @@ Joint angles at moment of takeoff, measuring hip, knee, ankle extension.
|
|
|
299
292
|
- **Age/training effects**: Untrained athletes show incomplete extension; elderly show marked restrictions.
|
|
300
293
|
- **Video challenges**: Side view may have limited ankle visibility; front view may have poor hip detail.
|
|
301
294
|
|
|
302
|
-
______________________________________________________________________
|
|
303
|
-
|
|
304
295
|
## 8. ECCENTRIC AND CONCENTRIC DURATION (seconds)
|
|
305
296
|
|
|
306
297
|
### Definition
|
|
@@ -312,9 +303,9 @@ ______________________________________________________________________
|
|
|
312
303
|
|
|
313
304
|
| Phase | Minimum | Recreational | Elite | Maximum | Error Threshold |
|
|
314
305
|
| ------------------ | ------- | ------------ | ---------- | ------- | ----------------- |
|
|
315
|
-
| **Eccentric** | 0.25s | 0.40-0.70s | 0.35-0.60s | 1.0s | >1.2s or
|
|
316
|
-
| **Concentric** | 0.10s | 0.40-0.70s | 0.25-0.45s | 1.5s | >1.80s or
|
|
317
|
-
| **Total Movement** | 0.35s | 0.80-1.40s | 0.60-1.05s | 2.0s | >2.2s or
|
|
306
|
+
| **Eccentric** | 0.25s | 0.40-0.70s | 0.35-0.60s | 1.0s | >1.2s or <0.20s |
|
|
307
|
+
| **Concentric** | 0.10s | 0.40-0.70s | 0.25-0.45s | 1.5s | >1.80s or <0.08s |
|
|
308
|
+
| **Total Movement** | 0.35s | 0.80-1.40s | 0.60-1.05s | 2.0s | >2.2s or <0.30s |
|
|
318
309
|
|
|
319
310
|
### Eccentric-to-Concentric Ratio
|
|
320
311
|
|
|
@@ -329,8 +320,6 @@ ______________________________________________________________________
|
|
|
329
320
|
- **Concentric**: Trained athletes generate power quickly; untrained take longer.
|
|
330
321
|
- **Error flags**: If total time >2.2s, likely includes standing phase detection failure.
|
|
331
322
|
|
|
332
|
-
______________________________________________________________________
|
|
333
|
-
|
|
334
323
|
## 9. ATHLETE PROFILES & EXPECTED RANGES
|
|
335
324
|
|
|
336
325
|
### Profile 1: Elderly / Deconditioned
|
|
@@ -355,9 +344,7 @@ ______________________________________________________________________
|
|
|
355
344
|
|
|
356
345
|
- Jump height ~v² / (2g): 1.2² / 19.62 ≈ 0.073m ✓ (close to 0.10-0.18m range)
|
|
357
346
|
- Flight time confirmed from height: 0.10m → t = 0.286s ✓
|
|
358
|
-
- RSI in expected range: 0.15
|
|
359
|
-
|
|
360
|
-
______________________________________________________________________
|
|
347
|
+
- RSI in expected range: 0.15 < 0.25 ✓
|
|
361
348
|
|
|
362
349
|
### Profile 2: Recreational Athlete
|
|
363
350
|
|
|
@@ -383,8 +370,6 @@ ______________________________________________________________________
|
|
|
383
370
|
- Flight time from 0.45m: t = √(8×0.45/9.81) = 0.604s ✓ (middle of range)
|
|
384
371
|
- RSI: 0.60s / 0.50s = 1.2 ✓ (within 0.85-1.25)
|
|
385
372
|
|
|
386
|
-
______________________________________________________________________
|
|
387
|
-
|
|
388
373
|
### Profile 3: Elite Male Athlete
|
|
389
374
|
|
|
390
375
|
**Scenario**: Collegiate volleyball/basketball player, highly trained
|
|
@@ -410,8 +395,6 @@ ______________________________________________________________________
|
|
|
410
395
|
- RSI: 0.80s / 0.35s = 2.29 ✓ (within 1.85-2.80)
|
|
411
396
|
- Contact time much shorter than recreational profile ✓
|
|
412
397
|
|
|
413
|
-
______________________________________________________________________
|
|
414
|
-
|
|
415
398
|
## 10. EDGE CASES & VALID ANOMALIES
|
|
416
399
|
|
|
417
400
|
### Edge Case 1: Minimal Countermovement ("Stiffer" Jump)
|
|
@@ -435,11 +418,9 @@ ______________________________________________________________________
|
|
|
435
418
|
|
|
436
419
|
**Error if**:
|
|
437
420
|
|
|
438
|
-
- Countermovement depth
|
|
421
|
+
- Countermovement depth <0.08m AND flight time >0.40s (contradictory)
|
|
439
422
|
- No clear phase transitions (standing → squat → takeoff)
|
|
440
423
|
|
|
441
|
-
______________________________________________________________________
|
|
442
|
-
|
|
443
424
|
### Edge Case 2: Double-Bounce Pattern
|
|
444
425
|
|
|
445
426
|
**Description**: Athlete makes multiple micro-bounces at lowest point before main takeoff
|
|
@@ -458,8 +439,6 @@ ______________________________________________________________________
|
|
|
458
439
|
|
|
459
440
|
**Action**: Flag with warning "Multiple bounces detected - contact time may be artificially long"
|
|
460
441
|
|
|
461
|
-
______________________________________________________________________
|
|
462
|
-
|
|
463
442
|
### Edge Case 3: Incomplete Eccentric Phase
|
|
464
443
|
|
|
465
444
|
**Description**: Athlete starts recording already in mid-squat (no standing phase detected)
|
|
@@ -478,8 +457,6 @@ ______________________________________________________________________
|
|
|
478
457
|
|
|
479
458
|
**Note from code**: `standing_start_frame` can be None; handled in `calculate_cmj_metrics`
|
|
480
459
|
|
|
481
|
-
______________________________________________________________________
|
|
482
|
-
|
|
483
460
|
### Edge Case 4: Very Deep Squat (Extreme Flexibility)
|
|
484
461
|
|
|
485
462
|
**Description**: Athlete with exceptional mobility (yoga, gymnastics background) performs very deep squat
|
|
@@ -500,8 +477,6 @@ ______________________________________________________________________
|
|
|
500
477
|
|
|
501
478
|
**Example**: 0.70m depth with 0.80s contact → ratio = 1.14 s/m (valid)
|
|
502
479
|
|
|
503
|
-
______________________________________________________________________
|
|
504
|
-
|
|
505
480
|
### Edge Case 5: Unexpected High RSI with Low Jump Height
|
|
506
481
|
|
|
507
482
|
**Description**: Athlete shows RSI >2.0 but only jumps 30cm
|
|
@@ -522,8 +497,6 @@ ______________________________________________________________________
|
|
|
522
497
|
|
|
523
498
|
**Action**: Flag as warning "RSI appears high relative to jump height - review phase detection"
|
|
524
499
|
|
|
525
|
-
______________________________________________________________________
|
|
526
|
-
|
|
527
500
|
### Edge Case 6: High Jump Height with Shallow Countermovement
|
|
528
501
|
|
|
529
502
|
**Description**: 60cm jump height with only 25cm countermovement depth
|
|
@@ -545,9 +518,7 @@ ______________________________________________________________________
|
|
|
545
518
|
|
|
546
519
|
**Action**: Flag as error "Countermovement depth appears inconsistent with jump height; review standing position detection"
|
|
547
520
|
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
### Edge Case 7: Very Short Contact Time (\<0.15s)
|
|
521
|
+
### Edge Case 7: Very Short Contact Time (<0.15s)
|
|
551
522
|
|
|
552
523
|
**Description**: Contact time 0.12s with RSI = 4.5 and jump height 0.72m
|
|
553
524
|
|
|
@@ -567,8 +538,6 @@ ______________________________________________________________________
|
|
|
567
538
|
|
|
568
539
|
**Action**: Flag as error "Contact time unusually short; suspect lowest point detection error or frame rate mismatch"
|
|
569
540
|
|
|
570
|
-
______________________________________________________________________
|
|
571
|
-
|
|
572
541
|
## 11. VALIDATION LOGIC (Pseudo-code)
|
|
573
542
|
|
|
574
543
|
```python
|
|
@@ -751,8 +720,6 @@ def validate_triple_extension(angles: dict) -> list[str]:
|
|
|
751
720
|
return issues
|
|
752
721
|
```
|
|
753
722
|
|
|
754
|
-
______________________________________________________________________
|
|
755
|
-
|
|
756
723
|
## 12. IMPLEMENTATION RECOMMENDATIONS
|
|
757
724
|
|
|
758
725
|
### For Test Suite
|
|
@@ -763,19 +730,19 @@ ______________________________________________________________________
|
|
|
763
730
|
- Invalid values (below/above bounds)
|
|
764
731
|
- Edge cases (minimal CMJ, deep squat, etc.)
|
|
765
732
|
|
|
766
|
-
|
|
733
|
+
2. **Cross-validation tests**:
|
|
767
734
|
|
|
768
735
|
- Verify flight_time ↔ jump_height consistency
|
|
769
736
|
- Verify peak_velocity ↔ jump_height consistency
|
|
770
737
|
- Verify RSI within expected range
|
|
771
738
|
|
|
772
|
-
|
|
739
|
+
3. **Athlete profile tests**:
|
|
773
740
|
|
|
774
741
|
- Generate synthetic profiles matching elderly, recreational, elite
|
|
775
742
|
- Verify metrics fall within expected ranges
|
|
776
743
|
- Test detection with real video samples
|
|
777
744
|
|
|
778
|
-
|
|
745
|
+
4. **Edge case regression tests**:
|
|
779
746
|
|
|
780
747
|
- Minimal countermovement
|
|
781
748
|
- Double-bounce patterns
|
|
@@ -790,26 +757,20 @@ ______________________________________________________________________
|
|
|
790
757
|
- WARNING: Metrics valid but unusual; flag for review
|
|
791
758
|
- INFO: Normal variation, no action needed
|
|
792
759
|
|
|
793
|
-
|
|
760
|
+
2. **Auto-correction opportunities**:
|
|
794
761
|
|
|
795
762
|
- If jump_height and flight_time conflict, recalculate from more reliable source
|
|
796
763
|
- If contact_time seems too short but RSI reasonable, trust RSI
|
|
797
764
|
|
|
798
|
-
|
|
765
|
+
3. **Quality scoring**:
|
|
799
766
|
|
|
800
767
|
- Assign confidence score (0-100%) based on metric consistency
|
|
801
768
|
- Flag low-confidence results for manual review
|
|
802
769
|
|
|
803
|
-
______________________________________________________________________
|
|
804
|
-
|
|
805
770
|
## References
|
|
806
771
|
|
|
807
772
|
- **Nordez, A., Augé, T., Guével, A.** (2009). Effects of plyometric training on jump performance and energy cost. *Journal of Sports Sciences*, 27(11), 1143-1152.
|
|
808
|
-
|
|
809
773
|
- **Lees, A., Vanrenterghem, J., De Clercq, D.** (2004). Understanding how an arm swing enhances performance in the vertical jump. *Journal of Biomechanics*, 37(12), 1929-1940.
|
|
810
|
-
|
|
811
774
|
- **Cormie, P., McGuigan, M. R., Newton, R. U.** (2011). Developing maximal neuromuscular power: Performance characteristics of male athletes. *Sports Medicine*, 41(1), 17-38.
|
|
812
|
-
|
|
813
775
|
- **Bogdanis, G. C.** (2012). Effects of plyometric training on muscular performance and counter-movement jumping ability. *Journal of Strength and Conditioning Research*, 26(3), 676-695.
|
|
814
|
-
|
|
815
776
|
- **Markovic, G.** (2007). Poor relationships between strength and power qualities and high-intensity aerobic performance. *Journal of Sports Science & Medicine*, 6(1), 96-105.
|
|
@@ -1,6 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
---
|
|
2
|
+
title: CMJ Validation Implementation Complete
|
|
3
|
+
type: note
|
|
4
|
+
permalink: biomechanics/cmj-validation-implementation-complete
|
|
5
|
+
tags:
|
|
6
|
+
- cmj
|
|
7
|
+
- validation
|
|
8
|
+
- implementation
|
|
9
|
+
- bounds
|
|
10
|
+
- testing
|
|
11
|
+
---
|
|
4
12
|
|
|
5
13
|
# CMJ Validation Implementation - Complete Delivery
|
|
6
14
|
|