kinemotion 0.25.0__tar.gz → 0.26.0__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.25.0 → kinemotion-0.26.0}/CHANGELOG.md +13 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/PKG-INFO +1 -1
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/validation/determinism-test.md +5 -5
- kinemotion-0.26.0/docs/validation/known-height-validation.md +429 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/pyproject.toml +1 -1
- {kinemotion-0.25.0 → kinemotion-0.26.0}/scripts/README.md +6 -6
- kinemotion-0.26.0/scripts/generate_test_data.py +258 -0
- kinemotion-0.26.0/scripts/plot_validation_results.py +431 -0
- kinemotion-0.26.0/scripts/validate_known_heights.py +433 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/src/kinemotion/dropjump/kinematics.py +78 -75
- {kinemotion-0.25.0 → kinemotion-0.26.0}/uv.lock +1 -1
- {kinemotion-0.25.0 → kinemotion-0.26.0}/.dockerignore +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/.gitattributes +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/.github/pull_request_template.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/.github/workflows/docs.yml +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/.github/workflows/release.yml +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/.github/workflows/test.yml +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/.gitignore +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/.pre-commit-config.yaml +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/.readthedocs.yml +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/.tool-versions +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/CLAUDE.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/CODE_OF_CONDUCT.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/CONTRIBUTING.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/Dockerfile +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/GEMINI.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/LICENSE +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/README.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/SECURITY.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/README.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/api/cmj.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/api/core.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/api/dropjump.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/api/overview.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/development/errors-findings.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/development/testing.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/development/type-hints.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/development/validation-plan.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/development/validation-roadmap.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/development/wallball-norep-detection.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/guides/bulk-processing.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/guides/camera-setup.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/guides/cmj-guide.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/index.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/reference/json-output-format.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/reference/json-structure-comparison.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/reference/parameters.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/reference/pose-systems.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/paper-downloader/HOW-TO-FIND-DOIS.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/paper-downloader/README.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/paper-downloader/dois.txt +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/paper-downloader/download.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/paper-downloader/pyproject.toml +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/paper-downloader/uv.lock +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/MANUAL-DOWNLOAD-GUIDE.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/README.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/convert_pdfs.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Ward_Putting-i-in-Team.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/jump-performance/2011_Harper_10-to-5-Jump-Test.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/jump-performance/2014_Samozino_FV-Imbalance.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/jump-performance/2022_Wells_Golf-Clubhead-CMJ.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Moore_Economical-Running-Technique.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/smartphone-technology/2022_Bishop_MyJumpLab-Validation.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/markdown/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/online-references-for-papers.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Ward_Putting-i-in-Team.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/jump-performance/2011_Harper_10-to-5-Jump-Test.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/jump-performance/2014_Samozino_FV-Imbalance.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/jump-performance/2022_Wells_Golf-Clubhead-CMJ.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Moore_Economical-Running-Technique.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/smartphone-technology/2022_Bishop_MyJumpLab-Validation.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/research/thirdparty/pdfs/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.pdf +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/technical/framerate.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/technical/implementation-details.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/technical/imu-metadata.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/technical/real-time-analysis.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/technical/triple-extension.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/translations/es/camera-setup.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/docs/validation-status.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/examples/bulk/README.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/examples/bulk/bulk_processing.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/examples/bulk/simple_example.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/examples/programmatic_usage.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/mkdocs.yml +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/presentation/.gitignore +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/presentation/README.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/presentation/demos/.gitignore +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/presentation/demos/README.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/presentation/demos/api_demo.ipynb +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/presentation/demos/batch_processing_demo.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/presentation/demos/sample_data/.gitkeep +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/presentation/presentation_guide.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/presentation/revealjs/.gitignore +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/presentation/revealjs/Makefile +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/presentation/revealjs/README.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/presentation/revealjs/slides.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/presentation/speaker_script.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/requirements-docs.txt +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/samples/cmjs/README.md +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/scripts/analyze_determinism_variance.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/scripts/test_determinism.sh +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/sonar-project.properties +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/src/kinemotion/__init__.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/src/kinemotion/api.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/src/kinemotion/cli.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/src/kinemotion/cmj/__init__.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/src/kinemotion/cmj/analysis.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/src/kinemotion/cmj/cli.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/src/kinemotion/cmj/debug_overlay.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/src/kinemotion/cmj/joint_angles.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/src/kinemotion/cmj/kinematics.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/src/kinemotion/core/__init__.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/src/kinemotion/core/auto_tuning.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/src/kinemotion/core/cli_utils.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/src/kinemotion/core/debug_overlay_utils.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/src/kinemotion/core/filtering.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/src/kinemotion/core/metadata.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/src/kinemotion/core/pose.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/src/kinemotion/core/quality.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/src/kinemotion/core/smoothing.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/src/kinemotion/core/video_io.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/src/kinemotion/dropjump/__init__.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/src/kinemotion/dropjump/analysis.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/src/kinemotion/dropjump/cli.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/src/kinemotion/dropjump/debug_overlay.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/src/kinemotion/py.typed +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/tests/__init__.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/tests/core/test_quality.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/tests/test_adaptive_threshold.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/tests/test_api.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/tests/test_aspect_ratio.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/tests/test_cli_cmj.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/tests/test_cli_dropjump.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/tests/test_cli_imports.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/tests/test_cmj_analysis.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/tests/test_cmj_kinematics.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/tests/test_com_estimation.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/tests/test_contact_detection.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/tests/test_filtering.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/tests/test_joint_angles.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/tests/test_kinematics.py +0 -0
- {kinemotion-0.25.0 → kinemotion-0.26.0}/tests/test_polyorder.py +0 -0
|
@@ -7,6 +7,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
<!-- version list -->
|
|
9
9
|
|
|
10
|
+
## v0.26.0 (2025-11-14)
|
|
11
|
+
|
|
12
|
+
### Features
|
|
13
|
+
|
|
14
|
+
- Implement known height validation (Task 1.4)
|
|
15
|
+
([`6f9dbf9`](https://github.com/feniix/kinemotion/commit/6f9dbf9a78f073e02593067280ee0661fd2f2545))
|
|
16
|
+
|
|
17
|
+
### Refactoring
|
|
18
|
+
|
|
19
|
+
- Reduce cognitive complexity in DropJumpMetrics.to_dict() from 17 to 3
|
|
20
|
+
([`1f6c99b`](https://github.com/feniix/kinemotion/commit/1f6c99b11979b6d336d14c329f2409be0ebbc6db))
|
|
21
|
+
|
|
22
|
+
|
|
10
23
|
## v0.25.0 (2025-11-14)
|
|
11
24
|
|
|
12
25
|
### Documentation
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kinemotion
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.26.0
|
|
4
4
|
Summary: Video-based kinematic analysis for athletic performance
|
|
5
5
|
Project-URL: Homepage, https://github.com/feniix/kinemotion
|
|
6
6
|
Project-URL: Repository, https://github.com/feniix/kinemotion
|
|
@@ -98,7 +98,7 @@ ______________________________________________________________________
|
|
|
98
98
|
|
|
99
99
|
### Success Output
|
|
100
100
|
|
|
101
|
-
```
|
|
101
|
+
```text
|
|
102
102
|
Comparing 100 result files...
|
|
103
103
|
============================================================
|
|
104
104
|
✅ SUCCESS: All 100 runs produced identical results
|
|
@@ -116,7 +116,7 @@ This means:
|
|
|
116
116
|
|
|
117
117
|
### Variance Analysis
|
|
118
118
|
|
|
119
|
-
```
|
|
119
|
+
```text
|
|
120
120
|
Jump Height (m):
|
|
121
121
|
Mean: 0.4540739478
|
|
122
122
|
Std: 0.000000000000000
|
|
@@ -213,19 +213,19 @@ ______________________________________________________________________
|
|
|
213
213
|
|
|
214
214
|
### Common Issues and Fixes
|
|
215
215
|
|
|
216
|
-
|
|
216
|
+
### Issue: Timestamps in metadata vary
|
|
217
217
|
|
|
218
218
|
- **Expected!** Processing time and timestamp SHOULD vary
|
|
219
219
|
- **Not a problem** - these are metadata, not measurements
|
|
220
220
|
- **Fix:** Exclude these from comparison or accept variance
|
|
221
221
|
|
|
222
|
-
|
|
222
|
+
### Issue: Small floating point differences
|
|
223
223
|
|
|
224
224
|
- **Acceptable** if std \< 1e-10
|
|
225
225
|
- **Cause:** Floating point arithmetic order
|
|
226
226
|
- **Fix:** Not needed, this is normal
|
|
227
227
|
|
|
228
|
-
|
|
228
|
+
### Issue: Large variance in measurements
|
|
229
229
|
|
|
230
230
|
- **Problem!** Algorithm is non-deterministic
|
|
231
231
|
- **Fix:** Debug and fix before proceeding
|
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
# Known Height Validation
|
|
2
|
+
|
|
3
|
+
**Status:** Protocol Documentation (Pre-testing)
|
|
4
|
+
**Updated:** 2025-11-14
|
|
5
|
+
**Type:** Physics-based validation without laboratory equipment
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
This validation protocol tests kinemotion's timing accuracy by comparing measured flight times against theoretical predictions from physics equations. By dropping objects from measured heights, we can validate the algorithm's ability to measure flight time correctly without access to force plates or motion capture systems.
|
|
10
|
+
|
|
11
|
+
**Key Principle:** For a freely falling object, theoretical flight time can be calculated precisely:
|
|
12
|
+
|
|
13
|
+
```text
|
|
14
|
+
t = √(2h/g)
|
|
15
|
+
|
|
16
|
+
where:
|
|
17
|
+
t = flight time (seconds)
|
|
18
|
+
h = drop height (meters)
|
|
19
|
+
g = gravitational acceleration (9.81 m/s²)
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Test Protocol
|
|
23
|
+
|
|
24
|
+
### Equipment Required
|
|
25
|
+
|
|
26
|
+
- Basketball, medicine ball, or similar object
|
|
27
|
+
- Measuring tape (minimum 2m)
|
|
28
|
+
- Camera capable of 60fps recording (smartphone acceptable)
|
|
29
|
+
- Tripod or stable mount
|
|
30
|
+
- Markers/tape for marking heights
|
|
31
|
+
|
|
32
|
+
### Test Setup
|
|
33
|
+
|
|
34
|
+
1. **Select drop heights:** 0.5m, 1.0m, 1.5m
|
|
35
|
+
|
|
36
|
+
- Recommended: Create test rig with marked heights on wall
|
|
37
|
+
- Use measuring tape to verify exact heights
|
|
38
|
+
|
|
39
|
+
1. **Camera positioning:**
|
|
40
|
+
|
|
41
|
+
- Mount camera on tripod at 60fps or higher
|
|
42
|
+
- Position to capture full drop trajectory
|
|
43
|
+
- Ensure consistent distance and angle for all drops
|
|
44
|
+
- Adequate lighting (consistent throughout)
|
|
45
|
+
|
|
46
|
+
1. **Drop execution:**
|
|
47
|
+
|
|
48
|
+
- Position ball at marked height
|
|
49
|
+
- Release (don't throw) from rest
|
|
50
|
+
- Ball should drop vertically
|
|
51
|
+
- Ensure complete capture from release to landing
|
|
52
|
+
|
|
53
|
+
### Video Filename Format
|
|
54
|
+
|
|
55
|
+
Videos must follow this naming convention for automatic height extraction:
|
|
56
|
+
|
|
57
|
+
```text
|
|
58
|
+
drop_[HEIGHT]m_run[NUMBER].mp4
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**Examples:**
|
|
62
|
+
|
|
63
|
+
- `drop_0.5m_run1.mp4` - 0.5m drop, first repetition
|
|
64
|
+
- `drop_1.0m_run2.mp4` - 1.0m drop, second repetition
|
|
65
|
+
- `drop_1.5m_run3.mp4` - 1.5m drop, third repetition
|
|
66
|
+
|
|
67
|
+
Minimum: 10 drops per height (30 total videos)
|
|
68
|
+
Recommended: 15 drops per height (45 total videos)
|
|
69
|
+
|
|
70
|
+
### Expected Theoretical Values
|
|
71
|
+
|
|
72
|
+
| Height (m) | Theoretical Flight Time (s) |
|
|
73
|
+
| ---------- | --------------------------- |
|
|
74
|
+
| 0.50 | 0.319 |
|
|
75
|
+
| 1.00 | 0.452 |
|
|
76
|
+
| 1.50 | 0.553 |
|
|
77
|
+
|
|
78
|
+
## Analysis
|
|
79
|
+
|
|
80
|
+
### Running Validation Script
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
# Validate all videos in default directory
|
|
84
|
+
python scripts/validate_known_heights.py
|
|
85
|
+
|
|
86
|
+
# Validate custom directory
|
|
87
|
+
python scripts/validate_known_heights.py --videos-dir data/my_drops
|
|
88
|
+
|
|
89
|
+
# Save results as JSON
|
|
90
|
+
python scripts/validate_known_heights.py --output results.json
|
|
91
|
+
|
|
92
|
+
# Create visualizations
|
|
93
|
+
python scripts/plot_validation_results.py results.json --output-dir plots/
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Script Outputs
|
|
97
|
+
|
|
98
|
+
**Console Output:**
|
|
99
|
+
|
|
100
|
+
- Per-video: measured vs theoretical flight times
|
|
101
|
+
- Error in milliseconds and percent
|
|
102
|
+
- Confidence assessment per video
|
|
103
|
+
- Summary statistics
|
|
104
|
+
|
|
105
|
+
**JSON Output** (with `--output`):
|
|
106
|
+
|
|
107
|
+
```json
|
|
108
|
+
{
|
|
109
|
+
"summary": {
|
|
110
|
+
"total_videos": 30,
|
|
111
|
+
"mae_ms": 8.45,
|
|
112
|
+
"rmse_ms": 10.2,
|
|
113
|
+
"bias_ms": 2.1,
|
|
114
|
+
"correlation": 0.9987,
|
|
115
|
+
"pass_mae": true,
|
|
116
|
+
"pass_rmse": true,
|
|
117
|
+
"pass_correlation": true
|
|
118
|
+
},
|
|
119
|
+
"results": [
|
|
120
|
+
{
|
|
121
|
+
"video": "drop_0.5m_run1.mp4",
|
|
122
|
+
"true_height_m": 0.5,
|
|
123
|
+
"measured_flight_time_s": 0.321,
|
|
124
|
+
"theoretical_flight_time_s": 0.319,
|
|
125
|
+
"absolute_error_ms": 2.0,
|
|
126
|
+
"percent_error": 0.63,
|
|
127
|
+
"confidence": "high"
|
|
128
|
+
}
|
|
129
|
+
]
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**Visualization Output:**
|
|
134
|
+
|
|
135
|
+
- `validation_measured_vs_theoretical.png` - Scatter plot with fit line
|
|
136
|
+
- `validation_residuals.png` - Residual distribution
|
|
137
|
+
- `validation_bland_altman.png` - Agreement analysis
|
|
138
|
+
|
|
139
|
+
## Success Criteria
|
|
140
|
+
|
|
141
|
+
### Primary Metrics
|
|
142
|
+
|
|
143
|
+
| Metric | Threshold | Rationale |
|
|
144
|
+
| ----------------------------- | --------- | ------------------------------------ |
|
|
145
|
+
| Mean Absolute Error (MAE) | \< 20ms | Acceptable for 30-60fps video |
|
|
146
|
+
| Root Mean Square Error (RMSE) | \< 30ms | Accounts for larger outliers |
|
|
147
|
+
| Correlation (r) | > 0.99 | Strong linear relationship |
|
|
148
|
+
| Systematic Bias | \< 5ms | No consistent under/over-measurement |
|
|
149
|
+
|
|
150
|
+
### Confidence Levels
|
|
151
|
+
|
|
152
|
+
- **High:** Error \< 10ms → reliable measurement
|
|
153
|
+
- **Medium:** Error 10-20ms → acceptable, note in results
|
|
154
|
+
- **Low:** Error > 20ms → investigate cause
|
|
155
|
+
|
|
156
|
+
## Interpretation
|
|
157
|
+
|
|
158
|
+
### What This Validates
|
|
159
|
+
|
|
160
|
+
✅ **Validates:**
|
|
161
|
+
|
|
162
|
+
- Kinemotion accurately measures flight time
|
|
163
|
+
- Algorithm correctly identifies takeoff and landing frames
|
|
164
|
+
- Timing accuracy at different heights
|
|
165
|
+
- Consistency across multiple runs
|
|
166
|
+
- Algorithm determinism (no random variation)
|
|
167
|
+
|
|
168
|
+
❌ **Does NOT validate:**
|
|
169
|
+
|
|
170
|
+
- Absolute accuracy against force plates (gold standard)
|
|
171
|
+
- Jump height calculations (depends on flight time + other factors)
|
|
172
|
+
- Countermovement or landing dynamics
|
|
173
|
+
- Performance suitability for research publications
|
|
174
|
+
|
|
175
|
+
### Common Causes of Error
|
|
176
|
+
|
|
177
|
+
**Systematic Bias (consistent over/under-measurement):**
|
|
178
|
+
|
|
179
|
+
- Incorrect frame rate in video file metadata
|
|
180
|
+
- Systematic tracking delay from MediaPipe
|
|
181
|
+
- Lighting artifacts affecting frame detection
|
|
182
|
+
|
|
183
|
+
**Random Error (variable error across videos):**
|
|
184
|
+
|
|
185
|
+
- Inconsistent lighting conditions
|
|
186
|
+
- Ball not dropping vertically
|
|
187
|
+
- Video compression artifacts
|
|
188
|
+
- Poor tracking on landing frame
|
|
189
|
+
|
|
190
|
+
**Large Errors (> 20ms):**
|
|
191
|
+
|
|
192
|
+
- Low frame rate (\< 30fps) - insufficient temporal resolution
|
|
193
|
+
- Video recording at different frame rate than specified
|
|
194
|
+
- Ball bouncing or multiple contact points
|
|
195
|
+
- Occlusion during flight
|
|
196
|
+
|
|
197
|
+
## Data Collection Recommendations
|
|
198
|
+
|
|
199
|
+
### Best Practices
|
|
200
|
+
|
|
201
|
+
1. **Lighting:**
|
|
202
|
+
|
|
203
|
+
- Use consistent, diffuse lighting
|
|
204
|
+
- Avoid shadows on ball or background
|
|
205
|
+
- Avoid reflective backgrounds
|
|
206
|
+
|
|
207
|
+
1. **Camera Setup:**
|
|
208
|
+
|
|
209
|
+
- Use 60fps or higher
|
|
210
|
+
- Verify actual frame rate in recording properties
|
|
211
|
+
- Use manual focus (avoid autofocus hunting)
|
|
212
|
+
- High contrast background (ball visibility)
|
|
213
|
+
|
|
214
|
+
1. **Drop Execution:**
|
|
215
|
+
|
|
216
|
+
- Release from rest (no initial velocity)
|
|
217
|
+
- Ensure ball falls vertically (no rotation)
|
|
218
|
+
- Allow complete impact capture (don't cut short)
|
|
219
|
+
- Repeat consistently across all heights
|
|
220
|
+
|
|
221
|
+
1. **Quality Control:**
|
|
222
|
+
|
|
223
|
+
- Check each video for:
|
|
224
|
+
- Clear ball visibility throughout
|
|
225
|
+
- No compression artifacts
|
|
226
|
+
- Complete trajectory capture
|
|
227
|
+
- Adequate lighting
|
|
228
|
+
|
|
229
|
+
### Problematic Videos
|
|
230
|
+
|
|
231
|
+
Exclude videos with:
|
|
232
|
+
|
|
233
|
+
- Ball not visible for portion of flight
|
|
234
|
+
- Multiple bounces before landing
|
|
235
|
+
- Partial frame capture
|
|
236
|
+
- Extreme motion blur
|
|
237
|
+
- Inconsistent lighting changes
|
|
238
|
+
|
|
239
|
+
## Expected Results
|
|
240
|
+
|
|
241
|
+
### Typical Performance
|
|
242
|
+
|
|
243
|
+
For properly conducted testing with 60fps video:
|
|
244
|
+
|
|
245
|
+
```text
|
|
246
|
+
Sample Results (30 drops):
|
|
247
|
+
- MAE: 6-12ms
|
|
248
|
+
- RMSE: 8-15ms
|
|
249
|
+
- Bias: -2 to +3ms
|
|
250
|
+
- Correlation: > 0.998
|
|
251
|
+
- 90% of measurements: high confidence
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### Pass/Fail Criteria
|
|
255
|
+
|
|
256
|
+
**PASS:** All three criteria met:
|
|
257
|
+
|
|
258
|
+
- ✅ MAE \< 20ms
|
|
259
|
+
- ✅ RMSE \< 30ms
|
|
260
|
+
- ✅ Correlation > 0.99
|
|
261
|
+
|
|
262
|
+
**FAIL:** Any criterion not met
|
|
263
|
+
|
|
264
|
+
- ❌ Investigate cause
|
|
265
|
+
- ❌ Check video quality
|
|
266
|
+
- ❌ Verify frame rate
|
|
267
|
+
- ❌ Review setup
|
|
268
|
+
|
|
269
|
+
## Troubleshooting
|
|
270
|
+
|
|
271
|
+
### High Error Rate
|
|
272
|
+
|
|
273
|
+
**Problem:** Most measurements have errors > 20ms
|
|
274
|
+
|
|
275
|
+
**Possible Causes:**
|
|
276
|
+
|
|
277
|
+
1. **Low frame rate** - Most common
|
|
278
|
+
|
|
279
|
+
- Solution: Use 60fps minimum (120fps ideal)
|
|
280
|
+
- Verify: Check video properties
|
|
281
|
+
|
|
282
|
+
1. **Landing detection issues** - Ball bounces or unclear contact
|
|
283
|
+
|
|
284
|
+
- Solution: Ensure ball lands on dark/uniform background
|
|
285
|
+
- Solution: Check for motion blur
|
|
286
|
+
|
|
287
|
+
1. **Lighting problems** - Poor ball visibility
|
|
288
|
+
|
|
289
|
+
- Solution: Increase lighting consistency
|
|
290
|
+
- Solution: Use high-contrast background
|
|
291
|
+
|
|
292
|
+
**Diagnostic Steps:**
|
|
293
|
+
|
|
294
|
+
- Manually verify 1-2 videos with frame counter
|
|
295
|
+
- Check if error is systematic (always early/late) or random
|
|
296
|
+
- Compare high-error vs low-error videos for differences
|
|
297
|
+
|
|
298
|
+
### Bias Present (Consistent Offset)
|
|
299
|
+
|
|
300
|
+
**Problem:** Errors consistently positive or negative
|
|
301
|
+
|
|
302
|
+
**Examples:**
|
|
303
|
+
|
|
304
|
+
- Always 8ms too fast → bias = -8ms
|
|
305
|
+
- Always 5ms too slow → bias = +5ms
|
|
306
|
+
|
|
307
|
+
**Causes:**
|
|
308
|
+
|
|
309
|
+
1. Frame rate metadata incorrect (camera reports 60fps, actually 59.7fps)
|
|
310
|
+
1. Systematic delay in takeoff/landing detection
|
|
311
|
+
1. Video processing lag
|
|
312
|
+
|
|
313
|
+
**Solutions:**
|
|
314
|
+
|
|
315
|
+
- Verify actual frame rate with: `ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate -of default=noprint_wrappers=1:nokey=1:separator=/ video.mp4`
|
|
316
|
+
- If bias > 5ms, investigate algorithm parameters
|
|
317
|
+
- Document bias for future corrections
|
|
318
|
+
|
|
319
|
+
### Correlation Low (\< 0.99)
|
|
320
|
+
|
|
321
|
+
**Problem:** Error increases with height (or height-independent outliers)
|
|
322
|
+
|
|
323
|
+
**Causes:**
|
|
324
|
+
|
|
325
|
+
1. Tracking degradation at different heights
|
|
326
|
+
1. Height-dependent lighting changes
|
|
327
|
+
1. Camera angle effects
|
|
328
|
+
1. Incomplete test data
|
|
329
|
+
|
|
330
|
+
**Solutions:**
|
|
331
|
+
|
|
332
|
+
- Verify even lighting across all heights
|
|
333
|
+
- Check that camera angle is perpendicular to drop
|
|
334
|
+
- Review and potentially exclude outlier videos
|
|
335
|
+
- Ensure minimum 30 videos per condition
|
|
336
|
+
|
|
337
|
+
## Next Steps
|
|
338
|
+
|
|
339
|
+
### After Validation
|
|
340
|
+
|
|
341
|
+
If validation **PASSES**:
|
|
342
|
+
|
|
343
|
+
- Document results in project
|
|
344
|
+
- Update validation status with "Known Height Validation: PASSED"
|
|
345
|
+
- Reference in README
|
|
346
|
+
- Use as baseline for future algorithm changes
|
|
347
|
+
|
|
348
|
+
If validation **FAILS**:
|
|
349
|
+
|
|
350
|
+
1. Investigate specific cause (see Troubleshooting)
|
|
351
|
+
1. Collect additional test videos addressing identified issue
|
|
352
|
+
1. Retest with improvements
|
|
353
|
+
1. Document what was changed and why
|
|
354
|
+
|
|
355
|
+
### Integration with Broader Validation
|
|
356
|
+
|
|
357
|
+
This test is **Task 1.4** in the validation roadmap.
|
|
358
|
+
|
|
359
|
+
**Next Task (1.5):** Parameter Sensitivity Report
|
|
360
|
+
|
|
361
|
+
- Systematic testing of algorithm parameters
|
|
362
|
+
- Identify which parameters affect timing measurement
|
|
363
|
+
- Provide tuning guidance for different use cases
|
|
364
|
+
|
|
365
|
+
**Future Tasks:**
|
|
366
|
+
|
|
367
|
+
- Manual frame selection comparison (vs smartphone app)
|
|
368
|
+
- Multi-session reliability study
|
|
369
|
+
- Environmental condition testing
|
|
370
|
+
|
|
371
|
+
## References
|
|
372
|
+
|
|
373
|
+
### Physics Formulas
|
|
374
|
+
|
|
375
|
+
**Free fall from rest:**
|
|
376
|
+
|
|
377
|
+
- Position: `h = 0.5 * g * t²`
|
|
378
|
+
- Velocity: `v = g * t`
|
|
379
|
+
- Time to fall height h: `t = √(2h/g)`
|
|
380
|
+
|
|
381
|
+
**Constants:**
|
|
382
|
+
|
|
383
|
+
- g = 9.81 m/s² (use 9.8 m/s² if more precision needed: 9.807 m/s²)
|
|
384
|
+
|
|
385
|
+
### Related Documentation
|
|
386
|
+
|
|
387
|
+
- `docs/validation-status.md` - Overall validation status
|
|
388
|
+
- `docs/development/validation-roadmap.md` - Full validation roadmap
|
|
389
|
+
- `scripts/validate_known_heights.py` - Main validation script
|
|
390
|
+
- `scripts/plot_validation_results.py` - Visualization script
|
|
391
|
+
|
|
392
|
+
## Appendix: Manual Frame Analysis
|
|
393
|
+
|
|
394
|
+
### Verifying Results Manually
|
|
395
|
+
|
|
396
|
+
If you want to manually verify a video:
|
|
397
|
+
|
|
398
|
+
1. Open video in frame-by-frame capable player (VLC, FFmpeg)
|
|
399
|
+
1. Find first frame where ball is in motion (takeoff)
|
|
400
|
+
1. Find first frame where ball contacts ground (landing)
|
|
401
|
+
1. Count frames between takeoff and landing
|
|
402
|
+
1. Divide by frame rate: `flight_time = frame_count / fps`
|
|
403
|
+
|
|
404
|
+
**Example:**
|
|
405
|
+
|
|
406
|
+
- Takeoff frame: 120
|
|
407
|
+
- Landing frame: 147
|
|
408
|
+
- Frame count: 147 - 120 = 27 frames
|
|
409
|
+
- At 60fps: 27 / 60 = 0.45 seconds
|
|
410
|
+
|
|
411
|
+
**Compare to kinemotion output:**
|
|
412
|
+
|
|
413
|
+
- If kinemotion reports 0.45s → correct ✅
|
|
414
|
+
- If kinemotion reports 0.48s → investigate (28 frames detected)
|
|
415
|
+
- If kinemotion reports 0.42s → investigate (25 frames detected)
|
|
416
|
+
|
|
417
|
+
This manual verification is valuable for:
|
|
418
|
+
|
|
419
|
+
- Understanding algorithm behavior
|
|
420
|
+
- Identifying systematic detection errors
|
|
421
|
+
- Training eye for frame-level accuracy
|
|
422
|
+
|
|
423
|
+
## Questions & Feedback
|
|
424
|
+
|
|
425
|
+
For issues, questions, or suggestions:
|
|
426
|
+
|
|
427
|
+
- Check `docs/validation/known-height-validation.md` (this file)
|
|
428
|
+
- Review script output and logs
|
|
429
|
+
- See `docs/validation-status.md` for current validation state
|
|
@@ -27,7 +27,7 @@ ______________________________________________________________________
|
|
|
27
27
|
|
|
28
28
|
**Expected result:**
|
|
29
29
|
|
|
30
|
-
```
|
|
30
|
+
```text
|
|
31
31
|
✅ SUCCESS: All 100 runs produced identical results
|
|
32
32
|
Algorithm is DETERMINISTIC!
|
|
33
33
|
```
|
|
@@ -38,7 +38,7 @@ ______________________________________________________________________
|
|
|
38
38
|
|
|
39
39
|
### `test_determinism.sh`
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
#### Test-retest determinism validation
|
|
42
42
|
|
|
43
43
|
- Runs same video 100 times
|
|
44
44
|
- Uses batch processing (realistic usage)
|
|
@@ -55,7 +55,7 @@ ______________________________________________________________________
|
|
|
55
55
|
|
|
56
56
|
### `analyze_determinism_variance.py`
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
#### Detailed variance analysis
|
|
59
59
|
|
|
60
60
|
- Calculates mean, std, range for all metrics
|
|
61
61
|
- Identifies which fields vary (if any)
|
|
@@ -65,7 +65,7 @@ ______________________________________________________________________
|
|
|
65
65
|
|
|
66
66
|
**Output example:**
|
|
67
67
|
|
|
68
|
-
```
|
|
68
|
+
```text
|
|
69
69
|
Jump Height (m):
|
|
70
70
|
Mean: 0.4540739478
|
|
71
71
|
Std: 0.000000000000000
|
|
@@ -93,7 +93,7 @@ ______________________________________________________________________
|
|
|
93
93
|
|
|
94
94
|
## Validation Workflow
|
|
95
95
|
|
|
96
|
-
```
|
|
96
|
+
```text
|
|
97
97
|
1. Test Determinism ← ./scripts/test_determinism.sh
|
|
98
98
|
↓ (if pass)
|
|
99
99
|
2. Known Heights ← ./scripts/test_known_heights.py (future)
|
|
@@ -125,7 +125,7 @@ ______________________________________________________________________
|
|
|
125
125
|
|
|
126
126
|
Validation data stored in `data/` (gitignored):
|
|
127
127
|
|
|
128
|
-
```
|
|
128
|
+
```text
|
|
129
129
|
data/
|
|
130
130
|
├── determinism_test/
|
|
131
131
|
│ ├── videos/ # 100 symlinks to test video
|