kinemotion 0.15.1__tar.gz → 0.15.2__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.15.1 → kinemotion-0.15.2}/.github/ISSUE_TEMPLATE/bug_report.yml +1 -1
- {kinemotion-0.15.1 → kinemotion-0.15.2}/.github/pull_request_template.md +2 -1
- {kinemotion-0.15.1 → kinemotion-0.15.2}/CHANGELOG.md +8 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/CLAUDE.md +8 -8
- {kinemotion-0.15.1 → kinemotion-0.15.2}/CONTRIBUTING.md +2 -2
- {kinemotion-0.15.1 → kinemotion-0.15.2}/PKG-INFO +9 -10
- {kinemotion-0.15.1 → kinemotion-0.15.2}/README.md +8 -9
- {kinemotion-0.15.1 → kinemotion-0.15.2}/docs/api/cmj.md +3 -2
- kinemotion-0.15.2/docs/api/dropjump.md +106 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/docs/api/overview.md +22 -18
- {kinemotion-0.15.1 → kinemotion-0.15.2}/docs/guides/bulk-processing.md +12 -37
- {kinemotion-0.15.1 → kinemotion-0.15.2}/docs/guides/camera-setup.md +4 -4
- {kinemotion-0.15.1 → kinemotion-0.15.2}/docs/index.md +2 -2
- {kinemotion-0.15.1 → kinemotion-0.15.2}/docs/reference/parameters.md +45 -93
- {kinemotion-0.15.1 → kinemotion-0.15.2}/docs/technical/framerate.md +17 -25
- {kinemotion-0.15.1 → kinemotion-0.15.2}/pyproject.toml +1 -1
- {kinemotion-0.15.1 → kinemotion-0.15.2}/uv.lock +1 -1
- kinemotion-0.15.1/docs/api/dropjump.md +0 -81
- {kinemotion-0.15.1 → kinemotion-0.15.2}/.dockerignore +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/.github/workflows/docs.yml +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/.github/workflows/release.yml +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/.gitignore +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/.pre-commit-config.yaml +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/.readthedocs.yml +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/.tool-versions +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/CODE_OF_CONDUCT.md +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/Dockerfile +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/GEMINI.md +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/LICENSE +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/SECURITY.md +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/docs/README.md +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/docs/api/core.md +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/docs/development/errors-findings.md +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/docs/development/validation-plan.md +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/docs/guides/cmj-guide.md +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/docs/reference/pose-systems.md +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/docs/technical/imu-metadata.md +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/docs/technical/real-time-analysis.md +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/docs/technical/triple-extension.md +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/docs/translations/es/camera-setup.md +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/examples/bulk/README.md +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/examples/bulk/bulk_processing.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/examples/bulk/simple_example.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/examples/programmatic_usage.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/mkdocs.yml +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/requirements-docs.txt +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/samples/cmjs/README.md +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/src/kinemotion/__init__.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/src/kinemotion/api.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/src/kinemotion/cli.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/src/kinemotion/cmj/__init__.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/src/kinemotion/cmj/analysis.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/src/kinemotion/cmj/cli.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/src/kinemotion/cmj/debug_overlay.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/src/kinemotion/cmj/joint_angles.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/src/kinemotion/cmj/kinematics.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/src/kinemotion/core/__init__.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/src/kinemotion/core/auto_tuning.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/src/kinemotion/core/cli_utils.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/src/kinemotion/core/debug_overlay_utils.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/src/kinemotion/core/filtering.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/src/kinemotion/core/pose.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/src/kinemotion/core/smoothing.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/src/kinemotion/core/video_io.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/src/kinemotion/dropjump/__init__.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/src/kinemotion/dropjump/analysis.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/src/kinemotion/dropjump/cli.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/src/kinemotion/dropjump/debug_overlay.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/src/kinemotion/dropjump/kinematics.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/src/kinemotion/py.typed +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/tests/__init__.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/tests/test_adaptive_threshold.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/tests/test_api.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/tests/test_aspect_ratio.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/tests/test_cmj_analysis.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/tests/test_cmj_kinematics.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/tests/test_com_estimation.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/tests/test_contact_detection.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/tests/test_filtering.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/tests/test_kinematics.py +0 -0
- {kinemotion-0.15.1 → kinemotion-0.15.2}/tests/test_polyorder.py +0 -0
|
@@ -53,7 +53,7 @@ body:
|
|
|
53
53
|
label: Command Used
|
|
54
54
|
description: The exact command you ran (please remove any sensitive paths if needed).
|
|
55
55
|
placeholder: |
|
|
56
|
-
kinemotion dropjump-analyze video.mp4 --
|
|
56
|
+
kinemotion dropjump-analyze video.mp4 --output debug.mp4
|
|
57
57
|
render: bash
|
|
58
58
|
validations:
|
|
59
59
|
required: false
|
|
@@ -52,7 +52,8 @@ Related to #
|
|
|
52
52
|
|
|
53
53
|
```bash
|
|
54
54
|
# Example test commands
|
|
55
|
-
uv run kinemotion dropjump-analyze test_video.mp4
|
|
55
|
+
uv run kinemotion dropjump-analyze test_video.mp4
|
|
56
|
+
uv run kinemotion cmj-analyze test_video.mp4
|
|
56
57
|
```
|
|
57
58
|
|
|
58
59
|
## Code Quality Checklist
|
|
@@ -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.15.2 (2025-11-07)
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
- **docs**: Update documentation to match current auto-tuning API
|
|
15
|
+
([`a07b40d`](https://github.com/feniix/kinemotion/commit/a07b40d9057438912a44fc4eb5b9b3e6e34a6d56))
|
|
16
|
+
|
|
17
|
+
|
|
10
18
|
## v0.15.1 (2025-11-06)
|
|
11
19
|
|
|
12
20
|
### Bug Fixes
|
|
@@ -13,7 +13,7 @@ Kinemotion: Video-based kinematic analysis for athletic performance using MediaP
|
|
|
13
13
|
```bash
|
|
14
14
|
asdf install # Install Python 3.12.7 + uv
|
|
15
15
|
uv sync # Install dependencies
|
|
16
|
-
uv run kinemotion dropjump-analyze video.mp4
|
|
16
|
+
uv run kinemotion dropjump-analyze video.mp4
|
|
17
17
|
uv run kinemotion cmj-analyze video.mp4
|
|
18
18
|
```
|
|
19
19
|
|
|
@@ -48,7 +48,7 @@ docs/ # CMJ_GUIDE, TRIPLE_EXTENSION, REAL_TIME_ANALYSIS, e
|
|
|
48
48
|
| Starting | Elevated box | Floor level |
|
|
49
49
|
| Algorithm | Forward search | Backward search from peak |
|
|
50
50
|
| Velocity | Absolute (magnitude) | Signed (direction matters) |
|
|
51
|
-
|
|
|
51
|
+
| Parameters | Auto-tuned quality presets | Auto-tuned quality presets |
|
|
52
52
|
| Key Metric | Ground contact time | Jump height from flight time |
|
|
53
53
|
|
|
54
54
|
## Critical Implementation Details
|
|
@@ -178,13 +178,13 @@ When writing new code, follow these principles to maintain low duplication:
|
|
|
178
178
|
### CLI
|
|
179
179
|
|
|
180
180
|
```bash
|
|
181
|
-
# Drop jump (
|
|
182
|
-
kinemotion dropjump-analyze video.mp4
|
|
181
|
+
# Drop jump (auto-tuned parameters)
|
|
182
|
+
kinemotion dropjump-analyze video.mp4
|
|
183
183
|
|
|
184
|
-
# CMJ
|
|
184
|
+
# CMJ with debug video
|
|
185
185
|
kinemotion cmj-analyze video.mp4 --output debug.mp4
|
|
186
186
|
|
|
187
|
-
# Batch
|
|
187
|
+
# Batch processing
|
|
188
188
|
kinemotion cmj-analyze videos/*.mp4 --batch --workers 4
|
|
189
189
|
```
|
|
190
190
|
|
|
@@ -193,11 +193,11 @@ kinemotion cmj-analyze videos/*.mp4 --batch --workers 4
|
|
|
193
193
|
```python
|
|
194
194
|
# Drop jump
|
|
195
195
|
from kinemotion import process_dropjump_video
|
|
196
|
-
metrics =
|
|
196
|
+
metrics = process_dropjump_video("video.mp4", quality="balanced")
|
|
197
197
|
|
|
198
198
|
# CMJ
|
|
199
199
|
from kinemotion import process_cmj_video
|
|
200
|
-
metrics = process_cmj_video("video.mp4")
|
|
200
|
+
metrics = process_cmj_video("video.mp4", quality="balanced")
|
|
201
201
|
```
|
|
202
202
|
|
|
203
203
|
## Important Gotchas
|
|
@@ -83,10 +83,10 @@ We actively welcome pull requests! Here's how to submit one:
|
|
|
83
83
|
|
|
84
84
|
```bash
|
|
85
85
|
# Run from source
|
|
86
|
-
uv run kinemotion dropjump-analyze <video_path>
|
|
86
|
+
uv run kinemotion dropjump-analyze <video_path>
|
|
87
87
|
|
|
88
88
|
# With debug output
|
|
89
|
-
uv run kinemotion dropjump-analyze <video_path> --
|
|
89
|
+
uv run kinemotion dropjump-analyze <video_path> --output debug.mp4 --verbose
|
|
90
90
|
```
|
|
91
91
|
|
|
92
92
|
## Code Quality Standards
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kinemotion
|
|
3
|
-
Version: 0.15.
|
|
3
|
+
Version: 0.15.2
|
|
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
|
|
@@ -125,8 +125,8 @@ Kinemotion supports two jump types with intelligent auto-tuning that automatical
|
|
|
125
125
|
Analyzes reactive strength and ground contact time:
|
|
126
126
|
|
|
127
127
|
```bash
|
|
128
|
-
#
|
|
129
|
-
kinemotion dropjump-analyze video.mp4
|
|
128
|
+
# Automatic parameter tuning based on video characteristics
|
|
129
|
+
kinemotion dropjump-analyze video.mp4
|
|
130
130
|
```
|
|
131
131
|
|
|
132
132
|
### Counter Movement Jump (CMJ) Analysis
|
|
@@ -176,9 +176,9 @@ Process multiple videos in parallel:
|
|
|
176
176
|
|
|
177
177
|
```bash
|
|
178
178
|
# Drop jumps
|
|
179
|
-
kinemotion dropjump-analyze videos/*.mp4 --batch --
|
|
179
|
+
kinemotion dropjump-analyze videos/*.mp4 --batch --workers 4
|
|
180
180
|
|
|
181
|
-
# CMJ
|
|
181
|
+
# CMJ with output directories
|
|
182
182
|
kinemotion cmj-analyze videos/*.mp4 --batch --workers 4 \
|
|
183
183
|
--json-output-dir results/ \
|
|
184
184
|
--csv-summary summary.csv
|
|
@@ -194,9 +194,8 @@ Use kinemotion as a library for automated pipelines and custom analysis.
|
|
|
194
194
|
from kinemotion import process_dropjump_video
|
|
195
195
|
|
|
196
196
|
# Process a single video
|
|
197
|
-
metrics =
|
|
197
|
+
metrics = process_dropjump_video(
|
|
198
198
|
video_path="athlete_jump.mp4",
|
|
199
|
-
drop_height=0.40, # 40cm drop box
|
|
200
199
|
quality="balanced",
|
|
201
200
|
verbose=True
|
|
202
201
|
)
|
|
@@ -214,11 +213,11 @@ print(f"Flight time: {metrics.flight_time * 1000:.1f} ms")
|
|
|
214
213
|
from kinemotion import DropJumpVideoConfig, process_dropjump_videos_bulk
|
|
215
214
|
|
|
216
215
|
configs = [
|
|
217
|
-
|
|
218
|
-
|
|
216
|
+
DropJumpVideoConfig("video1.mp4", quality="balanced"),
|
|
217
|
+
DropJumpVideoConfig("video2.mp4", quality="accurate"),
|
|
219
218
|
]
|
|
220
219
|
|
|
221
|
-
results =
|
|
220
|
+
results = process_dropjump_videos_bulk(configs, max_workers=4)
|
|
222
221
|
|
|
223
222
|
# CMJ bulk processing
|
|
224
223
|
from kinemotion import CMJVideoConfig, process_cmj_videos_bulk
|
|
@@ -96,8 +96,8 @@ Kinemotion supports two jump types with intelligent auto-tuning that automatical
|
|
|
96
96
|
Analyzes reactive strength and ground contact time:
|
|
97
97
|
|
|
98
98
|
```bash
|
|
99
|
-
#
|
|
100
|
-
kinemotion dropjump-analyze video.mp4
|
|
99
|
+
# Automatic parameter tuning based on video characteristics
|
|
100
|
+
kinemotion dropjump-analyze video.mp4
|
|
101
101
|
```
|
|
102
102
|
|
|
103
103
|
### Counter Movement Jump (CMJ) Analysis
|
|
@@ -147,9 +147,9 @@ Process multiple videos in parallel:
|
|
|
147
147
|
|
|
148
148
|
```bash
|
|
149
149
|
# Drop jumps
|
|
150
|
-
kinemotion dropjump-analyze videos/*.mp4 --batch --
|
|
150
|
+
kinemotion dropjump-analyze videos/*.mp4 --batch --workers 4
|
|
151
151
|
|
|
152
|
-
# CMJ
|
|
152
|
+
# CMJ with output directories
|
|
153
153
|
kinemotion cmj-analyze videos/*.mp4 --batch --workers 4 \
|
|
154
154
|
--json-output-dir results/ \
|
|
155
155
|
--csv-summary summary.csv
|
|
@@ -165,9 +165,8 @@ Use kinemotion as a library for automated pipelines and custom analysis.
|
|
|
165
165
|
from kinemotion import process_dropjump_video
|
|
166
166
|
|
|
167
167
|
# Process a single video
|
|
168
|
-
metrics =
|
|
168
|
+
metrics = process_dropjump_video(
|
|
169
169
|
video_path="athlete_jump.mp4",
|
|
170
|
-
drop_height=0.40, # 40cm drop box
|
|
171
170
|
quality="balanced",
|
|
172
171
|
verbose=True
|
|
173
172
|
)
|
|
@@ -185,11 +184,11 @@ print(f"Flight time: {metrics.flight_time * 1000:.1f} ms")
|
|
|
185
184
|
from kinemotion import DropJumpVideoConfig, process_dropjump_videos_bulk
|
|
186
185
|
|
|
187
186
|
configs = [
|
|
188
|
-
|
|
189
|
-
|
|
187
|
+
DropJumpVideoConfig("video1.mp4", quality="balanced"),
|
|
188
|
+
DropJumpVideoConfig("video2.mp4", quality="accurate"),
|
|
190
189
|
]
|
|
191
190
|
|
|
192
|
-
results =
|
|
191
|
+
results = process_dropjump_videos_bulk(configs, max_workers=4)
|
|
193
192
|
|
|
194
193
|
# CMJ bulk processing
|
|
195
194
|
from kinemotion import CMJVideoConfig, process_cmj_videos_bulk
|
|
@@ -9,8 +9,9 @@ from kinemotion import process_cmj_video
|
|
|
9
9
|
|
|
10
10
|
metrics = process_cmj_video(
|
|
11
11
|
video_path="cmj.mp4",
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
quality="balanced", # fast, balanced, or accurate
|
|
13
|
+
output_video="debug.mp4", # optional
|
|
14
|
+
verbose=True
|
|
14
15
|
)
|
|
15
16
|
|
|
16
17
|
print(f"Jump height: {metrics.jump_height:.2f}m")
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# Drop Jump API
|
|
2
|
+
|
|
3
|
+
The drop jump API provides functions for analyzing drop jump videos and extracting kinematic metrics.
|
|
4
|
+
|
|
5
|
+
## Quick Example
|
|
6
|
+
|
|
7
|
+
```python
|
|
8
|
+
from kinemotion import process_dropjump_video
|
|
9
|
+
|
|
10
|
+
metrics = process_dropjump_video(
|
|
11
|
+
video_path="dropjump.mp4",
|
|
12
|
+
quality="balanced", # fast, balanced, or accurate
|
|
13
|
+
output_video="debug.mp4", # optional
|
|
14
|
+
verbose=True
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
print(f"Ground contact time: {metrics.ground_contact_time:.3f}s")
|
|
18
|
+
print(f"Flight time: {metrics.flight_time:.3f}s")
|
|
19
|
+
print(f"RSI: {metrics.reactive_strength_index:.2f}")
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Main Functions
|
|
23
|
+
|
|
24
|
+
::: kinemotion.api.process_dropjump_video
|
|
25
|
+
options:
|
|
26
|
+
show_root_heading: true
|
|
27
|
+
show_source: false
|
|
28
|
+
|
|
29
|
+
::: kinemotion.api.process_dropjump_videos_bulk
|
|
30
|
+
options:
|
|
31
|
+
show_root_heading: true
|
|
32
|
+
show_source: false
|
|
33
|
+
|
|
34
|
+
## Configuration
|
|
35
|
+
|
|
36
|
+
::: kinemotion.api.DropJumpVideoConfig
|
|
37
|
+
options:
|
|
38
|
+
show_root_heading: true
|
|
39
|
+
show_source: false
|
|
40
|
+
|
|
41
|
+
## Results
|
|
42
|
+
|
|
43
|
+
::: kinemotion.api.DropJumpVideoResult
|
|
44
|
+
options:
|
|
45
|
+
show_root_heading: true
|
|
46
|
+
show_source: false
|
|
47
|
+
|
|
48
|
+
## Metrics
|
|
49
|
+
|
|
50
|
+
::: kinemotion.dropjump.kinematics.DropJumpMetrics
|
|
51
|
+
options:
|
|
52
|
+
show_root_heading: true
|
|
53
|
+
show_source: false
|
|
54
|
+
|
|
55
|
+
## Key Parameters
|
|
56
|
+
|
|
57
|
+
### quality
|
|
58
|
+
|
|
59
|
+
Analysis quality preset that determines processing speed and accuracy. The system automatically tunes parameters based on video characteristics and the selected preset.
|
|
60
|
+
|
|
61
|
+
Options:
|
|
62
|
+
|
|
63
|
+
- `"fast"` - Quick processing, lower precision
|
|
64
|
+
- `"balanced"` - Default, good for most cases
|
|
65
|
+
- `"accurate"` - Research-grade, slower processing
|
|
66
|
+
|
|
67
|
+
Default: `"balanced"`
|
|
68
|
+
|
|
69
|
+
```python
|
|
70
|
+
metrics = process_dropjump_video("video.mp4", quality="accurate")
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### output_video
|
|
74
|
+
|
|
75
|
+
Path to write debug video with overlay visualization. If not provided, no debug video is created.
|
|
76
|
+
|
|
77
|
+
```python
|
|
78
|
+
metrics = process_dropjump_video(
|
|
79
|
+
"video.mp4",
|
|
80
|
+
quality="balanced",
|
|
81
|
+
output_video="debug.mp4"
|
|
82
|
+
)
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### json_output
|
|
86
|
+
|
|
87
|
+
Path to write JSON metrics output. If not provided, metrics are only returned as a Python object.
|
|
88
|
+
|
|
89
|
+
```python
|
|
90
|
+
metrics = process_dropjump_video(
|
|
91
|
+
"video.mp4",
|
|
92
|
+
json_output="metrics.json"
|
|
93
|
+
)
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Expert Parameters
|
|
97
|
+
|
|
98
|
+
For advanced users, you can override auto-tuned parameters:
|
|
99
|
+
|
|
100
|
+
- `smoothing_window` - Override auto-tuned smoothing window size
|
|
101
|
+
- `velocity_threshold` - Override velocity threshold for ground contact detection
|
|
102
|
+
- `min_contact_frames` - Override minimum contact frames
|
|
103
|
+
- `visibility_threshold` - Override visibility threshold
|
|
104
|
+
- `detection_confidence` - Override pose detection confidence
|
|
105
|
+
- `tracking_confidence` - Override pose tracking confidence
|
|
106
|
+
- `drop_start_frame` - Manually specify frame where drop begins
|
|
@@ -8,10 +8,10 @@ Kinemotion provides a Python API for video-based kinematic analysis. The API is
|
|
|
8
8
|
|
|
9
9
|
Process drop jump videos and extract kinematic metrics:
|
|
10
10
|
|
|
11
|
-
- `
|
|
12
|
-
- `
|
|
13
|
-
- `
|
|
14
|
-
- `
|
|
11
|
+
- `process_dropjump_video()` - Analyze a single drop jump video
|
|
12
|
+
- `process_dropjump_videos_bulk()` - Batch process multiple drop jump videos
|
|
13
|
+
- `DropJumpVideoConfig` - Configuration for drop jump analysis
|
|
14
|
+
- `DropJumpVideoResult` - Results from drop jump analysis
|
|
15
15
|
- `DropJumpMetrics` - Kinematic metrics for drop jumps
|
|
16
16
|
|
|
17
17
|
See [Drop Jump API](dropjump.md) for detailed documentation.
|
|
@@ -34,31 +34,35 @@ See [CMJ API](cmj.md) for detailed documentation.
|
|
|
34
34
|
from kinemotion import process_dropjump_video, process_cmj_video
|
|
35
35
|
|
|
36
36
|
# Drop jump analysis
|
|
37
|
-
drop_metrics =
|
|
37
|
+
drop_metrics = process_dropjump_video("dropjump.mp4", quality="balanced")
|
|
38
38
|
|
|
39
39
|
# CMJ analysis
|
|
40
|
-
cmj_metrics = process_cmj_video("cmj.mp4")
|
|
40
|
+
cmj_metrics = process_cmj_video("cmj.mp4", quality="balanced")
|
|
41
41
|
```
|
|
42
42
|
|
|
43
43
|
## Batch Processing
|
|
44
44
|
|
|
45
45
|
```python
|
|
46
|
-
from kinemotion import
|
|
46
|
+
from kinemotion import (
|
|
47
|
+
DropJumpVideoConfig,
|
|
48
|
+
CMJVideoConfig,
|
|
49
|
+
process_dropjump_videos_bulk,
|
|
50
|
+
process_cmj_videos_bulk
|
|
51
|
+
)
|
|
47
52
|
|
|
48
53
|
# Batch drop jump analysis
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
)
|
|
54
|
+
configs = [
|
|
55
|
+
DropJumpVideoConfig("video1.mp4", quality="balanced"),
|
|
56
|
+
DropJumpVideoConfig("video2.mp4", quality="accurate"),
|
|
57
|
+
]
|
|
58
|
+
results = process_dropjump_videos_bulk(configs, max_workers=4)
|
|
55
59
|
|
|
56
60
|
# Batch CMJ analysis
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
)
|
|
61
|
+
cmj_configs = [
|
|
62
|
+
CMJVideoConfig("cmj1.mp4", quality="balanced"),
|
|
63
|
+
CMJVideoConfig("cmj2.mp4", quality="accurate"),
|
|
64
|
+
]
|
|
65
|
+
cmj_results = process_cmj_videos_bulk(cmj_configs, max_workers=4)
|
|
62
66
|
```
|
|
63
67
|
|
|
64
68
|
## Core Utilities
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
This guide covers different approaches for processing large batches of videos using kinemotion as a library.
|
|
4
4
|
|
|
5
|
+
> **Note:** Some code examples in this guide use low-level API calls and may reference the removed `drop_height` parameter. For production use, prefer the high-level `process_dropjump_video()` and `process_cmj_video()` functions with `quality` presets (`"fast"`, `"balanced"`, or `"accurate"`) instead. See the [API documentation](../api/overview.md) for current best practices.
|
|
6
|
+
|
|
5
7
|
## Table of Contents
|
|
6
8
|
|
|
7
9
|
- [Quick Start: Local Parallel Processing](#quick-start-local-parallel-processing)
|
|
@@ -31,42 +33,16 @@ from kinemotion.dropjump import (
|
|
|
31
33
|
)
|
|
32
34
|
from kinemotion.core.auto_tuning import auto_tune_parameters
|
|
33
35
|
|
|
34
|
-
def analyze_video(video_path: str,
|
|
36
|
+
def analyze_video(video_path: str, quality: str = "balanced") -> dict:
|
|
35
37
|
"""Analyze a single drop jump video."""
|
|
36
38
|
try:
|
|
37
|
-
#
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
# Process video
|
|
41
|
-
video = VideoProcessor(video_path)
|
|
42
|
-
tracker = PoseTracker(
|
|
43
|
-
detection_confidence=params["detection_confidence"],
|
|
44
|
-
tracking_confidence=params["tracking_confidence"]
|
|
45
|
-
)
|
|
46
|
-
|
|
47
|
-
# Extract landmarks
|
|
48
|
-
landmarks = []
|
|
49
|
-
for frame in video.read_frames():
|
|
50
|
-
pose_result = tracker.process_frame(frame)
|
|
51
|
-
if pose_result:
|
|
52
|
-
landmarks.append(pose_result)
|
|
53
|
-
|
|
54
|
-
# Detect contact states
|
|
55
|
-
foot_positions = [compute_average_foot_position(lm) for lm in landmarks]
|
|
56
|
-
contact_states = detect_ground_contact(
|
|
57
|
-
foot_positions,
|
|
58
|
-
video.fps,
|
|
59
|
-
velocity_threshold=params["velocity_threshold"],
|
|
60
|
-
min_contact_frames=params["min_contact_frames"],
|
|
61
|
-
visibility_threshold=params["visibility_threshold"]
|
|
62
|
-
)
|
|
39
|
+
# Use the high-level API which handles auto-tuning
|
|
40
|
+
from kinemotion import process_dropjump_video
|
|
63
41
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
fps=video.fps,
|
|
69
|
-
drop_height_m=drop_height
|
|
42
|
+
metrics = process_dropjump_video(
|
|
43
|
+
video_path,
|
|
44
|
+
quality=quality,
|
|
45
|
+
verbose=False
|
|
70
46
|
)
|
|
71
47
|
|
|
72
48
|
return {
|
|
@@ -74,7 +50,6 @@ def analyze_video(video_path: str, drop_height: float = 0.40) -> dict:
|
|
|
74
50
|
"success": True,
|
|
75
51
|
**metrics.to_dict()
|
|
76
52
|
}
|
|
77
|
-
|
|
78
53
|
except Exception as e:
|
|
79
54
|
return {
|
|
80
55
|
"video": video_path,
|
|
@@ -88,7 +63,7 @@ video_files = list(video_dir.glob("*.mp4"))
|
|
|
88
63
|
|
|
89
64
|
with ProcessPoolExecutor(max_workers=8) as executor:
|
|
90
65
|
results = list(executor.map(
|
|
91
|
-
lambda p: analyze_video(str(p),
|
|
66
|
+
lambda p: analyze_video(str(p), "balanced"),
|
|
92
67
|
video_files
|
|
93
68
|
))
|
|
94
69
|
|
|
@@ -134,10 +109,10 @@ Bulk video processing with Kinemotion on Modal.com
|
|
|
134
109
|
|
|
135
110
|
Usage:
|
|
136
111
|
# Process videos from URLs
|
|
137
|
-
modal run batch_processor.py --video-list videos.txt --
|
|
112
|
+
modal run batch_processor.py --video-list videos.txt --quality balanced
|
|
138
113
|
|
|
139
114
|
# Process videos from S3 bucket
|
|
140
|
-
modal run batch_processor.py --s3-bucket my-videos --
|
|
115
|
+
modal run batch_processor.py --s3-bucket my-videos --quality accurate
|
|
141
116
|
"""
|
|
142
117
|
|
|
143
118
|
import modal
|
|
@@ -657,17 +657,17 @@ ______________________________________________________________________
|
|
|
657
657
|
|
|
658
658
|
**Possible causes:**
|
|
659
659
|
|
|
660
|
-
1. Camera angle not
|
|
661
|
-
1. Missing `--drop-height` calibration parameter
|
|
660
|
+
1. Camera angle not optimal (measurement error)
|
|
662
661
|
1. Athlete moving horizontally (drift during jump)
|
|
663
662
|
1. Camera not level (tilted)
|
|
663
|
+
1. Poor video quality affecting tracking
|
|
664
664
|
|
|
665
665
|
**Solutions:**
|
|
666
666
|
|
|
667
|
-
1. Verify
|
|
668
|
-
1. Provide drop box height: `--drop-height 0.40`
|
|
667
|
+
1. Verify camera angle with measuring app or protractor
|
|
669
668
|
1. Coach athlete to jump straight up (minimal drift)
|
|
670
669
|
1. Use tripod level indicator or phone level app
|
|
670
|
+
1. Use `--quality accurate` for best results with good videos
|
|
671
671
|
|
|
672
672
|
### "No Drop Jump Detected" Error
|
|
673
673
|
|
|
@@ -18,7 +18,7 @@ pip install kinemotion
|
|
|
18
18
|
### Drop Jump Analysis
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
|
-
kinemotion dropjump-analyze video.mp4
|
|
21
|
+
kinemotion dropjump-analyze video.mp4
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
Or via Python API:
|
|
@@ -26,7 +26,7 @@ Or via Python API:
|
|
|
26
26
|
```python
|
|
27
27
|
from kinemotion import process_dropjump_video
|
|
28
28
|
|
|
29
|
-
metrics =
|
|
29
|
+
metrics = process_dropjump_video("video.mp4", quality="balanced")
|
|
30
30
|
print(f"Ground contact time: {metrics.ground_contact_time:.3f}s")
|
|
31
31
|
print(f"RSI: {metrics.reactive_strength_index:.2f}")
|
|
32
32
|
```
|
|
@@ -56,7 +56,7 @@ These parameters control batch processing mode when analyzing multiple videos:
|
|
|
56
56
|
|
|
57
57
|
```bash
|
|
58
58
|
# Batch process with all outputs
|
|
59
|
-
kinemotion dropjump-analyze videos/*.mp4 --batch
|
|
59
|
+
kinemotion dropjump-analyze videos/*.mp4 --batch \
|
|
60
60
|
--workers 4 \
|
|
61
61
|
--json-output-dir results/ \
|
|
62
62
|
--output-dir debug_videos/ \
|
|
@@ -79,8 +79,8 @@ For more control, use the Python API:
|
|
|
79
79
|
from kinemotion import DropJumpVideoConfig, process_dropjump_videos_bulk
|
|
80
80
|
|
|
81
81
|
configs = [
|
|
82
|
-
DropJumpVideoConfig("video1.mp4",
|
|
83
|
-
DropJumpVideoConfig("video2.mp4",
|
|
82
|
+
DropJumpVideoConfig("video1.mp4", quality="fast"),
|
|
83
|
+
DropJumpVideoConfig("video2.mp4", quality="accurate"), # Different settings per video
|
|
84
84
|
]
|
|
85
85
|
|
|
86
86
|
results = process_dropjump_videos_bulk(configs, max_workers=4)
|
|
@@ -234,9 +234,8 @@ kinemotion dropjump-analyze studio.mp4 \
|
|
|
234
234
|
# Maximum accuracy setup
|
|
235
235
|
kinemotion dropjump-analyze video.mp4 \
|
|
236
236
|
--polyorder 3 \
|
|
237
|
-
--smoothing-window 9
|
|
238
|
-
|
|
239
|
-
```text
|
|
237
|
+
--smoothing-window 9
|
|
238
|
+
```
|
|
240
239
|
|
|
241
240
|
**Validation rules:**
|
|
242
241
|
|
|
@@ -810,93 +809,47 @@ kinemotion dropjump-analyze video.mp4 --tracking-confidence 0.3
|
|
|
810
809
|
|
|
811
810
|
---
|
|
812
811
|
|
|
813
|
-
##
|
|
814
|
-
|
|
815
|
-
### `--drop-height` (optional, no default)
|
|
816
|
-
|
|
817
|
-
**What it does:**
|
|
818
|
-
Specifies the height of the drop box/platform in meters to enable calibrated jump height measurement.
|
|
819
|
-
|
|
820
|
-
**How it works:**
|
|
821
|
-
|
|
822
|
-
- Measures the actual drop distance from the box to the ground in the video
|
|
823
|
-
- Calculates a scale factor to convert normalized coordinates (0-1) to real-world meters
|
|
824
|
-
- Applies this scale factor to the jump height measurement
|
|
825
|
-
- Significantly improves jump height accuracy from ~71% to ~88%
|
|
826
|
-
|
|
827
|
-
**Technical details:**
|
|
828
|
-
|
|
829
|
-
- Only applicable for drop jumps (box → drop → landing → jump)
|
|
830
|
-
- Automatically detects drop jump pattern by comparing ground phase elevations
|
|
831
|
-
- Uses the initial drop phase to establish the calibration scale factor
|
|
832
|
-
- Formula: `scale_factor = drop_height_m / drop_distance_normalized`
|
|
833
|
-
- Applied to position-based jump height measurement (not kinematic)
|
|
812
|
+
## Auto-Tuning System
|
|
834
813
|
|
|
835
|
-
|
|
814
|
+
Kinemotion uses an intelligent auto-tuning system that automatically optimizes analysis parameters based on video characteristics. This eliminates the need for manual calibration and makes the tool accessible to users without technical expertise.
|
|
836
815
|
|
|
837
|
-
|
|
838
|
-
- When accuracy of jump height is important
|
|
839
|
-
- When comparing athletes or tracking progress over time
|
|
840
|
-
- For research or performance analysis
|
|
816
|
+
### How Auto-Tuning Works
|
|
841
817
|
|
|
842
|
-
|
|
818
|
+
The system analyzes:
|
|
843
819
|
|
|
844
|
-
-
|
|
845
|
-
-
|
|
846
|
-
-
|
|
820
|
+
- **Video frame rate** - Adjusts smoothing windows and thresholds
|
|
821
|
+
- **Tracking quality** - Adapts confidence levels and filtering
|
|
822
|
+
- **Landmark visibility** - Determines outlier rejection needs
|
|
823
|
+
- **Quality preset** - Balances speed vs accuracy based on user selection
|
|
847
824
|
|
|
848
|
-
|
|
825
|
+
### Quality Presets
|
|
849
826
|
|
|
850
|
-
|
|
851
|
-
2. Measure from top of box surface to ground
|
|
852
|
-
3. Convert to meters (divide cm by 100)
|
|
853
|
-
4. Examples:
|
|
854
|
-
- 30cm box = 0.30
|
|
855
|
-
- 40cm box = 0.40
|
|
856
|
-
- 60cm box = 0.60
|
|
827
|
+
All analysis functions accept a `quality` parameter:
|
|
857
828
|
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
Without calibration:
|
|
862
|
-
- Uses kinematic method with optional empirical correction factor
|
|
863
|
-
- Accuracy: ⚠️ Unvalidated - requires empirical validation
|
|
864
|
-
- Provides relative measurements for comparison
|
|
865
|
-
|
|
866
|
-
With calibration (--drop-height 0.40):
|
|
867
|
-
- Uses position-based measurement with scale factor from known drop height
|
|
868
|
-
- Theoretically more accurate (⚠️ unvalidated)
|
|
869
|
-
- Provides calibrated measurements based on known reference distance
|
|
870
|
-
```text
|
|
829
|
+
- **`"fast"`** - Quick processing, good for batch operations (50% faster)
|
|
830
|
+
- **`"balanced"`** - Default, optimal for most use cases
|
|
831
|
+
- **`"accurate"`** - Research-grade, maximum precision (slower)
|
|
871
832
|
|
|
872
833
|
**Example:**
|
|
873
834
|
|
|
874
835
|
```bash
|
|
875
|
-
#
|
|
876
|
-
kinemotion dropjump-analyze
|
|
877
|
-
|
|
878
|
-
# 60cm drop box with outputs
|
|
879
|
-
kinemotion dropjump-analyze video.mp4 \
|
|
880
|
-
--drop-height 0.60 \
|
|
881
|
-
--json-output metrics.json \
|
|
882
|
-
--output debug.mp4
|
|
836
|
+
# Fast processing for batch
|
|
837
|
+
kinemotion dropjump-analyze videos/*.mp4 --batch --quality fast
|
|
883
838
|
|
|
884
|
-
#
|
|
885
|
-
|
|
886
|
-
|
|
839
|
+
# Accurate for research
|
|
840
|
+
kinemotion dropjump-analyze video.mp4 --quality accurate --verbose
|
|
841
|
+
```
|
|
887
842
|
|
|
888
|
-
|
|
889
|
-
kinemotion dropjump-analyze video.mp4 --drop-height 0.40 --json-output calibrated.json
|
|
890
|
-
```text
|
|
843
|
+
**Python API:**
|
|
891
844
|
|
|
892
|
-
|
|
845
|
+
```python
|
|
846
|
+
from kinemotion import process_dropjump_video
|
|
893
847
|
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
}
|
|
848
|
+
metrics = process_dropjump_video(
|
|
849
|
+
"video.mp4",
|
|
850
|
+
quality="accurate",
|
|
851
|
+
verbose=True # Shows selected parameters
|
|
852
|
+
)
|
|
900
853
|
```text
|
|
901
854
|
|
|
902
855
|
**Troubleshooting:**
|
|
@@ -1012,10 +965,9 @@ kinemotion dropjump-analyze video.mp4 \
|
|
|
1012
965
|
--use-curvature \
|
|
1013
966
|
--adaptive-threshold \
|
|
1014
967
|
--use-com \
|
|
1015
|
-
--drop-height 0.40 \
|
|
1016
968
|
--output debug_max.mp4 \
|
|
1017
969
|
--json-output metrics.json
|
|
1018
|
-
```
|
|
970
|
+
```
|
|
1019
971
|
|
|
1020
972
|
**Effect on timing:**
|
|
1021
973
|
|
|
@@ -1122,13 +1074,13 @@ kinemotion dropjump-analyze video.mp4 \
|
|
|
1122
1074
|
--tracking-confidence 0.7
|
|
1123
1075
|
```text
|
|
1124
1076
|
|
|
1125
|
-
### Scenario 6: Drop Jump with
|
|
1077
|
+
### Scenario 6: Drop Jump with Expert Parameter Tuning
|
|
1126
1078
|
|
|
1127
|
-
-
|
|
1079
|
+
- Drop jump analysis with manually tuned parameters for specific conditions
|
|
1128
1080
|
|
|
1129
1081
|
```bash
|
|
1130
1082
|
kinemotion dropjump-analyze video.mp4 \
|
|
1131
|
-
--
|
|
1083
|
+
--quality accurate \
|
|
1132
1084
|
--smoothing-window 5 \
|
|
1133
1085
|
--velocity-threshold 0.02 \
|
|
1134
1086
|
--min-contact-frames 3 \
|
|
@@ -1137,9 +1089,9 @@ kinemotion dropjump-analyze video.mp4 \
|
|
|
1137
1089
|
--tracking-confidence 0.5 \
|
|
1138
1090
|
--output debug.mp4 \
|
|
1139
1091
|
--json-output metrics.json
|
|
1140
|
-
```
|
|
1092
|
+
```
|
|
1141
1093
|
|
|
1142
|
-
**Note:**
|
|
1094
|
+
**Note:** Expert parameters should only be adjusted when the automatic tuning doesn't work for your specific video conditions. The `--verbose` flag shows auto-selected parameters for comparison.
|
|
1143
1095
|
|
|
1144
1096
|
### Scenario 7: High-Performance Drop Jump Analysis (Maximum Accuracy)
|
|
1145
1097
|
|
|
@@ -1147,7 +1099,7 @@ kinemotion dropjump-analyze video.mp4 \
|
|
|
1147
1099
|
|
|
1148
1100
|
```bash
|
|
1149
1101
|
kinemotion dropjump-analyze video.mp4 \
|
|
1150
|
-
--
|
|
1102
|
+
--quality accurate \
|
|
1151
1103
|
--use-curvature \
|
|
1152
1104
|
--outlier-rejection \
|
|
1153
1105
|
--output debug_max.mp4 \
|
|
@@ -1158,13 +1110,13 @@ kinemotion dropjump-analyze video.mp4 \
|
|
|
1158
1110
|
--visibility-threshold 0.6 \
|
|
1159
1111
|
--detection-confidence 0.5 \
|
|
1160
1112
|
--tracking-confidence 0.5
|
|
1161
|
-
```
|
|
1113
|
+
```
|
|
1162
1114
|
|
|
1163
|
-
**Note:** This
|
|
1115
|
+
**Note:** This uses maximum accuracy settings with advanced filtering:
|
|
1164
1116
|
|
|
1165
|
-
-
|
|
1166
|
-
-
|
|
1167
|
-
-
|
|
1117
|
+
- Curvature analysis: Enhanced timing precision
|
|
1118
|
+
- Outlier rejection: Removes tracking glitches
|
|
1119
|
+
- Fine-tuned expert parameters: Optimized for clean, high-quality videos
|
|
1168
1120
|
|
|
1169
1121
|
---
|
|
1170
1122
|
|
|
@@ -1315,7 +1267,6 @@ When bilateral-filter disabled (default):
|
|
|
1315
1267
|
| visibility-threshold | None (simple comparison) |
|
|
1316
1268
|
| detection-confidence | Medium (affects MediaPipe workload) |
|
|
1317
1269
|
| tracking-confidence | Medium (affects MediaPipe workload) |
|
|
1318
|
-
| drop-height | None (scaling calculation only) |
|
|
1319
1270
|
| use-curvature | Negligible (reuses smoothed trajectory) |
|
|
1320
1271
|
|
|
1321
1272
|
**Notes:**
|
|
@@ -1390,6 +1341,7 @@ kinemotion dropjump-analyze video.mp4 --output v3.mp4 --json-output v3.json --sm
|
|
|
1390
1341
|
| `visibility-threshold` | 0.5 | 0.3-0.8 | Landmark trust level | Occlusions or need high confidence |
|
|
1391
1342
|
| `detection-confidence` | 0.5 | 0.1-0.9 | Initial pose detection | Multiple people or poor visibility |
|
|
1392
1343
|
| `tracking-confidence` | 0.5 | 0.1-0.9 | Tracking persistence | Tracking lost or wrong person tracked |
|
|
1393
|
-
| `drop-height` | None | 0.1-2.0 | Jump height calibration | Drop jump with known box height |
|
|
1394
1344
|
| `use-curvature` | enabled | enabled/disabled | Timing refinement | Default: keep enabled for best accuracy |
|
|
1345
|
+
| `quality` | balanced | fast/balanced/accurate | Analysis speed vs accuracy | Use fast for batch, accurate for research |
|
|
1346
|
+
```
|
|
1395
1347
|
````
|
|
@@ -232,11 +232,10 @@ More temporal samples = smoother velocity derivative:
|
|
|
232
232
|
kinemotion dropjump-analyze video_30fps.mp4 \
|
|
233
233
|
--smoothing-window 5 \
|
|
234
234
|
--velocity-threshold 0.02 \
|
|
235
|
-
--min-contact-frames 3
|
|
236
|
-
|
|
237
|
-
```text
|
|
235
|
+
--min-contact-frames 3
|
|
236
|
+
```
|
|
238
237
|
|
|
239
|
-
**
|
|
238
|
+
**Note:** Auto-tuning handles these parameters automatically. Manual overrides shown for illustration.
|
|
240
239
|
|
|
241
240
|
---
|
|
242
241
|
|
|
@@ -270,9 +269,8 @@ kinemotion dropjump-analyze video_30fps.mp4 \
|
|
|
270
269
|
kinemotion dropjump-analyze video_60fps.mp4 \
|
|
271
270
|
--smoothing-window 5 \
|
|
272
271
|
--velocity-threshold 0.01 \ # halve (less motion per frame)
|
|
273
|
-
--min-contact-frames 6
|
|
274
|
-
|
|
275
|
-
```text
|
|
272
|
+
--min-contact-frames 6 # double (same time duration)
|
|
273
|
+
```
|
|
276
274
|
|
|
277
275
|
**Expected accuracy:** ~90-91% with calibration (+2-3% over 30fps)
|
|
278
276
|
|
|
@@ -310,9 +308,8 @@ kinemotion dropjump-analyze video_60fps.mp4 \
|
|
|
310
308
|
kinemotion dropjump-analyze video_120fps.mp4 \
|
|
311
309
|
--smoothing-window 5 \
|
|
312
310
|
--velocity-threshold 0.005 \ # quarter (4× more frames)
|
|
313
|
-
--min-contact-frames 12
|
|
314
|
-
|
|
315
|
-
```text
|
|
311
|
+
--min-contact-frames 12 # quadruple
|
|
312
|
+
```
|
|
316
313
|
|
|
317
314
|
**Expected accuracy:** ~91-92% with calibration (+3-4% over 30fps, +1% over 60fps)
|
|
318
315
|
|
|
@@ -353,9 +350,8 @@ kinemotion dropjump-analyze video_120fps.mp4 \
|
|
|
353
350
|
kinemotion dropjump-analyze video_240fps.mp4 \
|
|
354
351
|
--smoothing-window 5 \
|
|
355
352
|
--velocity-threshold 0.0025 \ # 1/8× (8× more frames)
|
|
356
|
-
--min-contact-frames 24
|
|
357
|
-
|
|
358
|
-
```text
|
|
353
|
+
--min-contact-frames 24 # 8×
|
|
354
|
+
```
|
|
359
355
|
|
|
360
356
|
**Expected accuracy:** ~92-93% with calibration (+4-5% over 30fps, +1-2% over 60fps, +0.5% over 120fps)
|
|
361
357
|
|
|
@@ -427,9 +423,8 @@ kinemotion dropjump-analyze video_30fps.mp4 \
|
|
|
427
423
|
--polyorder 2 \
|
|
428
424
|
--velocity-threshold 0.02 \
|
|
429
425
|
--min-contact-frames 3 \
|
|
430
|
-
--visibility-threshold 0.5
|
|
431
|
-
|
|
432
|
-
```text
|
|
426
|
+
--visibility-threshold 0.5
|
|
427
|
+
```
|
|
433
428
|
|
|
434
429
|
#### 60 fps (2× frames)
|
|
435
430
|
|
|
@@ -439,9 +434,8 @@ kinemotion dropjump-analyze video_60fps.mp4 \
|
|
|
439
434
|
--polyorder 2 \ # same
|
|
440
435
|
--velocity-threshold 0.01 \ # halve (2× more frames)
|
|
441
436
|
--min-contact-frames 6 \ # double (2× more frames)
|
|
442
|
-
--visibility-threshold 0.5
|
|
443
|
-
|
|
444
|
-
```text
|
|
437
|
+
--visibility-threshold 0.5 # same
|
|
438
|
+
```
|
|
445
439
|
|
|
446
440
|
#### 120 fps (4× frames)
|
|
447
441
|
|
|
@@ -451,9 +445,8 @@ kinemotion dropjump-analyze video_120fps.mp4 \
|
|
|
451
445
|
--polyorder 2 \ # same
|
|
452
446
|
--velocity-threshold 0.005 \ # quarter (4× more frames)
|
|
453
447
|
--min-contact-frames 12 \ # quadruple (4× more frames)
|
|
454
|
-
--visibility-threshold 0.5
|
|
455
|
-
|
|
456
|
-
```text
|
|
448
|
+
--visibility-threshold 0.5 # same
|
|
449
|
+
```
|
|
457
450
|
|
|
458
451
|
#### 240 fps (8× frames)
|
|
459
452
|
|
|
@@ -463,9 +456,8 @@ kinemotion dropjump-analyze video_240fps.mp4 \
|
|
|
463
456
|
--polyorder 2 \ # same
|
|
464
457
|
--velocity-threshold 0.0025 \ # 1/8× (8× more frames)
|
|
465
458
|
--min-contact-frames 24 \ # 8× (8× more frames)
|
|
466
|
-
--visibility-threshold 0.5
|
|
467
|
-
|
|
468
|
-
```text
|
|
459
|
+
--visibility-threshold 0.5 # same
|
|
460
|
+
```
|
|
469
461
|
|
|
470
462
|
### Auto-Detecting Frame Rate (Future Enhancement)
|
|
471
463
|
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
# Drop Jump API
|
|
2
|
-
|
|
3
|
-
The drop jump API provides functions for analyzing drop jump videos and extracting kinematic metrics.
|
|
4
|
-
|
|
5
|
-
## Quick Example
|
|
6
|
-
|
|
7
|
-
```python
|
|
8
|
-
from kinemotion import process_dropjump_video
|
|
9
|
-
|
|
10
|
-
metrics = process_dropjump_video(
|
|
11
|
-
video_path="dropjump.mp4",
|
|
12
|
-
drop_height=0.40, # meters
|
|
13
|
-
output_path="debug.mp4", # optional
|
|
14
|
-
smoothing=True
|
|
15
|
-
)
|
|
16
|
-
|
|
17
|
-
print(f"Ground contact time: {metrics.ground_contact_time:.3f}s")
|
|
18
|
-
print(f"Flight time: {metrics.flight_time:.3f}s")
|
|
19
|
-
print(f"RSI: {metrics.reactive_strength_index:.2f}")
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
## Main Functions
|
|
23
|
-
|
|
24
|
-
::: kinemotion.api.process_dropjump_video
|
|
25
|
-
options:
|
|
26
|
-
show_root_heading: true
|
|
27
|
-
show_source: false
|
|
28
|
-
|
|
29
|
-
::: kinemotion.api.process_dropjump_videos_bulk
|
|
30
|
-
options:
|
|
31
|
-
show_root_heading: true
|
|
32
|
-
show_source: false
|
|
33
|
-
|
|
34
|
-
## Configuration
|
|
35
|
-
|
|
36
|
-
::: kinemotion.api.DropJumpVideoConfig
|
|
37
|
-
options:
|
|
38
|
-
show_root_heading: true
|
|
39
|
-
show_source: false
|
|
40
|
-
|
|
41
|
-
## Results
|
|
42
|
-
|
|
43
|
-
::: kinemotion.api.DropJumpVideoResult
|
|
44
|
-
options:
|
|
45
|
-
show_root_heading: true
|
|
46
|
-
show_source: false
|
|
47
|
-
|
|
48
|
-
## Metrics
|
|
49
|
-
|
|
50
|
-
::: kinemotion.dropjump.kinematics.DropJumpMetrics
|
|
51
|
-
options:
|
|
52
|
-
show_root_heading: true
|
|
53
|
-
show_source: false
|
|
54
|
-
|
|
55
|
-
## Key Parameters
|
|
56
|
-
|
|
57
|
-
### drop_height
|
|
58
|
-
|
|
59
|
-
**Required.** The height of the drop box in meters. This is critical for accurate velocity calculations.
|
|
60
|
-
|
|
61
|
-
```python
|
|
62
|
-
metrics = process_dropjump_video("video.mp4", drop_height=0.40) # 40cm box
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
### smoothing
|
|
66
|
-
|
|
67
|
-
Apply Savitzky-Golay smoothing to landmark positions before analysis. Reduces noise but may slightly delay event detection.
|
|
68
|
-
|
|
69
|
-
Default: `True`
|
|
70
|
-
|
|
71
|
-
### output_path
|
|
72
|
-
|
|
73
|
-
Path to write debug video with overlay visualization. If not provided, no debug video is created.
|
|
74
|
-
|
|
75
|
-
```python
|
|
76
|
-
metrics = process_dropjump_video(
|
|
77
|
-
"video.mp4",
|
|
78
|
-
drop_height=0.40,
|
|
79
|
-
output_path="debug.mp4"
|
|
80
|
-
)
|
|
81
|
-
```
|
|
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.15.1 → kinemotion-0.15.2}/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
|
|
File without changes
|