kinemotion 0.10.2__py3-none-any.whl

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.

@@ -0,0 +1,561 @@
1
+ Metadata-Version: 2.4
2
+ Name: kinemotion
3
+ Version: 0.10.2
4
+ Summary: Video-based kinematic analysis for athletic performance
5
+ Project-URL: Homepage, https://github.com/feniix/kinemotion
6
+ Project-URL: Repository, https://github.com/feniix/kinemotion
7
+ Project-URL: Source, https://github.com/feniix/kinemotion
8
+ Project-URL: Issues, https://github.com/feniix/kinemotion/issues
9
+ Author-email: Sebastian Otaegui <feniix@gmail.com>
10
+ License: MIT
11
+ License-File: LICENSE
12
+ Keywords: athletic-performance,drop-jump,kinemetry,kinemotion,mediapipe,pose-tracking,video-analysis
13
+ Classifier: Development Status :: 3 - Alpha
14
+ Classifier: Intended Audience :: Science/Research
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Topic :: Multimedia :: Video
21
+ Classifier: Topic :: Scientific/Engineering :: Image Recognition
22
+ Requires-Python: <3.13,>=3.10
23
+ Requires-Dist: click>=8.1.7
24
+ Requires-Dist: mediapipe>=0.10.9
25
+ Requires-Dist: numpy>=1.26.0
26
+ Requires-Dist: opencv-python>=4.9.0
27
+ Requires-Dist: scipy>=1.11.0
28
+ Description-Content-Type: text/markdown
29
+
30
+ # Kinemotion
31
+
32
+ [![PyPI version](https://badge.fury.io/py/kinemotion.svg)](https://badge.fury.io/py/kinemotion)
33
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
34
+ [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
35
+ [![Checked with mypy](http://www.mypy-lang.org/static/mypy_badge.svg)](http://mypy-lang.org/)
36
+ [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
37
+
38
+ A video-based kinematic analysis tool for athletic performance. Analyzes side-view drop-jump videos to estimate key performance metrics: ground contact time, flight time, and jump height. Uses MediaPipe pose tracking and advanced kinematics.
39
+
40
+ ## Features
41
+
42
+ - **Automatic pose tracking** using MediaPipe Pose landmarks
43
+ - **Ground contact detection** based on foot velocity and position
44
+ - **Derivative-based velocity** - smooth velocity calculation from position trajectory
45
+ - **Trajectory curvature analysis** - acceleration patterns for refined event detection
46
+ - **Sub-frame interpolation** - precise timing beyond frame boundaries for improved accuracy
47
+ - **Automatic drop jump detection** - identifies box → drop → landing → jump phases
48
+ - **Kinematic calculations** for jump metrics:
49
+ - Ground contact time (ms)
50
+ - Flight time (ms)
51
+ - Jump height (m) - with optional calibration using drop box height
52
+ - **Calibrated measurements** - use known drop height for theoretically improved accuracy (⚠️ accuracy claims unvalidated)
53
+ - **JSON output** for easy integration with other tools
54
+ - **Optional debug video** with visual overlays showing contact states and landmarks
55
+ - **Batch processing** - CLI and Python API for parallel processing of multiple videos
56
+ - **Python library API** - use kinemotion programmatically in your own code
57
+ - **CSV export** - aggregated results for research and analysis
58
+ - **Configurable parameters** for smoothing, thresholds, and detection
59
+
60
+ **Note**: Drop jump analysis uses foot-based tracking with fixed velocity thresholds. Center of mass (CoM) tracking and adaptive thresholding (available in `core/` modules) require longer videos (~5+ seconds) with a 3-second standing baseline, making them unsuitable for typical drop jump videos (~3 seconds). These features may be available in future jump types like CMJ (countermovement jump).
61
+
62
+ ## Validation Status
63
+
64
+ ⚠️ **IMPORTANT**: This tool's accuracy has **not been validated** against gold standard measurements (force plates, 3D motion capture). All accuracy claims and improvement estimates are theoretical and based on algorithmic considerations, not empirical testing.
65
+
66
+ The tool provides consistent measurements and may be useful for:
67
+
68
+ - Tracking relative changes in an individual athlete over time
69
+ - Comparing similar jumps under controlled conditions
70
+ - Exploratory analysis and research
71
+
72
+ For clinical, research, or performance assessment requiring validated accuracy, this tool should be compared against validated measurement systems before use.
73
+
74
+ ## Setup
75
+
76
+ ### Prerequisites
77
+
78
+ - [asdf](https://asdf-vm.com/) version manager
79
+ - asdf plugins for Python and uv
80
+
81
+ ### Installation
82
+
83
+ 1. **Install asdf plugins** (if not already installed):
84
+
85
+ ```bash
86
+ asdf plugin add python
87
+ asdf plugin add uv
88
+ ```
89
+
90
+ 1. **Install versions specified in `.tool-versions`**:
91
+
92
+ ```bash
93
+ asdf install
94
+ ```
95
+
96
+ 1. **Install project dependencies using uv**:
97
+
98
+ ```bash
99
+ uv sync
100
+ ```
101
+
102
+ This will install all dependencies and make the `kinemotion` command available.
103
+
104
+ ## Usage
105
+
106
+ **NEW:** Kinemotion now features **intelligent auto-tuning**! Just specify your drop box height and the tool automatically optimizes all parameters based on video frame rate and tracking quality.
107
+
108
+ ### Basic Analysis
109
+
110
+ Analyze a video with automatic parameter selection:
111
+
112
+ ```bash
113
+ # Drop-height is REQUIRED for accurate calibration
114
+ kinemotion dropjump-analyze video.mp4 --drop-height 0.40
115
+ ```
116
+
117
+ ### Save Metrics to File
118
+
119
+ ```bash
120
+ kinemotion dropjump-analyze video.mp4 --drop-height 0.40 --json-output metrics.json
121
+ ```
122
+
123
+ ### Generate Debug Video
124
+
125
+ Create an annotated video showing pose tracking and contact detection:
126
+
127
+ ```bash
128
+ kinemotion dropjump-analyze video.mp4 --drop-height 0.40 --output debug.mp4
129
+ ```
130
+
131
+ ### Complete Analysis
132
+
133
+ With all outputs:
134
+
135
+ ```bash
136
+ kinemotion dropjump-analyze video.mp4 \
137
+ --drop-height 0.40 \
138
+ --output debug.mp4 \
139
+ --json-output results.json
140
+ ```
141
+
142
+ ### Quality Presets
143
+
144
+ Choose analysis quality (automatically adjusts all parameters):
145
+
146
+ ```bash
147
+ # Fast analysis (quick, less precise - good for batch processing)
148
+ kinemotion dropjump-analyze video.mp4 --drop-height 0.40 --quality fast
149
+
150
+ # Balanced (default - best for most use cases)
151
+ kinemotion dropjump-analyze video.mp4 --drop-height 0.40 --quality balanced
152
+
153
+ # Accurate (research-grade, slower - maximum precision)
154
+ kinemotion dropjump-analyze video.mp4 --drop-height 0.40 --quality accurate
155
+ ```
156
+
157
+ ### See Auto-Selected Parameters
158
+
159
+ View what parameters were automatically selected:
160
+
161
+ ```bash
162
+ kinemotion dropjump-analyze video.mp4 --drop-height 0.40 --verbose
163
+ ```
164
+
165
+ ### Expert Mode (Advanced Users)
166
+
167
+ Override auto-tuned parameters if needed:
168
+
169
+ ```bash
170
+ # Manual parameter override (rarely needed)
171
+ kinemotion dropjump-analyze video.mp4 \
172
+ --drop-height 0.40 \
173
+ --expert \
174
+ --smoothing-window 7 \
175
+ --velocity-threshold 0.015
176
+ ```
177
+
178
+ ### Batch Processing
179
+
180
+ Process multiple videos in parallel from the command line:
181
+
182
+ ```bash
183
+ # Process multiple videos with glob pattern
184
+ kinemotion dropjump-analyze videos/*.mp4 --batch --drop-height 0.40 --workers 4
185
+
186
+ # Save all results to directories
187
+ kinemotion dropjump-analyze videos/*.mp4 --batch --drop-height 0.40 \
188
+ --json-output-dir results/ \
189
+ --output-dir debug_videos/ \
190
+ --csv-summary summary.csv
191
+
192
+ # Multiple explicit paths (batch mode auto-enabled)
193
+ kinemotion dropjump-analyze video1.mp4 video2.mp4 video3.mp4 --drop-height 0.40
194
+ ```
195
+
196
+ **Batch options:**
197
+
198
+ - `--batch`: Explicitly enable batch mode
199
+ - `--workers <int>`: Number of parallel workers (default: 4)
200
+ - `--output-dir <path>`: Directory for debug videos (auto-named per video)
201
+ - `--json-output-dir <path>`: Directory for JSON metrics (auto-named per video)
202
+ - `--csv-summary <path>`: Export aggregated results to CSV
203
+
204
+ **Output example:**
205
+
206
+ ```text
207
+ Batch processing 10 videos with 4 workers
208
+ ======================================================================
209
+
210
+ Processing videos...
211
+ [1/10] ✓ athlete1.mp4 (2.3s)
212
+ [2/10] ✓ athlete2.mp4 (2.1s)
213
+ [3/10] ✗ athlete3.mp4 (0.5s)
214
+ Error: No frames could be processed
215
+
216
+ ======================================================================
217
+ BATCH PROCESSING SUMMARY
218
+ ======================================================================
219
+ Total videos: 10
220
+ Successful: 9
221
+ Failed: 1
222
+
223
+ Average ground contact time: 245.3 ms
224
+ Average flight time: 523.7 ms
225
+ Average jump height: 0.352 m (35.2 cm)
226
+ ```
227
+
228
+ ## Python API
229
+
230
+ Use kinemotion as a library in your Python code for automated pipelines and custom analysis:
231
+
232
+ ### Single Video Processing
233
+
234
+ ```python
235
+ from kinemotion import process_video
236
+
237
+ # Process a single video
238
+ metrics = process_video(
239
+ video_path="athlete_jump.mp4",
240
+ drop_height=0.40, # 40cm drop box
241
+ quality="balanced",
242
+ verbose=True
243
+ )
244
+
245
+ # Access results
246
+ print(f"Jump height: {metrics.jump_height:.3f} m")
247
+ print(f"Ground contact time: {metrics.ground_contact_time * 1000:.1f} ms")
248
+ print(f"Flight time: {metrics.flight_time * 1000:.1f} ms")
249
+ ```
250
+
251
+ ### Bulk Video Processing
252
+
253
+ ```python
254
+ from kinemotion import VideoConfig, process_videos_bulk
255
+
256
+ # Configure multiple videos
257
+ configs = [
258
+ VideoConfig("video1.mp4", drop_height=0.40),
259
+ VideoConfig("video2.mp4", drop_height=0.30, quality="accurate"),
260
+ VideoConfig("video3.mp4", drop_height=0.50, output_video="debug3.mp4"),
261
+ ]
262
+
263
+ # Process in parallel with 4 workers
264
+ results = process_videos_bulk(configs, max_workers=4)
265
+
266
+ # Check results
267
+ for result in results:
268
+ if result.success:
269
+ print(f"✓ {result.video_path}: {result.metrics.jump_height:.3f} m")
270
+ else:
271
+ print(f"✗ {result.video_path}: {result.error}")
272
+ ```
273
+
274
+ ### Export Results to CSV
275
+
276
+ ```python
277
+ import csv
278
+ from pathlib import Path
279
+ from kinemotion import VideoConfig, process_videos_bulk
280
+
281
+ # Process directory of videos
282
+ video_dir = Path("athlete_videos")
283
+ configs = [
284
+ VideoConfig(str(v), drop_height=0.40, quality="balanced")
285
+ for v in video_dir.glob("*.mp4")
286
+ ]
287
+
288
+ results = process_videos_bulk(configs, max_workers=4)
289
+
290
+ # Export to CSV
291
+ with open("results.csv", "w", newline="") as f:
292
+ writer = csv.writer(f)
293
+ writer.writerow(["Video", "GCT (ms)", "Flight (ms)", "Jump (m)"])
294
+
295
+ for r in results:
296
+ if r.success and r.metrics:
297
+ writer.writerow([
298
+ Path(r.video_path).name,
299
+ f"{r.metrics.ground_contact_time * 1000:.1f}" if r.metrics.ground_contact_time else "N/A",
300
+ f"{r.metrics.flight_time * 1000:.1f}" if r.metrics.flight_time else "N/A",
301
+ f"{r.metrics.jump_height:.3f}" if r.metrics.jump_height else "N/A",
302
+ ])
303
+ ```
304
+
305
+ **See [examples/bulk/README.md](examples/bulk/README.md) for comprehensive API documentation and more examples.**
306
+
307
+ ## Configuration Options
308
+
309
+ ### Intelligent Auto-Tuning
310
+
311
+ Kinemotion automatically optimizes parameters based on your video:
312
+
313
+ - **FPS-based scaling**: 30fps, 60fps, 120fps videos use different thresholds automatically
314
+ - **Quality-based adjustments**: Adapts smoothing based on MediaPipe tracking confidence
315
+ - **Always enabled**: Outlier rejection, curvature analysis, drop start detection
316
+
317
+ ### Required Parameters
318
+
319
+ - `--drop-height <float>` **\[REQUIRED\]**
320
+ - Height of drop box/platform in meters (e.g., 0.40 for 40cm)
321
+ - Used for accurate calibration of jump height measurements
322
+ - Measure your box height accurately for best results
323
+
324
+ ### Optional Parameters
325
+
326
+ - `--quality [fast|balanced|accurate]` (default: balanced)
327
+
328
+ - **fast**: Quick analysis, less precise (~50% faster)
329
+ - **balanced**: Good accuracy/speed tradeoff (recommended)
330
+ - **accurate**: Research-grade analysis, slower (maximum precision)
331
+
332
+ - `--verbose` / `-v`
333
+
334
+ - Show auto-selected parameters and analysis details
335
+ - Useful for understanding what the tool is doing
336
+
337
+ - `--output <path>` / `-o`
338
+
339
+ - Generate annotated debug video with pose tracking visualization
340
+
341
+ - `--json-output <path>` / `-j`
342
+
343
+ - Save metrics to JSON file instead of stdout
344
+
345
+ ### Expert Overrides (Rarely Needed)
346
+
347
+ For advanced users who need manual control:
348
+
349
+ - `--drop-start-frame <int>`: Manually specify where drop begins (if auto-detection fails)
350
+ - `--smoothing-window <int>`: Override auto-tuned smoothing window
351
+ - `--velocity-threshold <float>`: Override auto-tuned velocity threshold
352
+ - `--min-contact-frames <int>`: Override auto-tuned minimum contact frames
353
+ - `--visibility-threshold <float>`: Override visibility threshold
354
+ - `--detection-confidence <float>`: Override MediaPipe detection confidence
355
+ - `--tracking-confidence <float>`: Override MediaPipe tracking confidence
356
+
357
+ > **📖 For detailed parameter explanations, see [docs/PARAMETERS.md](docs/PARAMETERS.md)**
358
+ >
359
+ > **Note:** Most users never need expert parameters - auto-tuning handles optimization automatically!
360
+
361
+ ## Output Format
362
+
363
+ ### JSON Metrics
364
+
365
+ ```json
366
+ {
367
+ "ground_contact_time_ms": 245.67,
368
+ "flight_time_ms": 456.78,
369
+ "jump_height_m": 0.339,
370
+ "jump_height_kinematic_m": 0.256,
371
+ "jump_height_trajectory_normalized": 0.0845,
372
+ "contact_start_frame": 45,
373
+ "contact_end_frame": 67,
374
+ "flight_start_frame": 68,
375
+ "flight_end_frame": 95,
376
+ "peak_height_frame": 82
377
+ }
378
+ ```
379
+
380
+ **Fields**:
381
+
382
+ - `jump_height_m`: Primary jump height measurement (calibrated if --drop-height provided, otherwise corrected kinematic)
383
+ - `jump_height_kinematic_m`: Kinematic estimate from flight time: h = (g × t²) / 8
384
+ - `jump_height_trajectory_normalized`: Position-based measurement in normalized coordinates (0-1 range)
385
+ - `contact_start_frame_precise`, `contact_end_frame_precise`: Sub-frame timing (fractional frames)
386
+ - `flight_start_frame_precise`, `flight_end_frame_precise`: Sub-frame timing (fractional frames)
387
+
388
+ **Note**: Integer frame indices (e.g., `contact_start_frame`) are provided for visualization in debug videos. Precise fractional frames (e.g., `contact_start_frame_precise`) are used for all timing calculations and provide higher accuracy.
389
+
390
+ ### Debug Video
391
+
392
+ The debug video includes:
393
+
394
+ - **Green circle**: Average foot position when on ground
395
+ - **Red circle**: Average foot position when in air
396
+ - **Yellow circles**: Individual foot landmarks (ankles, heels)
397
+ - **State indicator**: Current contact state (on_ground/in_air)
398
+ - **Phase labels**: "GROUND CONTACT" and "FLIGHT PHASE" during relevant periods
399
+ - **Peak marker**: "PEAK HEIGHT" at maximum jump height
400
+ - **Frame number**: Current frame index
401
+
402
+ ## Troubleshooting
403
+
404
+ ### Poor Tracking Quality
405
+
406
+ **Symptoms**: Erratic landmark positions, missing detections, incorrect contact states
407
+
408
+ **Solutions**:
409
+
410
+ 1. **Check video quality**: Ensure the athlete is clearly visible in profile view
411
+ 1. **Increase smoothing**: Use `--smoothing-window 7` or higher
412
+ 1. **Adjust detection confidence**: Try `--detection-confidence 0.6` or `--tracking-confidence 0.6`
413
+ 1. **Generate debug video**: Use `--output` to visualize what's being tracked
414
+
415
+ ### No Pose Detected
416
+
417
+ **Symptoms**: "No frames processed" error or all null landmarks
418
+
419
+ **Solutions**:
420
+
421
+ 1. **Verify video format**: OpenCV must be able to read the video
422
+ 1. **Check framing**: Ensure full body is visible in side view
423
+ 1. **Lower confidence thresholds**: Try `--detection-confidence 0.3 --tracking-confidence 0.3`
424
+ 1. **Test video playback**: Verify video opens correctly with standard video players
425
+
426
+ ### Incorrect Contact Detection
427
+
428
+ **Symptoms**: Wrong ground contact times, flight phases not detected
429
+
430
+ **Solutions**:
431
+
432
+ 1. **Generate debug video**: Visualize contact states to diagnose the issue
433
+ 1. **Adjust velocity threshold**:
434
+ - If missing contacts: decrease to `--velocity-threshold 0.01`
435
+ - If false contacts: increase to `--velocity-threshold 0.03`
436
+ 1. **Adjust minimum frames**: `--min-contact-frames 5` for longer required contact
437
+ 1. **Check visibility**: Lower `--visibility-threshold 0.3` if feet are partially obscured
438
+
439
+ ### Jump Height Seems Wrong
440
+
441
+ **Symptoms**: Unrealistic jump height values
442
+
443
+ **Solutions**:
444
+
445
+ 1. **Use calibration**: For drop jumps, add `--drop-height` parameter with box height in meters (e.g., `--drop-height 0.40`)
446
+ - Theoretically improves accuracy (⚠️ unvalidated)
447
+ 1. **Verify flight time detection**: Check `flight_start_frame` and `flight_end_frame` in JSON
448
+ 1. **Compare measurements**: JSON output includes both `jump_height_m` (primary) and `jump_height_kinematic_m` (kinematic-only)
449
+ 1. **Check for drop jump detection**: If doing a drop jump, ensure first phase is elevated enough (>5% of frame height)
450
+
451
+ ### Video Codec Issues
452
+
453
+ **Symptoms**: Cannot write debug video or corrupted output
454
+
455
+ **Solutions**:
456
+
457
+ 1. **Install additional codecs**: Ensure OpenCV has proper video codec support
458
+ 1. **Try different output format**: Use `.avi` extension instead of `.mp4`
459
+ 1. **Check output path**: Ensure write permissions for output directory
460
+
461
+ ## How It Works
462
+
463
+ 1. **Pose Tracking**: MediaPipe extracts 2D pose landmarks (foot points: ankles, heels, foot indices) from each frame
464
+ 1. **Position Calculation**: Averages ankle, heel, and foot index positions to determine foot location
465
+ 1. **Smoothing**: Savitzky-Golay filter reduces tracking jitter while preserving motion dynamics
466
+ 1. **Contact Detection**: Analyzes vertical position velocity to identify ground contact vs. flight phases
467
+ 1. **Phase Identification**: Finds continuous ground contact and flight periods
468
+ - Automatically detects drop jumps vs regular jumps
469
+ - For drop jumps: identifies box → drop → ground contact → jump sequence
470
+ 1. **Sub-Frame Interpolation**: Estimates exact transition times between frames
471
+ - Uses Savitzky-Golay derivative for smooth velocity calculation
472
+ - Linear interpolation of velocity to find threshold crossings
473
+ - Achieves sub-millisecond timing precision (at 30fps: ±10ms vs ±33ms)
474
+ - Reduces timing error by 60-70% for contact and flight measurements
475
+ - Smoother velocity curves eliminate false threshold crossings
476
+ 1. **Trajectory Curvature Analysis**: Refines transitions using acceleration patterns
477
+ - Computes second derivative (acceleration) from position trajectory
478
+ - Detects landing impact by acceleration spike
479
+ - Identifies takeoff by acceleration change patterns
480
+ - Provides independent validation and refinement of velocity-based detection
481
+ 1. **Metric Calculation**:
482
+ - Ground contact time = contact phase duration (using fractional frames)
483
+ - Flight time = flight phase duration (using fractional frames)
484
+ - Jump height = calibrated position-based measurement (if --drop-height provided)
485
+ - Fallback: kinematic estimate (g × t²) / 8 with optional empirical correction factor (⚠️ unvalidated)
486
+
487
+ ## Development
488
+
489
+ ### Code Quality Standards
490
+
491
+ This project enforces strict code quality standards:
492
+
493
+ - **Type safety**: Full mypy strict mode compliance with complete type annotations
494
+ - **Linting**: Comprehensive ruff checks (pycodestyle, pyflakes, isort, pep8-naming, etc.)
495
+ - **Formatting**: Black code style
496
+ - **Testing**: pytest with 61 unit tests
497
+ - **PEP 561 compliant**: Includes py.typed marker for type checking support
498
+
499
+ ### Development Commands
500
+
501
+ ```bash
502
+ # Run the tool
503
+ uv run kinemotion dropjump-analyze <video_path>
504
+
505
+ # Run all tests
506
+ uv run pytest
507
+
508
+ # Run tests with verbose output
509
+ uv run pytest -v
510
+
511
+ # Format code
512
+ uv run black src/
513
+
514
+ # Lint code
515
+ uv run ruff check
516
+
517
+ # Auto-fix linting issues
518
+ uv run ruff check --fix
519
+
520
+ # Type check
521
+ uv run mypy src/dropjump
522
+
523
+ # Run all checks
524
+ uv run ruff check && uv run mypy src/dropjump && uv run pytest
525
+ ```
526
+
527
+ ### Contributing
528
+
529
+ Before committing code, ensure all checks pass:
530
+
531
+ 1. Format with Black
532
+ 1. Fix linting issues with ruff
533
+ 1. Ensure type safety with mypy
534
+ 1. Run all tests with pytest
535
+
536
+ See [CLAUDE.md](CLAUDE.md) for detailed development guidelines.
537
+
538
+ ## Limitations
539
+
540
+ - **2D Analysis**: Only analyzes motion in the camera's view plane
541
+ - **Validation Status**: ⚠️ Accuracy has not been validated against gold standard measurements (force plates, 3D motion capture)
542
+ - **Side View Required**: Must film from the side to accurately track vertical motion
543
+ - **Single Athlete**: Designed for analyzing one athlete at a time
544
+ - **Timing precision**:
545
+ - 30fps videos: ±10ms with sub-frame interpolation (vs ±33ms without)
546
+ - 60fps videos: ±5ms with sub-frame interpolation (vs ±17ms without)
547
+ - Higher frame rates still beneficial for better temporal resolution
548
+ - **Drop jump detection**: Requires first ground phase to be >5% higher than second ground phase
549
+
550
+ ## Future Enhancements
551
+
552
+ - Advanced camera calibration (intrinsic parameters, lens distortion)
553
+ - Multi-angle analysis support
554
+ - Automatic camera orientation detection
555
+ - Real-time analysis from webcam
556
+ - Comparison with reference values
557
+ - Force plate integration for validation
558
+
559
+ ## License
560
+
561
+ MIT License - feel free to use for personal experiments and research.
@@ -0,0 +1,20 @@
1
+ kinemotion/__init__.py,sha256=Z85xg29NA-r4IjrSbAkJpMFigyxACFGUb-37AiMp6YY,350
2
+ kinemotion/api.py,sha256=3Hswx5lfyWc-EanS6iV-4MPUa_uB5t8BpGe4EB4gIIQ,15453
3
+ kinemotion/cli.py,sha256=2IFA2_TE9a5zBtmGVzv5SnX39w7yPuBlw42dL7ca25U,402
4
+ kinemotion/core/__init__.py,sha256=3yzDhb5PekDNjydqrs8aWGneUGJBt-lB0SoB_Y2FXqU,1010
5
+ kinemotion/core/auto_tuning.py,sha256=cvmxUI-CbahpOJQtR2r5jOx4Q6yKPe3DO1o15hOQIdw,10508
6
+ kinemotion/core/filtering.py,sha256=f-m-aA59e4WqE6u-9MA51wssu7rI-Y_7n1cG8IWdeRQ,11241
7
+ kinemotion/core/pose.py,sha256=Wfd1RR-2ZznYpWeQUbySwcV3mvReqn8n3XO6S7pGq4M,8390
8
+ kinemotion/core/smoothing.py,sha256=FON4qKtsSp1-03GnJrDkEUAePaACn4QPMJF0eTIYqR0,12925
9
+ kinemotion/core/video_io.py,sha256=z8Z0qbNaKbcdB40KnbNOBMzab3BbgnhBxp-mUBYeXgM,6577
10
+ kinemotion/dropjump/__init__.py,sha256=yc1XiZ9vfo5h_n7PKVSiX2TTgaIfGL7Y7SkQtiDZj_E,838
11
+ kinemotion/dropjump/analysis.py,sha256=HfJt2t9IsMBiBUz7apIzdxbRH9QqzlFnDVVWcKhU3ow,23291
12
+ kinemotion/dropjump/cli.py,sha256=GuVOc3cWeZ3FjNrf-28DdA-xkLuxwyNVquX3AbiLtE0,26208
13
+ kinemotion/dropjump/debug_overlay.py,sha256=GMo-jCl5OPIv82uPxDbBVI7CsAMwATTvxZMeWfs8k8M,8701
14
+ kinemotion/dropjump/kinematics.py,sha256=4G_7_KWnXiT09G9BduQNIgFtxvwjo2RyH1sP9SU3hSE,17949
15
+ kinemotion/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
+ kinemotion-0.10.2.dist-info/METADATA,sha256=Bz6wcXjnWQ2wx4B4BSLZOHi9pVKWIO82O06PKiAYKKc,20333
17
+ kinemotion-0.10.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
18
+ kinemotion-0.10.2.dist-info/entry_points.txt,sha256=zaqnAnjLvcdrk1Qvj5nvXZCZ2gp0prS7it1zTJygcIY,50
19
+ kinemotion-0.10.2.dist-info/licenses/LICENSE,sha256=KZajvqsHw0NoOHOi2q0FZ4NBe9HdV6oey-IPYAtHXfg,1088
20
+ kinemotion-0.10.2.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.27.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ kinemotion = kinemotion.cli:cli
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Drop-Jump Analysis Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.