kinemotion 0.26.1__tar.gz → 0.27.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.26.1 → kinemotion-0.27.0}/CHANGELOG.md +8 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/PKG-INFO +1 -1
- {kinemotion-0.26.1 → kinemotion-0.27.0}/pyproject.toml +1 -1
- {kinemotion-0.26.1 → kinemotion-0.27.0}/src/kinemotion/api.py +2 -2
- {kinemotion-0.26.1 → kinemotion-0.27.0}/src/kinemotion/core/video_io.py +6 -0
- kinemotion-0.27.0/tests/test_video_io.py +114 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/uv.lock +1 -1
- {kinemotion-0.26.1 → kinemotion-0.27.0}/.dockerignore +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/.gitattributes +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/.github/pull_request_template.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/.github/workflows/docs.yml +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/.github/workflows/release.yml +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/.github/workflows/test.yml +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/.gitignore +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/.pre-commit-config.yaml +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/.readthedocs.yml +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/.tool-versions +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/CLAUDE.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/CODE_OF_CONDUCT.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/CONTRIBUTING.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/Dockerfile +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/GEMINI.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/LICENSE +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/README.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/SECURITY.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/README.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/api/cmj.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/api/core.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/api/dropjump.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/api/overview.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/development/errors-findings.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/development/testing.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/development/type-hints.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/development/validation-plan.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/development/validation-roadmap.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/development/wallball-norep-detection.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/guides/bulk-processing.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/guides/camera-setup.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/guides/cmj-guide.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/index.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/reference/json-output-format.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/reference/json-structure-comparison.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/reference/parameters.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/reference/pose-systems.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/paper-downloader/HOW-TO-FIND-DOIS.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/paper-downloader/README.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/paper-downloader/dois.txt +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/paper-downloader/download.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/paper-downloader/pyproject.toml +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/paper-downloader/uv.lock +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/MANUAL-DOWNLOAD-GUIDE.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/README.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/convert_pdfs.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Ward_Putting-i-in-Team.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/jump-performance/2011_Harper_10-to-5-Jump-Test.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/jump-performance/2014_Samozino_FV-Imbalance.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/jump-performance/2022_Wells_Golf-Clubhead-CMJ.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Moore_Economical-Running-Technique.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/smartphone-technology/2022_Bishop_MyJumpLab-Validation.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/markdown/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/online-references-for-papers.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Ward_Putting-i-in-Team.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/jump-performance/2011_Harper_10-to-5-Jump-Test.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/jump-performance/2014_Samozino_FV-Imbalance.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/jump-performance/2022_Wells_Golf-Clubhead-CMJ.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Moore_Economical-Running-Technique.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/smartphone-technology/2022_Bishop_MyJumpLab-Validation.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/pdfs/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.pdf +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/technical/framerate.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/technical/implementation-details.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/technical/imu-metadata.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/technical/real-time-analysis.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/technical/triple-extension.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/translations/es/camera-setup.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/validation/determinism-test.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/validation/known-height-validation.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/docs/validation-status.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/examples/bulk/README.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/examples/bulk/bulk_processing.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/examples/bulk/simple_example.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/examples/programmatic_usage.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/mkdocs.yml +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/presentation/.gitignore +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/presentation/README.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/presentation/demos/.gitignore +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/presentation/demos/README.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/presentation/demos/api_demo.ipynb +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/presentation/demos/batch_processing_demo.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/presentation/demos/sample_data/.gitkeep +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/presentation/presentation_guide.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/presentation/revealjs/.gitignore +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/presentation/revealjs/Makefile +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/presentation/revealjs/README.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/presentation/revealjs/slides.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/presentation/speaker_script.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/requirements-docs.txt +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/samples/cmjs/README.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/scripts/README.md +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/scripts/analyze_determinism_variance.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/scripts/generate_test_data.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/scripts/plot_validation_results.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/scripts/test_determinism.sh +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/scripts/validate_known_heights.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/sonar-project.properties +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/src/kinemotion/__init__.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/src/kinemotion/cli.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/src/kinemotion/cmj/__init__.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/src/kinemotion/cmj/analysis.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/src/kinemotion/cmj/cli.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/src/kinemotion/cmj/debug_overlay.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/src/kinemotion/cmj/joint_angles.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/src/kinemotion/cmj/kinematics.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/src/kinemotion/core/__init__.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/src/kinemotion/core/auto_tuning.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/src/kinemotion/core/cli_utils.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/src/kinemotion/core/debug_overlay_utils.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/src/kinemotion/core/filtering.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/src/kinemotion/core/metadata.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/src/kinemotion/core/pose.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/src/kinemotion/core/quality.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/src/kinemotion/core/smoothing.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/src/kinemotion/dropjump/__init__.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/src/kinemotion/dropjump/analysis.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/src/kinemotion/dropjump/cli.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/src/kinemotion/dropjump/debug_overlay.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/src/kinemotion/dropjump/kinematics.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/src/kinemotion/py.typed +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/tests/__init__.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/tests/core/test_quality.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/tests/test_adaptive_threshold.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/tests/test_api.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/tests/test_aspect_ratio.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/tests/test_cli_cmj.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/tests/test_cli_dropjump.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/tests/test_cli_imports.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/tests/test_cmj_analysis.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/tests/test_cmj_kinematics.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/tests/test_com_estimation.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/tests/test_contact_detection.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/tests/test_filtering.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/tests/test_joint_angles.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/tests/test_kinematics.py +0 -0
- {kinemotion-0.26.1 → kinemotion-0.27.0}/tests/test_polyorder.py +0 -0
|
@@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
<!-- version list -->
|
|
9
9
|
|
|
10
|
+
## v0.27.0 (2025-11-14)
|
|
11
|
+
|
|
12
|
+
### Features
|
|
13
|
+
|
|
14
|
+
- Extract video codec from metadata
|
|
15
|
+
([`52c7ff2`](https://github.com/feniix/kinemotion/commit/52c7ff2ee3f6620a5271f670ab60e6bca8bc38fb))
|
|
16
|
+
|
|
17
|
+
|
|
10
18
|
## v0.26.1 (2025-11-14)
|
|
11
19
|
|
|
12
20
|
### Bug Fixes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kinemotion
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.27.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
|
|
@@ -532,7 +532,7 @@ def process_dropjump_video(
|
|
|
532
532
|
height=video.height,
|
|
533
533
|
duration_s=video.frame_count / video.fps,
|
|
534
534
|
frame_count=video.frame_count,
|
|
535
|
-
codec=
|
|
535
|
+
codec=video.codec,
|
|
536
536
|
)
|
|
537
537
|
|
|
538
538
|
processing_info = ProcessingInfo(
|
|
@@ -973,7 +973,7 @@ def process_cmj_video(
|
|
|
973
973
|
height=video.height,
|
|
974
974
|
duration_s=video.frame_count / video.fps,
|
|
975
975
|
frame_count=video.frame_count,
|
|
976
|
-
codec=
|
|
976
|
+
codec=video.codec,
|
|
977
977
|
)
|
|
978
978
|
|
|
979
979
|
processing_info = ProcessingInfo(
|
|
@@ -50,6 +50,9 @@ class VideoProcessor:
|
|
|
50
50
|
# OpenCV ignores rotation metadata, so we need to extract and apply it manually
|
|
51
51
|
self.rotation = 0 # Will be set by _extract_video_metadata()
|
|
52
52
|
|
|
53
|
+
# Extract codec information from video metadata
|
|
54
|
+
self.codec: str | None = None # Will be set by _extract_video_metadata()
|
|
55
|
+
|
|
53
56
|
# Calculate display dimensions considering SAR (Sample Aspect Ratio)
|
|
54
57
|
# Mobile videos often have non-square pixels encoded in SAR metadata
|
|
55
58
|
# OpenCV doesn't directly expose SAR, but we need to handle display correctly
|
|
@@ -141,6 +144,9 @@ class VideoProcessor:
|
|
|
141
144
|
|
|
142
145
|
stream = data["streams"][0]
|
|
143
146
|
|
|
147
|
+
# Extract codec name (e.g., "h264", "hevc", "vp9")
|
|
148
|
+
self.codec = stream.get("codec_name")
|
|
149
|
+
|
|
144
150
|
# Extract and parse SAR (Sample Aspect Ratio)
|
|
145
151
|
sar_str = stream.get("sample_aspect_ratio", "1:1")
|
|
146
152
|
self._parse_sample_aspect_ratio(sar_str)
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"""Tests for video I/O functionality including codec extraction."""
|
|
2
|
+
|
|
3
|
+
import tempfile
|
|
4
|
+
from unittest.mock import patch
|
|
5
|
+
|
|
6
|
+
import cv2
|
|
7
|
+
import numpy as np
|
|
8
|
+
import pytest
|
|
9
|
+
|
|
10
|
+
from kinemotion.core.video_io import VideoProcessor
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@pytest.fixture
|
|
14
|
+
def test_video_path() -> str:
|
|
15
|
+
"""Create a test video file with codec metadata."""
|
|
16
|
+
temp_file = tempfile.NamedTemporaryFile(suffix=".mp4", delete=False)
|
|
17
|
+
temp_path = temp_file.name
|
|
18
|
+
temp_file.close()
|
|
19
|
+
|
|
20
|
+
# Create a simple test video with mp4v codec
|
|
21
|
+
fourcc = cv2.VideoWriter_fourcc(*"mp4v")
|
|
22
|
+
writer = cv2.VideoWriter(temp_path, fourcc, 30.0, (640, 480))
|
|
23
|
+
|
|
24
|
+
# Write 10 frames
|
|
25
|
+
for _ in range(10):
|
|
26
|
+
frame = np.zeros((480, 640, 3), dtype=np.uint8)
|
|
27
|
+
cv2.circle(frame, (320, 240), 50, (255, 255, 255), -1)
|
|
28
|
+
writer.write(frame)
|
|
29
|
+
|
|
30
|
+
writer.release()
|
|
31
|
+
return temp_path
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def test_codec_extraction_from_video(test_video_path: str) -> None:
|
|
35
|
+
"""Test that codec is extracted from video metadata."""
|
|
36
|
+
video = VideoProcessor(test_video_path)
|
|
37
|
+
try:
|
|
38
|
+
# Codec should be extracted (or None if ffprobe unavailable)
|
|
39
|
+
# We just verify it's either a string or None
|
|
40
|
+
assert video.codec is None or isinstance(video.codec, str)
|
|
41
|
+
finally:
|
|
42
|
+
video.close()
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def test_codec_extraction_with_ffprobe_available(test_video_path: str) -> None:
|
|
46
|
+
"""Test codec extraction when ffprobe is available."""
|
|
47
|
+
video = VideoProcessor(test_video_path)
|
|
48
|
+
try:
|
|
49
|
+
# If ffprobe is available, codec should be a string like "h264", "hevc", "mpeg4", etc.
|
|
50
|
+
# If ffprobe is not available, it will be None
|
|
51
|
+
if video.codec is not None:
|
|
52
|
+
assert isinstance(video.codec, str)
|
|
53
|
+
# Common codec names
|
|
54
|
+
assert (
|
|
55
|
+
video.codec
|
|
56
|
+
in [
|
|
57
|
+
"h264",
|
|
58
|
+
"hevc",
|
|
59
|
+
"mpeg4",
|
|
60
|
+
"vp8",
|
|
61
|
+
"vp9",
|
|
62
|
+
"av1",
|
|
63
|
+
"mpeg2video",
|
|
64
|
+
"rawvideo",
|
|
65
|
+
"mpeg1video",
|
|
66
|
+
]
|
|
67
|
+
or len(video.codec) > 0
|
|
68
|
+
)
|
|
69
|
+
finally:
|
|
70
|
+
video.close()
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def test_codec_none_on_ffprobe_failure(test_video_path: str) -> None:
|
|
74
|
+
"""Test that codec remains None if ffprobe fails or is unavailable."""
|
|
75
|
+
with patch("kinemotion.core.video_io.subprocess.run") as mock_run:
|
|
76
|
+
# Simulate ffprobe not being available (FileNotFoundError)
|
|
77
|
+
mock_run.side_effect = FileNotFoundError("ffprobe not found")
|
|
78
|
+
|
|
79
|
+
video = VideoProcessor(test_video_path)
|
|
80
|
+
try:
|
|
81
|
+
# Codec should remain None when ffprobe is unavailable
|
|
82
|
+
assert video.codec is None
|
|
83
|
+
finally:
|
|
84
|
+
video.close()
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def test_video_processor_basic_properties(test_video_path: str) -> None:
|
|
88
|
+
"""Test that VideoProcessor initializes all properties including codec."""
|
|
89
|
+
video = VideoProcessor(test_video_path)
|
|
90
|
+
try:
|
|
91
|
+
# Verify all properties are set
|
|
92
|
+
assert video.fps > 0
|
|
93
|
+
assert video.frame_count > 0
|
|
94
|
+
assert video.width > 0
|
|
95
|
+
assert video.height > 0
|
|
96
|
+
assert video.rotation in [0, 90, -90, 180, -180]
|
|
97
|
+
# codec can be None or str
|
|
98
|
+
assert video.codec is None or isinstance(video.codec, str)
|
|
99
|
+
finally:
|
|
100
|
+
video.close()
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def test_codec_persists_across_frame_reading(test_video_path: str) -> None:
|
|
104
|
+
"""Test that codec property persists after reading frames."""
|
|
105
|
+
video = VideoProcessor(test_video_path)
|
|
106
|
+
try:
|
|
107
|
+
codec_before = video.codec
|
|
108
|
+
# Read a frame
|
|
109
|
+
frame = video.read_frame()
|
|
110
|
+
assert frame is not None
|
|
111
|
+
# Codec should remain unchanged
|
|
112
|
+
assert video.codec == codec_before
|
|
113
|
+
finally:
|
|
114
|
+
video.close()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/sports-biomechanics-pose-estimation.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kinemotion-0.26.1 → kinemotion-0.27.0}/docs/research/thirdparty/online-references-for-papers.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|