kinemotion 0.22.1__tar.gz → 0.24.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of kinemotion might be problematic. Click here for more details.

Files changed (93) hide show
  1. {kinemotion-0.22.1 → kinemotion-0.24.0}/CHANGELOG.md +16 -0
  2. {kinemotion-0.22.1 → kinemotion-0.24.0}/PKG-INFO +17 -7
  3. {kinemotion-0.22.1 → kinemotion-0.24.0}/README.md +16 -6
  4. {kinemotion-0.22.1 → kinemotion-0.24.0}/pyproject.toml +1 -1
  5. {kinemotion-0.22.1 → kinemotion-0.24.0}/src/kinemotion/dropjump/analysis.py +17 -7
  6. {kinemotion-0.22.1 → kinemotion-0.24.0}/uv.lock +1 -1
  7. {kinemotion-0.22.1 → kinemotion-0.24.0}/.dockerignore +0 -0
  8. {kinemotion-0.22.1 → kinemotion-0.24.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  9. {kinemotion-0.22.1 → kinemotion-0.24.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  10. {kinemotion-0.22.1 → kinemotion-0.24.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  11. {kinemotion-0.22.1 → kinemotion-0.24.0}/.github/pull_request_template.md +0 -0
  12. {kinemotion-0.22.1 → kinemotion-0.24.0}/.github/workflows/docs.yml +0 -0
  13. {kinemotion-0.22.1 → kinemotion-0.24.0}/.github/workflows/release.yml +0 -0
  14. {kinemotion-0.22.1 → kinemotion-0.24.0}/.github/workflows/test.yml +0 -0
  15. {kinemotion-0.22.1 → kinemotion-0.24.0}/.gitignore +0 -0
  16. {kinemotion-0.22.1 → kinemotion-0.24.0}/.pre-commit-config.yaml +0 -0
  17. {kinemotion-0.22.1 → kinemotion-0.24.0}/.readthedocs.yml +0 -0
  18. {kinemotion-0.22.1 → kinemotion-0.24.0}/.tool-versions +0 -0
  19. {kinemotion-0.22.1 → kinemotion-0.24.0}/CLAUDE.md +0 -0
  20. {kinemotion-0.22.1 → kinemotion-0.24.0}/CODE_OF_CONDUCT.md +0 -0
  21. {kinemotion-0.22.1 → kinemotion-0.24.0}/CONTRIBUTING.md +0 -0
  22. {kinemotion-0.22.1 → kinemotion-0.24.0}/Dockerfile +0 -0
  23. {kinemotion-0.22.1 → kinemotion-0.24.0}/GEMINI.md +0 -0
  24. {kinemotion-0.22.1 → kinemotion-0.24.0}/LICENSE +0 -0
  25. {kinemotion-0.22.1 → kinemotion-0.24.0}/SECURITY.md +0 -0
  26. {kinemotion-0.22.1 → kinemotion-0.24.0}/docs/README.md +0 -0
  27. {kinemotion-0.22.1 → kinemotion-0.24.0}/docs/api/cmj.md +0 -0
  28. {kinemotion-0.22.1 → kinemotion-0.24.0}/docs/api/core.md +0 -0
  29. {kinemotion-0.22.1 → kinemotion-0.24.0}/docs/api/dropjump.md +0 -0
  30. {kinemotion-0.22.1 → kinemotion-0.24.0}/docs/api/overview.md +0 -0
  31. {kinemotion-0.22.1 → kinemotion-0.24.0}/docs/development/errors-findings.md +0 -0
  32. {kinemotion-0.22.1 → kinemotion-0.24.0}/docs/development/testing.md +0 -0
  33. {kinemotion-0.22.1 → kinemotion-0.24.0}/docs/development/type-hints.md +0 -0
  34. {kinemotion-0.22.1 → kinemotion-0.24.0}/docs/development/validation-plan.md +0 -0
  35. {kinemotion-0.22.1 → kinemotion-0.24.0}/docs/development/wallball-norep-detection.md +0 -0
  36. {kinemotion-0.22.1 → kinemotion-0.24.0}/docs/guides/bulk-processing.md +0 -0
  37. {kinemotion-0.22.1 → kinemotion-0.24.0}/docs/guides/camera-setup.md +0 -0
  38. {kinemotion-0.22.1 → kinemotion-0.24.0}/docs/guides/cmj-guide.md +0 -0
  39. {kinemotion-0.22.1 → kinemotion-0.24.0}/docs/index.md +0 -0
  40. {kinemotion-0.22.1 → kinemotion-0.24.0}/docs/reference/parameters.md +0 -0
  41. {kinemotion-0.22.1 → kinemotion-0.24.0}/docs/reference/pose-systems.md +0 -0
  42. {kinemotion-0.22.1 → kinemotion-0.24.0}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
  43. {kinemotion-0.22.1 → kinemotion-0.24.0}/docs/technical/framerate.md +0 -0
  44. {kinemotion-0.22.1 → kinemotion-0.24.0}/docs/technical/implementation-details.md +0 -0
  45. {kinemotion-0.22.1 → kinemotion-0.24.0}/docs/technical/imu-metadata.md +0 -0
  46. {kinemotion-0.22.1 → kinemotion-0.24.0}/docs/technical/real-time-analysis.md +0 -0
  47. {kinemotion-0.22.1 → kinemotion-0.24.0}/docs/technical/triple-extension.md +0 -0
  48. {kinemotion-0.22.1 → kinemotion-0.24.0}/docs/translations/es/camera-setup.md +0 -0
  49. {kinemotion-0.22.1 → kinemotion-0.24.0}/examples/bulk/README.md +0 -0
  50. {kinemotion-0.22.1 → kinemotion-0.24.0}/examples/bulk/bulk_processing.py +0 -0
  51. {kinemotion-0.22.1 → kinemotion-0.24.0}/examples/bulk/simple_example.py +0 -0
  52. {kinemotion-0.22.1 → kinemotion-0.24.0}/examples/programmatic_usage.py +0 -0
  53. {kinemotion-0.22.1 → kinemotion-0.24.0}/mkdocs.yml +0 -0
  54. {kinemotion-0.22.1 → kinemotion-0.24.0}/requirements-docs.txt +0 -0
  55. {kinemotion-0.22.1 → kinemotion-0.24.0}/samples/cmjs/README.md +0 -0
  56. {kinemotion-0.22.1 → kinemotion-0.24.0}/sonar-project.properties +0 -0
  57. {kinemotion-0.22.1 → kinemotion-0.24.0}/src/kinemotion/__init__.py +0 -0
  58. {kinemotion-0.22.1 → kinemotion-0.24.0}/src/kinemotion/api.py +0 -0
  59. {kinemotion-0.22.1 → kinemotion-0.24.0}/src/kinemotion/cli.py +0 -0
  60. {kinemotion-0.22.1 → kinemotion-0.24.0}/src/kinemotion/cmj/__init__.py +0 -0
  61. {kinemotion-0.22.1 → kinemotion-0.24.0}/src/kinemotion/cmj/analysis.py +0 -0
  62. {kinemotion-0.22.1 → kinemotion-0.24.0}/src/kinemotion/cmj/cli.py +0 -0
  63. {kinemotion-0.22.1 → kinemotion-0.24.0}/src/kinemotion/cmj/debug_overlay.py +0 -0
  64. {kinemotion-0.22.1 → kinemotion-0.24.0}/src/kinemotion/cmj/joint_angles.py +0 -0
  65. {kinemotion-0.22.1 → kinemotion-0.24.0}/src/kinemotion/cmj/kinematics.py +0 -0
  66. {kinemotion-0.22.1 → kinemotion-0.24.0}/src/kinemotion/core/__init__.py +0 -0
  67. {kinemotion-0.22.1 → kinemotion-0.24.0}/src/kinemotion/core/auto_tuning.py +0 -0
  68. {kinemotion-0.22.1 → kinemotion-0.24.0}/src/kinemotion/core/cli_utils.py +0 -0
  69. {kinemotion-0.22.1 → kinemotion-0.24.0}/src/kinemotion/core/debug_overlay_utils.py +0 -0
  70. {kinemotion-0.22.1 → kinemotion-0.24.0}/src/kinemotion/core/filtering.py +0 -0
  71. {kinemotion-0.22.1 → kinemotion-0.24.0}/src/kinemotion/core/pose.py +0 -0
  72. {kinemotion-0.22.1 → kinemotion-0.24.0}/src/kinemotion/core/smoothing.py +0 -0
  73. {kinemotion-0.22.1 → kinemotion-0.24.0}/src/kinemotion/core/video_io.py +0 -0
  74. {kinemotion-0.22.1 → kinemotion-0.24.0}/src/kinemotion/dropjump/__init__.py +0 -0
  75. {kinemotion-0.22.1 → kinemotion-0.24.0}/src/kinemotion/dropjump/cli.py +0 -0
  76. {kinemotion-0.22.1 → kinemotion-0.24.0}/src/kinemotion/dropjump/debug_overlay.py +0 -0
  77. {kinemotion-0.22.1 → kinemotion-0.24.0}/src/kinemotion/dropjump/kinematics.py +0 -0
  78. {kinemotion-0.22.1 → kinemotion-0.24.0}/src/kinemotion/py.typed +0 -0
  79. {kinemotion-0.22.1 → kinemotion-0.24.0}/tests/__init__.py +0 -0
  80. {kinemotion-0.22.1 → kinemotion-0.24.0}/tests/test_adaptive_threshold.py +0 -0
  81. {kinemotion-0.22.1 → kinemotion-0.24.0}/tests/test_api.py +0 -0
  82. {kinemotion-0.22.1 → kinemotion-0.24.0}/tests/test_aspect_ratio.py +0 -0
  83. {kinemotion-0.22.1 → kinemotion-0.24.0}/tests/test_cli_cmj.py +0 -0
  84. {kinemotion-0.22.1 → kinemotion-0.24.0}/tests/test_cli_dropjump.py +0 -0
  85. {kinemotion-0.22.1 → kinemotion-0.24.0}/tests/test_cli_imports.py +0 -0
  86. {kinemotion-0.22.1 → kinemotion-0.24.0}/tests/test_cmj_analysis.py +0 -0
  87. {kinemotion-0.22.1 → kinemotion-0.24.0}/tests/test_cmj_kinematics.py +0 -0
  88. {kinemotion-0.22.1 → kinemotion-0.24.0}/tests/test_com_estimation.py +0 -0
  89. {kinemotion-0.22.1 → kinemotion-0.24.0}/tests/test_contact_detection.py +0 -0
  90. {kinemotion-0.22.1 → kinemotion-0.24.0}/tests/test_filtering.py +0 -0
  91. {kinemotion-0.22.1 → kinemotion-0.24.0}/tests/test_joint_angles.py +0 -0
  92. {kinemotion-0.22.1 → kinemotion-0.24.0}/tests/test_kinematics.py +0 -0
  93. {kinemotion-0.22.1 → kinemotion-0.24.0}/tests/test_polyorder.py +0 -0
@@ -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.24.0 (2025-11-11)
11
+
12
+ ### Features
13
+
14
+ - Document platform-specific system dependencies for Windows, macOS, and Linux
15
+ ([`928a6ad`](https://github.com/feniix/kinemotion/commit/928a6adbef18df77f5941ae0b2e82ba9d62a38b7))
16
+
17
+
18
+ ## v0.23.0 (2025-11-10)
19
+
20
+ ### Features
21
+
22
+ - Extract visibility calculation helper to improve code maintainability
23
+ ([`2839d6e`](https://github.com/feniix/kinemotion/commit/2839d6eca4b4f6ff8b6247501560939953282943))
24
+
25
+
10
26
  ## v0.22.1 (2025-11-10)
11
27
 
12
28
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kinemotion
3
- Version: 0.22.1
3
+ Version: 0.24.0
4
4
  Summary: Video-based kinematic analysis for athletic performance
5
5
  Project-URL: Homepage, https://github.com/feniix/kinemotion
6
6
  Project-URL: Repository, https://github.com/feniix/kinemotion
@@ -103,15 +103,24 @@ For clinical, research, or performance assessment requiring validated accuracy,
103
103
 
104
104
  #### Windows
105
105
 
106
- No additional system dependencies required.
106
+ **Required system dependencies:**
107
+
108
+ - [Microsoft Visual C++ 2022 Redistributable](https://visualstudio.microsoft.com/visual-cpp-build-tools/) - Runtime libraries for OpenCV/MediaPipe
109
+ - Python 3.10-3.12 (64-bit) - MediaPipe requires 64-bit Python
107
110
 
108
111
  **Recommended for mobile video support:**
109
112
 
110
- - [FFmpeg](https://ffmpeg.org/download.html) - Download and add to PATH
113
+ - [FFmpeg](https://ffmpeg.org/download.html) - Download and add to PATH for full video codec support
111
114
 
112
115
  #### macOS
113
116
 
114
- No additional system dependencies required.
117
+ **Required system dependencies:**
118
+
119
+ - Xcode Command Line Tools - Provides compilers and system frameworks
120
+
121
+ ```bash
122
+ xcode-select --install
123
+ ```
115
124
 
116
125
  **Recommended for mobile video support:**
117
126
 
@@ -126,9 +135,10 @@ brew install ffmpeg
126
135
  ```bash
127
136
  sudo apt-get update
128
137
  sudo apt-get install -y \
129
- libgl1-mesa-glx \
130
- libglib2.0-0 \
131
- ffmpeg
138
+ libgl1 \ # OpenGL library for OpenCV
139
+ libglib2.0-0 \ # GLib library for MediaPipe
140
+ libgomp1 \ # OpenMP library for multi-threading
141
+ ffmpeg # Video codec support and metadata extraction
132
142
  ```
133
143
 
134
144
  **Note:** `ffmpeg` provides the `ffprobe` tool for video metadata extraction (rotation, aspect ratio). Kinemotion works without it, but mobile/rotated videos may not process correctly. A warning will be shown if `ffprobe` is not available.
@@ -74,15 +74,24 @@ For clinical, research, or performance assessment requiring validated accuracy,
74
74
 
75
75
  #### Windows
76
76
 
77
- No additional system dependencies required.
77
+ **Required system dependencies:**
78
+
79
+ - [Microsoft Visual C++ 2022 Redistributable](https://visualstudio.microsoft.com/visual-cpp-build-tools/) - Runtime libraries for OpenCV/MediaPipe
80
+ - Python 3.10-3.12 (64-bit) - MediaPipe requires 64-bit Python
78
81
 
79
82
  **Recommended for mobile video support:**
80
83
 
81
- - [FFmpeg](https://ffmpeg.org/download.html) - Download and add to PATH
84
+ - [FFmpeg](https://ffmpeg.org/download.html) - Download and add to PATH for full video codec support
82
85
 
83
86
  #### macOS
84
87
 
85
- No additional system dependencies required.
88
+ **Required system dependencies:**
89
+
90
+ - Xcode Command Line Tools - Provides compilers and system frameworks
91
+
92
+ ```bash
93
+ xcode-select --install
94
+ ```
86
95
 
87
96
  **Recommended for mobile video support:**
88
97
 
@@ -97,9 +106,10 @@ brew install ffmpeg
97
106
  ```bash
98
107
  sudo apt-get update
99
108
  sudo apt-get install -y \
100
- libgl1-mesa-glx \
101
- libglib2.0-0 \
102
- ffmpeg
109
+ libgl1 \ # OpenGL library for OpenCV
110
+ libglib2.0-0 \ # GLib library for MediaPipe
111
+ libgomp1 \ # OpenMP library for multi-threading
112
+ ffmpeg # Video codec support and metadata extraction
103
113
  ```
104
114
 
105
115
  **Note:** `ffmpeg` provides the `ffprobe` tool for video metadata extraction (rotation, aspect ratio). Kinemotion works without it, but mobile/rotated videos may not process correctly. A warning will be shown if `ffprobe` is not available.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "kinemotion"
3
- version = "0.22.1"
3
+ version = "0.24.0"
4
4
  description = "Video-based kinematic analysis for athletic performance"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10,<3.13"
@@ -754,6 +754,22 @@ def compute_average_foot_position(
754
754
  return (float(np.mean(x_positions)), float(np.mean(y_positions)))
755
755
 
756
756
 
757
+ def _calculate_average_visibility(
758
+ frame_landmarks: dict[str, tuple[float, float, float]],
759
+ ) -> float:
760
+ """Calculate average visibility of foot landmarks in a frame.
761
+
762
+ Args:
763
+ frame_landmarks: Landmark dictionary for a single frame
764
+
765
+ Returns:
766
+ Average visibility of foot landmarks (0.0 if none visible)
767
+ """
768
+ foot_keys = ["left_ankle", "right_ankle", "left_heel", "right_heel"]
769
+ foot_vis = [frame_landmarks[key][2] for key in foot_keys if key in frame_landmarks]
770
+ return float(np.mean(foot_vis)) if foot_vis else 0.0
771
+
772
+
757
773
  def extract_foot_positions_and_visibilities(
758
774
  smoothed_landmarks: list[dict[str, tuple[float, float, float]] | None],
759
775
  ) -> tuple[np.ndarray, np.ndarray]:
@@ -775,13 +791,7 @@ def extract_foot_positions_and_visibilities(
775
791
  if frame_landmarks:
776
792
  _, foot_y = compute_average_foot_position(frame_landmarks)
777
793
  position_list.append(foot_y)
778
-
779
- # Average visibility of foot landmarks
780
- foot_vis = []
781
- for key in ["left_ankle", "right_ankle", "left_heel", "right_heel"]:
782
- if key in frame_landmarks:
783
- foot_vis.append(frame_landmarks[key][2])
784
- visibilities_list.append(float(np.mean(foot_vis)) if foot_vis else 0.0)
794
+ visibilities_list.append(_calculate_average_visibility(frame_landmarks))
785
795
  else:
786
796
  # Fill missing frames with last known position or default
787
797
  position_list.append(position_list[-1] if position_list else 0.5)
@@ -700,7 +700,7 @@ wheels = [
700
700
 
701
701
  [[package]]
702
702
  name = "kinemotion"
703
- version = "0.22.1"
703
+ version = "0.24.0"
704
704
  source = { editable = "." }
705
705
  dependencies = [
706
706
  { name = "click" },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes