kinemotion 0.16.0__tar.gz → 0.17.1__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.
- kinemotion-0.17.1/.github/workflows/test.yml +94 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/CHANGELOG.md +16 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/CLAUDE.md +23 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/PKG-INFO +1 -1
- {kinemotion-0.16.0 → kinemotion-0.17.1}/pyproject.toml +1 -1
- kinemotion-0.17.1/sonar-project.properties +42 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/uv.lock +1 -1
- {kinemotion-0.16.0 → kinemotion-0.17.1}/.dockerignore +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/.github/pull_request_template.md +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/.github/workflows/docs.yml +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/.github/workflows/release.yml +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/.gitignore +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/.pre-commit-config.yaml +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/.readthedocs.yml +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/.tool-versions +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/CODE_OF_CONDUCT.md +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/CONTRIBUTING.md +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/Dockerfile +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/GEMINI.md +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/LICENSE +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/README.md +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/SECURITY.md +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/README.md +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/api/cmj.md +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/api/core.md +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/api/dropjump.md +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/api/overview.md +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/development/errors-findings.md +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/development/validation-plan.md +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/development/wallball-norep-detection.md +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/guides/bulk-processing.md +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/guides/camera-setup.md +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/guides/cmj-guide.md +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/index.md +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/reference/parameters.md +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/reference/pose-systems.md +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/technical/framerate.md +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/technical/imu-metadata.md +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/technical/real-time-analysis.md +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/technical/triple-extension.md +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/translations/es/camera-setup.md +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/examples/bulk/README.md +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/examples/bulk/bulk_processing.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/examples/bulk/simple_example.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/examples/programmatic_usage.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/mkdocs.yml +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/requirements-docs.txt +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/samples/cmjs/README.md +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/__init__.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/api.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/cli.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/cmj/__init__.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/cmj/analysis.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/cmj/cli.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/cmj/debug_overlay.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/cmj/joint_angles.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/cmj/kinematics.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/core/__init__.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/core/auto_tuning.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/core/cli_utils.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/core/debug_overlay_utils.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/core/filtering.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/core/pose.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/core/smoothing.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/core/video_io.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/dropjump/__init__.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/dropjump/analysis.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/dropjump/cli.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/dropjump/debug_overlay.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/dropjump/kinematics.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/py.typed +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/tests/__init__.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/tests/test_adaptive_threshold.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/tests/test_api.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/tests/test_aspect_ratio.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/tests/test_cli_imports.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/tests/test_cmj_analysis.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/tests/test_cmj_kinematics.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/tests/test_com_estimation.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/tests/test_contact_detection.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/tests/test_filtering.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/tests/test_kinematics.py +0 -0
- {kinemotion-0.16.0 → kinemotion-0.17.1}/tests/test_polyorder.py +0 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
name: Test & Quality
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
pull_request:
|
|
8
|
+
branches:
|
|
9
|
+
- main
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
test:
|
|
13
|
+
name: Test (Python ${{ matrix.python-version }})
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
strategy:
|
|
16
|
+
fail-fast: false # Continue running other matrix jobs even if one fails
|
|
17
|
+
matrix:
|
|
18
|
+
python-version: ["3.10", "3.11", "3.12"]
|
|
19
|
+
|
|
20
|
+
steps:
|
|
21
|
+
- name: Checkout repository
|
|
22
|
+
uses: actions/checkout@v4
|
|
23
|
+
with:
|
|
24
|
+
fetch-depth: 0 # Shallow clones should be disabled for better SonarQube analysis
|
|
25
|
+
|
|
26
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
27
|
+
uses: actions/setup-python@v5
|
|
28
|
+
with:
|
|
29
|
+
python-version: ${{ matrix.python-version }}
|
|
30
|
+
|
|
31
|
+
- name: Install system dependencies
|
|
32
|
+
run: |
|
|
33
|
+
sudo apt-get update
|
|
34
|
+
sudo apt-get install -y \
|
|
35
|
+
libgl1-mesa-glx \
|
|
36
|
+
libglib2.0-0 \
|
|
37
|
+
libsm6 \
|
|
38
|
+
libxext6 \
|
|
39
|
+
libxrender-dev \
|
|
40
|
+
libgomp1 \
|
|
41
|
+
ffmpeg
|
|
42
|
+
|
|
43
|
+
- name: Set up uv
|
|
44
|
+
uses: astral-sh/setup-uv@v5
|
|
45
|
+
with:
|
|
46
|
+
version: "0.8.17"
|
|
47
|
+
|
|
48
|
+
- name: Install dependencies
|
|
49
|
+
run: uv sync
|
|
50
|
+
|
|
51
|
+
- name: Run linting
|
|
52
|
+
run: |
|
|
53
|
+
uv run ruff check --output-format=github
|
|
54
|
+
continue-on-error: true # Don't fail the build on linting errors
|
|
55
|
+
|
|
56
|
+
- name: Run type checking
|
|
57
|
+
run: |
|
|
58
|
+
uv run pyright
|
|
59
|
+
continue-on-error: true # Don't fail the build on type errors
|
|
60
|
+
|
|
61
|
+
- name: Run tests with coverage
|
|
62
|
+
run: |
|
|
63
|
+
uv run pytest --cov --cov-report=xml --cov-report=term
|
|
64
|
+
|
|
65
|
+
- name: Upload coverage artifact
|
|
66
|
+
if: matrix.python-version == '3.12'
|
|
67
|
+
uses: actions/upload-artifact@v4
|
|
68
|
+
with:
|
|
69
|
+
name: coverage-report
|
|
70
|
+
path: coverage.xml
|
|
71
|
+
retention-days: 5
|
|
72
|
+
|
|
73
|
+
sonarqube:
|
|
74
|
+
name: SonarQube Scan
|
|
75
|
+
needs: test
|
|
76
|
+
runs-on: ubuntu-latest
|
|
77
|
+
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository
|
|
78
|
+
|
|
79
|
+
steps:
|
|
80
|
+
- name: Checkout repository
|
|
81
|
+
uses: actions/checkout@v4
|
|
82
|
+
with:
|
|
83
|
+
fetch-depth: 0 # Disable shallow clone for better analysis
|
|
84
|
+
|
|
85
|
+
- name: Download coverage artifact
|
|
86
|
+
uses: actions/download-artifact@v4
|
|
87
|
+
with:
|
|
88
|
+
name: coverage-report
|
|
89
|
+
|
|
90
|
+
- name: SonarQube Scan
|
|
91
|
+
uses: SonarSource/sonarcloud-github-action@master
|
|
92
|
+
env:
|
|
93
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
94
|
+
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
|
@@ -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.17.1 (2025-11-10)
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
- **ci**: Add system dependencies for OpenCV and MediaPipe
|
|
15
|
+
([`bb48049`](https://github.com/feniix/kinemotion/commit/bb480498e04689c3deac443fdc162efe1c59e1e2))
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
## v0.17.0 (2025-11-10)
|
|
19
|
+
|
|
20
|
+
### Features
|
|
21
|
+
|
|
22
|
+
- **ci**: Add SonarQube Cloud integration for coverage reporting
|
|
23
|
+
([`cdc710f`](https://github.com/feniix/kinemotion/commit/cdc710f7a4c215e570eaa2b58a13f994ea7bae7c))
|
|
24
|
+
|
|
25
|
+
|
|
10
26
|
## v0.16.0 (2025-11-10)
|
|
11
27
|
|
|
12
28
|
|
|
@@ -29,6 +29,29 @@ uv run ruff check --fix && uv run pyright # Lint + type check
|
|
|
29
29
|
- HTML: `htmlcov/index.html` (open in browser)
|
|
30
30
|
- XML: `coverage.xml` (for CI integration)
|
|
31
31
|
|
|
32
|
+
**SonarQube Cloud Integration:**
|
|
33
|
+
|
|
34
|
+
The project integrates with SonarQube Cloud for continuous code quality and coverage tracking.
|
|
35
|
+
|
|
36
|
+
Setup (one-time):
|
|
37
|
+
1. Visit [SonarCloud](https://sonarcloud.io/) and sign in with GitHub
|
|
38
|
+
2. Import the `feniix/kinemotion` repository
|
|
39
|
+
3. Generate a token: My Account > Security > Generate Tokens
|
|
40
|
+
4. Add token to GitHub: Repository > Settings > Secrets and variables > Actions
|
|
41
|
+
- Name: `SONAR_TOKEN`
|
|
42
|
+
- Value: Your generated token
|
|
43
|
+
|
|
44
|
+
Configuration files:
|
|
45
|
+
- `sonar-project.properties` - SonarQube project configuration
|
|
46
|
+
- `.github/workflows/test.yml` - CI workflow with SonarQube scan
|
|
47
|
+
|
|
48
|
+
The workflow automatically:
|
|
49
|
+
- Runs tests with coverage on every PR and push to main
|
|
50
|
+
- Uploads coverage.xml to SonarQube Cloud
|
|
51
|
+
- Runs quality gate checks
|
|
52
|
+
|
|
53
|
+
View results: https://sonarcloud.io/project/overview?id=feniix_kinemotion
|
|
54
|
+
|
|
32
55
|
## Architecture
|
|
33
56
|
|
|
34
57
|
### Module Structure
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kinemotion
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.17.1
|
|
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
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Project identification
|
|
2
|
+
sonar.projectKey=feniix_kinemotion
|
|
3
|
+
sonar.projectName=Kinemotion
|
|
4
|
+
sonar.projectVersion=0.16.0
|
|
5
|
+
sonar.organization=feniix
|
|
6
|
+
|
|
7
|
+
# Project metadata
|
|
8
|
+
sonar.projectDescription=Video-based kinematic analysis for athletic performance using MediaPipe pose tracking
|
|
9
|
+
sonar.links.homepage=https://github.com/feniix/kinemotion
|
|
10
|
+
sonar.links.scm=https://github.com/feniix/kinemotion
|
|
11
|
+
sonar.links.issue=https://github.com/feniix/kinemotion/issues
|
|
12
|
+
sonar.links.ci=https://github.com/feniix/kinemotion/actions
|
|
13
|
+
|
|
14
|
+
# Source code
|
|
15
|
+
sonar.sources=src/kinemotion
|
|
16
|
+
sonar.tests=tests
|
|
17
|
+
|
|
18
|
+
# Python version
|
|
19
|
+
sonar.python.version=3.10, 3.11, 3.12
|
|
20
|
+
|
|
21
|
+
# Encoding
|
|
22
|
+
sonar.sourceEncoding=UTF-8
|
|
23
|
+
|
|
24
|
+
# Coverage report path (generated by pytest-cov)
|
|
25
|
+
sonar.python.coverage.reportPaths=coverage.xml
|
|
26
|
+
|
|
27
|
+
# Exclusions
|
|
28
|
+
sonar.exclusions=\
|
|
29
|
+
**/__pycache__/**,\
|
|
30
|
+
**/*.pyc,\
|
|
31
|
+
**/venv/**,\
|
|
32
|
+
**/.venv/**,\
|
|
33
|
+
**/htmlcov/**,\
|
|
34
|
+
**/dist/**,\
|
|
35
|
+
**/build/**,\
|
|
36
|
+
**/*.egg-info/**
|
|
37
|
+
|
|
38
|
+
# Test exclusions (don't analyze test files as production code)
|
|
39
|
+
sonar.test.inclusions=tests/**/*.py
|
|
40
|
+
|
|
41
|
+
# Coverage exclusions (already covered by sonar.tests)
|
|
42
|
+
sonar.coverage.exclusions=tests/**/*.py
|
|
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
|
{kinemotion-0.16.0 → kinemotion-0.17.1}/docs/research/sports-biomechanics-pose-estimation.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|