kinemotion 0.15.0__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.

Files changed (84) hide show
  1. {kinemotion-0.15.0 → kinemotion-0.15.2}/.github/ISSUE_TEMPLATE/bug_report.yml +1 -1
  2. {kinemotion-0.15.0 → kinemotion-0.15.2}/.github/pull_request_template.md +2 -1
  3. {kinemotion-0.15.0 → kinemotion-0.15.2}/CHANGELOG.md +16 -0
  4. {kinemotion-0.15.0 → kinemotion-0.15.2}/CLAUDE.md +8 -8
  5. {kinemotion-0.15.0 → kinemotion-0.15.2}/CONTRIBUTING.md +2 -2
  6. {kinemotion-0.15.0 → kinemotion-0.15.2}/PKG-INFO +9 -10
  7. {kinemotion-0.15.0 → kinemotion-0.15.2}/README.md +8 -9
  8. {kinemotion-0.15.0 → kinemotion-0.15.2}/docs/api/cmj.md +3 -2
  9. kinemotion-0.15.2/docs/api/dropjump.md +106 -0
  10. {kinemotion-0.15.0 → kinemotion-0.15.2}/docs/api/overview.md +22 -18
  11. {kinemotion-0.15.0 → kinemotion-0.15.2}/docs/guides/bulk-processing.md +12 -37
  12. {kinemotion-0.15.0 → kinemotion-0.15.2}/docs/guides/camera-setup.md +4 -4
  13. {kinemotion-0.15.0 → kinemotion-0.15.2}/docs/index.md +2 -2
  14. {kinemotion-0.15.0 → kinemotion-0.15.2}/docs/reference/parameters.md +45 -93
  15. {kinemotion-0.15.0 → kinemotion-0.15.2}/docs/technical/framerate.md +17 -25
  16. {kinemotion-0.15.0 → kinemotion-0.15.2}/pyproject.toml +1 -1
  17. {kinemotion-0.15.0 → kinemotion-0.15.2}/uv.lock +1 -1
  18. kinemotion-0.15.0/docs/api/dropjump.md +0 -81
  19. {kinemotion-0.15.0 → kinemotion-0.15.2}/.dockerignore +0 -0
  20. {kinemotion-0.15.0 → kinemotion-0.15.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  21. {kinemotion-0.15.0 → kinemotion-0.15.2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  22. {kinemotion-0.15.0 → kinemotion-0.15.2}/.github/workflows/docs.yml +0 -0
  23. {kinemotion-0.15.0 → kinemotion-0.15.2}/.github/workflows/release.yml +0 -0
  24. {kinemotion-0.15.0 → kinemotion-0.15.2}/.gitignore +0 -0
  25. {kinemotion-0.15.0 → kinemotion-0.15.2}/.pre-commit-config.yaml +0 -0
  26. {kinemotion-0.15.0 → kinemotion-0.15.2}/.readthedocs.yml +0 -0
  27. {kinemotion-0.15.0 → kinemotion-0.15.2}/.tool-versions +0 -0
  28. {kinemotion-0.15.0 → kinemotion-0.15.2}/CODE_OF_CONDUCT.md +0 -0
  29. {kinemotion-0.15.0 → kinemotion-0.15.2}/Dockerfile +0 -0
  30. {kinemotion-0.15.0 → kinemotion-0.15.2}/GEMINI.md +0 -0
  31. {kinemotion-0.15.0 → kinemotion-0.15.2}/LICENSE +0 -0
  32. {kinemotion-0.15.0 → kinemotion-0.15.2}/SECURITY.md +0 -0
  33. {kinemotion-0.15.0 → kinemotion-0.15.2}/docs/README.md +0 -0
  34. {kinemotion-0.15.0 → kinemotion-0.15.2}/docs/api/core.md +0 -0
  35. {kinemotion-0.15.0 → kinemotion-0.15.2}/docs/development/errors-findings.md +0 -0
  36. {kinemotion-0.15.0 → kinemotion-0.15.2}/docs/development/validation-plan.md +0 -0
  37. {kinemotion-0.15.0 → kinemotion-0.15.2}/docs/guides/cmj-guide.md +0 -0
  38. {kinemotion-0.15.0 → kinemotion-0.15.2}/docs/reference/pose-systems.md +0 -0
  39. {kinemotion-0.15.0 → kinemotion-0.15.2}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
  40. {kinemotion-0.15.0 → kinemotion-0.15.2}/docs/technical/imu-metadata.md +0 -0
  41. {kinemotion-0.15.0 → kinemotion-0.15.2}/docs/technical/real-time-analysis.md +0 -0
  42. {kinemotion-0.15.0 → kinemotion-0.15.2}/docs/technical/triple-extension.md +0 -0
  43. {kinemotion-0.15.0 → kinemotion-0.15.2}/docs/translations/es/camera-setup.md +0 -0
  44. {kinemotion-0.15.0 → kinemotion-0.15.2}/examples/bulk/README.md +0 -0
  45. {kinemotion-0.15.0 → kinemotion-0.15.2}/examples/bulk/bulk_processing.py +0 -0
  46. {kinemotion-0.15.0 → kinemotion-0.15.2}/examples/bulk/simple_example.py +0 -0
  47. {kinemotion-0.15.0 → kinemotion-0.15.2}/examples/programmatic_usage.py +0 -0
  48. {kinemotion-0.15.0 → kinemotion-0.15.2}/mkdocs.yml +0 -0
  49. {kinemotion-0.15.0 → kinemotion-0.15.2}/requirements-docs.txt +0 -0
  50. {kinemotion-0.15.0 → kinemotion-0.15.2}/samples/cmjs/README.md +0 -0
  51. {kinemotion-0.15.0 → kinemotion-0.15.2}/src/kinemotion/__init__.py +0 -0
  52. {kinemotion-0.15.0 → kinemotion-0.15.2}/src/kinemotion/api.py +0 -0
  53. {kinemotion-0.15.0 → kinemotion-0.15.2}/src/kinemotion/cli.py +0 -0
  54. {kinemotion-0.15.0 → kinemotion-0.15.2}/src/kinemotion/cmj/__init__.py +0 -0
  55. {kinemotion-0.15.0 → kinemotion-0.15.2}/src/kinemotion/cmj/analysis.py +0 -0
  56. {kinemotion-0.15.0 → kinemotion-0.15.2}/src/kinemotion/cmj/cli.py +0 -0
  57. {kinemotion-0.15.0 → kinemotion-0.15.2}/src/kinemotion/cmj/debug_overlay.py +0 -0
  58. {kinemotion-0.15.0 → kinemotion-0.15.2}/src/kinemotion/cmj/joint_angles.py +0 -0
  59. {kinemotion-0.15.0 → kinemotion-0.15.2}/src/kinemotion/cmj/kinematics.py +0 -0
  60. {kinemotion-0.15.0 → kinemotion-0.15.2}/src/kinemotion/core/__init__.py +0 -0
  61. {kinemotion-0.15.0 → kinemotion-0.15.2}/src/kinemotion/core/auto_tuning.py +0 -0
  62. {kinemotion-0.15.0 → kinemotion-0.15.2}/src/kinemotion/core/cli_utils.py +0 -0
  63. {kinemotion-0.15.0 → kinemotion-0.15.2}/src/kinemotion/core/debug_overlay_utils.py +0 -0
  64. {kinemotion-0.15.0 → kinemotion-0.15.2}/src/kinemotion/core/filtering.py +0 -0
  65. {kinemotion-0.15.0 → kinemotion-0.15.2}/src/kinemotion/core/pose.py +0 -0
  66. {kinemotion-0.15.0 → kinemotion-0.15.2}/src/kinemotion/core/smoothing.py +0 -0
  67. {kinemotion-0.15.0 → kinemotion-0.15.2}/src/kinemotion/core/video_io.py +0 -0
  68. {kinemotion-0.15.0 → kinemotion-0.15.2}/src/kinemotion/dropjump/__init__.py +0 -0
  69. {kinemotion-0.15.0 → kinemotion-0.15.2}/src/kinemotion/dropjump/analysis.py +0 -0
  70. {kinemotion-0.15.0 → kinemotion-0.15.2}/src/kinemotion/dropjump/cli.py +0 -0
  71. {kinemotion-0.15.0 → kinemotion-0.15.2}/src/kinemotion/dropjump/debug_overlay.py +0 -0
  72. {kinemotion-0.15.0 → kinemotion-0.15.2}/src/kinemotion/dropjump/kinematics.py +0 -0
  73. {kinemotion-0.15.0 → kinemotion-0.15.2}/src/kinemotion/py.typed +0 -0
  74. {kinemotion-0.15.0 → kinemotion-0.15.2}/tests/__init__.py +0 -0
  75. {kinemotion-0.15.0 → kinemotion-0.15.2}/tests/test_adaptive_threshold.py +0 -0
  76. {kinemotion-0.15.0 → kinemotion-0.15.2}/tests/test_api.py +0 -0
  77. {kinemotion-0.15.0 → kinemotion-0.15.2}/tests/test_aspect_ratio.py +0 -0
  78. {kinemotion-0.15.0 → kinemotion-0.15.2}/tests/test_cmj_analysis.py +0 -0
  79. {kinemotion-0.15.0 → kinemotion-0.15.2}/tests/test_cmj_kinematics.py +0 -0
  80. {kinemotion-0.15.0 → kinemotion-0.15.2}/tests/test_com_estimation.py +0 -0
  81. {kinemotion-0.15.0 → kinemotion-0.15.2}/tests/test_contact_detection.py +0 -0
  82. {kinemotion-0.15.0 → kinemotion-0.15.2}/tests/test_filtering.py +0 -0
  83. {kinemotion-0.15.0 → kinemotion-0.15.2}/tests/test_kinematics.py +0 -0
  84. {kinemotion-0.15.0 → 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 --drop-height 0.40 --output debug.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 --drop-height 0.40
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,22 @@ 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
+
18
+ ## v0.15.1 (2025-11-06)
19
+
20
+ ### Bug Fixes
21
+
22
+ - **docs**: Update mkdocstrings references to renamed API functions
23
+ ([`d410df3`](https://github.com/feniix/kinemotion/commit/d410df3fb6dd726ac607443371e375190521dae6))
24
+
25
+
10
26
  ## v0.15.0 (2025-11-06)
11
27
 
12
28
  ### Features
@@ -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 --drop-height 0.40
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
- | Parameter | `--drop-height` required | No calibration needed |
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 (requires --drop-height)
182
- kinemotion dropjump-analyze video.mp4 --drop-height 0.40
181
+ # Drop jump (auto-tuned parameters)
182
+ kinemotion dropjump-analyze video.mp4
183
183
 
184
- # CMJ (no calibration needed)
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 = process_video("video.mp4", drop_height=0.40)
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> --drop-height 0.40
86
+ uv run kinemotion dropjump-analyze <video_path>
87
87
 
88
88
  # With debug output
89
- uv run kinemotion dropjump-analyze <video_path> --drop-height 0.40 --output debug.mp4 --verbose
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.0
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
- # Drop-height is REQUIRED for accurate calibration
129
- kinemotion dropjump-analyze video.mp4 --drop-height 0.40
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 --drop-height 0.40 --workers 4
179
+ kinemotion dropjump-analyze videos/*.mp4 --batch --workers 4
180
180
 
181
- # CMJ (no drop height needed)
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 = process_video(
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
- VideoConfig("video1.mp4", drop_height=0.40),
218
- VideoConfig("video2.mp4", drop_height=0.30, quality="accurate"),
216
+ DropJumpVideoConfig("video1.mp4", quality="balanced"),
217
+ DropJumpVideoConfig("video2.mp4", quality="accurate"),
219
218
  ]
220
219
 
221
- results = process_videos_bulk(configs, max_workers=4)
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
- # Drop-height is REQUIRED for accurate calibration
100
- kinemotion dropjump-analyze video.mp4 --drop-height 0.40
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 --drop-height 0.40 --workers 4
150
+ kinemotion dropjump-analyze videos/*.mp4 --batch --workers 4
151
151
 
152
- # CMJ (no drop height needed)
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 = process_video(
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
- VideoConfig("video1.mp4", drop_height=0.40),
189
- VideoConfig("video2.mp4", drop_height=0.30, quality="accurate"),
187
+ DropJumpVideoConfig("video1.mp4", quality="balanced"),
188
+ DropJumpVideoConfig("video2.mp4", quality="accurate"),
190
189
  ]
191
190
 
192
- results = process_videos_bulk(configs, max_workers=4)
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
- output_path="debug.mp4", # optional
13
- smoothing=True
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
- - `process_video()` - Analyze a single drop jump video
12
- - `process_videos_bulk()` - Batch process multiple drop jump videos
13
- - `VideoConfig` - Configuration for drop jump analysis
14
- - `VideoResult` - Results from drop jump analysis
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 = process_video("dropjump.mp4", drop_height=0.40)
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 process_dropjump_videos_bulk, process_cmj_videos_bulk
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
- results = process_videos_bulk(
50
- video_paths=["video1.mp4", "video2.mp4"],
51
- drop_height=0.40,
52
- output_dir="results/",
53
- workers=4
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
- cmj_results = process_cmj_videos_bulk(
58
- video_paths=["cmj1.mp4", "cmj2.mp4"],
59
- output_dir="results/",
60
- workers=4
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, drop_height: float = 0.40) -> dict:
36
+ def analyze_video(video_path: str, quality: str = "balanced") -> dict:
35
37
  """Analyze a single drop jump video."""
36
38
  try:
37
- # Auto-tune parameters based on video
38
- params = auto_tune_parameters(video_path, quality_preset="balanced")
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
- # Calculate metrics
65
- metrics = calculate_drop_jump_metrics(
66
- landmarks=landmarks,
67
- contact_states=contact_states,
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), 0.40),
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 --drop-height 0.40
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 --drop-height 0.60
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 exactly 45° (measurement error)
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 45° angle with measuring app or protractor
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 --drop-height 0.40
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 = process_video("video.mp4", drop_height=0.40)
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 --drop-height 0.40 \
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", drop_height=0.40, quality="fast"),
83
- DropJumpVideoConfig("video2.mp4", drop_height=0.30, quality="accurate"), # Different settings per video
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
- --drop-height 0.40
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
- ## Calibration Parameters
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
- **When to use:**
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
- - Any drop jump where you know the box height
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
- **When NOT to use:**
818
+ The system analyzes:
843
819
 
844
- - Regular jumps without a drop box (no calibration reference available)
845
- - Unknown drop box height (will calculate but results won't be accurate)
846
- - Video doesn't show the full drop from box to ground
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
- **How to measure your drop box:**
825
+ ### Quality Presets
849
826
 
850
- 1. Use a tape measure or ruler
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
- **Measurement methods:**
859
-
860
- ```text
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
- # 40cm drop box
876
- kinemotion dropjump-analyze video.mp4 --drop-height 0.40
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
- # Compare calibrated vs uncalibrated
885
- # Without calibration
886
- kinemotion dropjump-analyze video.mp4 --json-output uncalibrated.json
839
+ # Accurate for research
840
+ kinemotion dropjump-analyze video.mp4 --quality accurate --verbose
841
+ ```
887
842
 
888
- # With calibration
889
- kinemotion dropjump-analyze video.mp4 --drop-height 0.40 --json-output calibrated.json
890
- ```text
843
+ **Python API:**
891
844
 
892
- **JSON output with calibration:**
845
+ ```python
846
+ from kinemotion import process_dropjump_video
893
847
 
894
- ```json
895
- {
896
- "jump_height_m": 0.339, // Primary (calibrated)
897
- "jump_height_kinematic_m": 0.256, // Kinematic-only (fallback)
898
- "jump_height_trajectory_normalized": 0.0845 // Normalized measurement
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
- ```text
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 Calibration
1077
+ ### Scenario 6: Drop Jump with Expert Parameter Tuning
1126
1078
 
1127
- - Standard drop jump analysis with 40cm box for accurate jump height
1079
+ - Drop jump analysis with manually tuned parameters for specific conditions
1128
1080
 
1129
1081
  ```bash
1130
1082
  kinemotion dropjump-analyze video.mp4 \
1131
- --drop-height 0.40 \
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
- ```text
1092
+ ```
1141
1093
 
1142
- **Note:** Calibration provides theoretical benefits by using known reference distances, but actual accuracy requires empirical validation against gold standards (force plates, 3D motion capture).
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
- --drop-height 0.40 \
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
- ```text
1113
+ ```
1162
1114
 
1163
- **Note:** This combines theoretical improvements for drop jumps (⚠️ all unvalidated):
1115
+ **Note:** This uses maximum accuracy settings with advanced filtering:
1164
1116
 
1165
- - Calibration: Uses known reference distance for scaling
1166
- - Curvature analysis: Enhanced timing precision (enabled by default)
1167
- - Outlier rejection: Removes tracking glitches (enabled by default)
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
- --drop-height 0.40
237
- ```text
235
+ --min-contact-frames 3
236
+ ```
238
237
 
239
- **Expected accuracy:** ~88% with calibration
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 \ # double (same time duration)
274
- --drop-height 0.40
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 \ # quadruple
314
- --drop-height 0.40
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 \ # 8×
357
- --drop-height 0.40
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
- --drop-height 0.40
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 \ # same
443
- --drop-height 0.40
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 \ # same
455
- --drop-height 0.40
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 \ # same
467
- --drop-height 0.40
468
- ```text
459
+ --visibility-threshold 0.5 # same
460
+ ```
469
461
 
470
462
  ### Auto-Detecting Frame Rate (Future Enhancement)
471
463
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "kinemotion"
3
- version = "0.15.0"
3
+ version = "0.15.2"
4
4
  description = "Video-based kinematic analysis for athletic performance"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10,<3.13"
@@ -648,7 +648,7 @@ wheels = [
648
648
 
649
649
  [[package]]
650
650
  name = "kinemotion"
651
- version = "0.15.0"
651
+ version = "0.15.2"
652
652
  source = { editable = "." }
653
653
  dependencies = [
654
654
  { name = "click" },
@@ -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_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_video
25
- options:
26
- show_root_heading: true
27
- show_source: false
28
-
29
- ::: kinemotion.api.process_videos_bulk
30
- options:
31
- show_root_heading: true
32
- show_source: false
33
-
34
- ## Configuration
35
-
36
- ::: kinemotion.api.VideoConfig
37
- options:
38
- show_root_heading: true
39
- show_source: false
40
-
41
- ## Results
42
-
43
- ::: kinemotion.api.VideoResult
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_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_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