kinemotion 0.10.7__tar.gz → 0.10.8__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.10.7 → kinemotion-0.10.8}/CHANGELOG.md +8 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/PKG-INFO +1 -1
- {kinemotion-0.10.7 → kinemotion-0.10.8}/pyproject.toml +1 -1
- {kinemotion-0.10.7 → kinemotion-0.10.8}/src/kinemotion/dropjump/cli.py +19 -83
- {kinemotion-0.10.7 → kinemotion-0.10.8}/uv.lock +1 -1
- {kinemotion-0.10.7 → kinemotion-0.10.8}/.dockerignore +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/.github/pull_request_template.md +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/.github/workflows/release.yml +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/.gitignore +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/.pre-commit-config.yaml +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/.tool-versions +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/CLAUDE.md +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/CODE_OF_CONDUCT.md +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/CONTRIBUTING.md +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/Dockerfile +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/GEMINI.md +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/LICENSE +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/README.md +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/SECURITY.md +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/docs/BULK_PROCESSING.md +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/docs/ERRORS_FINDINGS.md +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/docs/FRAMERATE.md +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/docs/IMU_METADATA_PRESERVATION.md +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/docs/PARAMETERS.md +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/docs/VALIDATION_PLAN.md +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/examples/bulk/README.md +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/examples/bulk/bulk_processing.py +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/examples/bulk/simple_example.py +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/examples/programmatic_usage.py +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/src/kinemotion/__init__.py +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/src/kinemotion/api.py +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/src/kinemotion/cli.py +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/src/kinemotion/core/__init__.py +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/src/kinemotion/core/auto_tuning.py +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/src/kinemotion/core/filtering.py +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/src/kinemotion/core/pose.py +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/src/kinemotion/core/smoothing.py +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/src/kinemotion/core/video_io.py +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/src/kinemotion/dropjump/__init__.py +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/src/kinemotion/dropjump/analysis.py +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/src/kinemotion/dropjump/debug_overlay.py +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/src/kinemotion/dropjump/kinematics.py +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/src/kinemotion/py.typed +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/tests/__init__.py +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/tests/test_adaptive_threshold.py +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/tests/test_api.py +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/tests/test_aspect_ratio.py +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/tests/test_com_estimation.py +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/tests/test_contact_detection.py +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/tests/test_filtering.py +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/tests/test_kinematics.py +0 -0
- {kinemotion-0.10.7 → kinemotion-0.10.8}/tests/test_polyorder.py +0 -0
|
@@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
<!-- version list -->
|
|
9
9
|
|
|
10
|
+
## v0.10.8 (2025-11-03)
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
- **cli**: Suppress S107 for Click CLI framework requirement
|
|
15
|
+
([`17c8335`](https://github.com/feniix/kinemotion/commit/17c83357334ca7d400fe41d802c9e5e61a995fff))
|
|
16
|
+
|
|
17
|
+
|
|
10
18
|
## v0.10.7 (2025-11-03)
|
|
11
19
|
|
|
12
20
|
### Bug Fixes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kinemotion
|
|
3
|
-
Version: 0.10.
|
|
3
|
+
Version: 0.10.8
|
|
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
|
|
@@ -46,25 +46,6 @@ class AnalysisParameters:
|
|
|
46
46
|
tracking_confidence: float | None = None
|
|
47
47
|
|
|
48
48
|
|
|
49
|
-
@dataclass
|
|
50
|
-
class BatchOptions:
|
|
51
|
-
"""Batch processing configuration."""
|
|
52
|
-
|
|
53
|
-
batch: bool
|
|
54
|
-
workers: int
|
|
55
|
-
output_dir: str | None
|
|
56
|
-
json_output_dir: str | None
|
|
57
|
-
csv_summary: str | None
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
@dataclass
|
|
61
|
-
class OutputOptions:
|
|
62
|
-
"""Output configuration for single video processing."""
|
|
63
|
-
|
|
64
|
-
output: str | None
|
|
65
|
-
json_output: str | None
|
|
66
|
-
|
|
67
|
-
|
|
68
49
|
@click.command(name="dropjump-analyze")
|
|
69
50
|
@click.argument("video_path", nargs=-1, type=click.Path(exists=False), required=True)
|
|
70
51
|
@click.option(
|
|
@@ -177,7 +158,7 @@ class OutputOptions:
|
|
|
177
158
|
default=None,
|
|
178
159
|
help="[EXPERT] Override pose tracking confidence",
|
|
179
160
|
)
|
|
180
|
-
def dropjump_analyze(
|
|
161
|
+
def dropjump_analyze( # NOSONAR(S107) - Click CLI requires individual parameters for each option
|
|
181
162
|
video_path: tuple[str, ...],
|
|
182
163
|
output: str | None,
|
|
183
164
|
json_output: str | None,
|
|
@@ -221,62 +202,6 @@ def dropjump_analyze(
|
|
|
221
202
|
kinemotion dropjump-analyze videos/*.mp4 --batch --drop-height 0.40 \\
|
|
222
203
|
--json-output-dir results/ --csv-summary summary.csv
|
|
223
204
|
"""
|
|
224
|
-
# Group parameters into dataclasses
|
|
225
|
-
batch_opts = BatchOptions(
|
|
226
|
-
batch=batch,
|
|
227
|
-
workers=workers,
|
|
228
|
-
output_dir=output_dir,
|
|
229
|
-
json_output_dir=json_output_dir,
|
|
230
|
-
csv_summary=csv_summary,
|
|
231
|
-
)
|
|
232
|
-
|
|
233
|
-
output_opts = OutputOptions(
|
|
234
|
-
output=output,
|
|
235
|
-
json_output=json_output,
|
|
236
|
-
)
|
|
237
|
-
|
|
238
|
-
expert_params = AnalysisParameters(
|
|
239
|
-
drop_start_frame=drop_start_frame,
|
|
240
|
-
smoothing_window=smoothing_window,
|
|
241
|
-
velocity_threshold=velocity_threshold,
|
|
242
|
-
min_contact_frames=min_contact_frames,
|
|
243
|
-
visibility_threshold=visibility_threshold,
|
|
244
|
-
detection_confidence=detection_confidence,
|
|
245
|
-
tracking_confidence=tracking_confidence,
|
|
246
|
-
)
|
|
247
|
-
|
|
248
|
-
# Execute analysis with grouped parameters
|
|
249
|
-
_execute_analysis(
|
|
250
|
-
video_path,
|
|
251
|
-
drop_height,
|
|
252
|
-
quality,
|
|
253
|
-
verbose,
|
|
254
|
-
batch_opts,
|
|
255
|
-
output_opts,
|
|
256
|
-
expert_params,
|
|
257
|
-
)
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
def _execute_analysis(
|
|
261
|
-
video_path: tuple[str, ...],
|
|
262
|
-
drop_height: float,
|
|
263
|
-
quality: str,
|
|
264
|
-
verbose: bool,
|
|
265
|
-
batch_opts: BatchOptions,
|
|
266
|
-
output_opts: OutputOptions,
|
|
267
|
-
expert_params: AnalysisParameters,
|
|
268
|
-
) -> None:
|
|
269
|
-
"""Execute drop jump analysis with grouped parameters.
|
|
270
|
-
|
|
271
|
-
Args:
|
|
272
|
-
video_path: Tuple of video path patterns
|
|
273
|
-
drop_height: Drop height in meters
|
|
274
|
-
quality: Quality preset string
|
|
275
|
-
verbose: Verbose output flag
|
|
276
|
-
batch_opts: Batch processing options
|
|
277
|
-
output_opts: Output file options
|
|
278
|
-
expert_params: Expert parameter overrides
|
|
279
|
-
"""
|
|
280
205
|
# Expand glob patterns and collect all video files
|
|
281
206
|
video_files: list[str] = []
|
|
282
207
|
for pattern in video_path:
|
|
@@ -294,25 +219,36 @@ def _execute_analysis(
|
|
|
294
219
|
sys.exit(1)
|
|
295
220
|
|
|
296
221
|
# Determine if batch mode should be used
|
|
297
|
-
use_batch =
|
|
222
|
+
use_batch = batch or len(video_files) > 1
|
|
223
|
+
|
|
224
|
+
# Group expert parameters
|
|
225
|
+
expert_params = AnalysisParameters(
|
|
226
|
+
drop_start_frame=drop_start_frame,
|
|
227
|
+
smoothing_window=smoothing_window,
|
|
228
|
+
velocity_threshold=velocity_threshold,
|
|
229
|
+
min_contact_frames=min_contact_frames,
|
|
230
|
+
visibility_threshold=visibility_threshold,
|
|
231
|
+
detection_confidence=detection_confidence,
|
|
232
|
+
tracking_confidence=tracking_confidence,
|
|
233
|
+
)
|
|
298
234
|
|
|
299
235
|
if use_batch:
|
|
300
236
|
_process_batch(
|
|
301
237
|
video_files,
|
|
302
238
|
drop_height,
|
|
303
239
|
quality,
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
240
|
+
workers,
|
|
241
|
+
output_dir,
|
|
242
|
+
json_output_dir,
|
|
243
|
+
csv_summary,
|
|
308
244
|
expert_params,
|
|
309
245
|
)
|
|
310
246
|
else:
|
|
311
247
|
# Single video mode (original behavior)
|
|
312
248
|
_process_single(
|
|
313
249
|
video_files[0],
|
|
314
|
-
|
|
315
|
-
|
|
250
|
+
output,
|
|
251
|
+
json_output,
|
|
316
252
|
drop_height,
|
|
317
253
|
quality,
|
|
318
254
|
verbose,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|