imuops 0.3.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.
- imuops-0.3.1/.gitignore +18 -0
- imuops-0.3.1/LICENSE +22 -0
- imuops-0.3.1/PKG-INFO +162 -0
- imuops-0.3.1/README.md +126 -0
- imuops-0.3.1/datasets/manifest.toml +44 -0
- imuops-0.3.1/docs/architecture.md +71 -0
- imuops-0.3.1/docs/artifacts/trustscore_validation_summary.json +91 -0
- imuops-0.3.1/docs/datasets.md +118 -0
- imuops-0.3.1/docs/release.md +70 -0
- imuops-0.3.1/docs/schema_compatibility.md +29 -0
- imuops-0.3.1/docs/trustscore.md +77 -0
- imuops-0.3.1/docs/trustscore_validation.md +59 -0
- imuops-0.3.1/examples/run_corruption_demo.sh +23 -0
- imuops-0.3.1/examples/run_legacy_demo.sh +32 -0
- imuops-0.3.1/examples/run_tabular_demo.sh +15 -0
- imuops-0.3.1/examples/run_wisdm_demo.sh +20 -0
- imuops-0.3.1/examples/sample_tabular_config.yaml +34 -0
- imuops-0.3.1/examples/sample_tabular_imu.csv +201 -0
- imuops-0.3.1/examples/tabular_config.example.yaml +34 -0
- imuops-0.3.1/notebooks/imuops_sdk_demo.ipynb +69 -0
- imuops-0.3.1/pyproject.toml +80 -0
- imuops-0.3.1/scripts/fetch_oxiod_sample.py +39 -0
- imuops-0.3.1/scripts/fetch_ronin_sample.py +39 -0
- imuops-0.3.1/scripts/fetch_wisdm_sample.py +38 -0
- imuops-0.3.1/src/imuops/__init__.py +37 -0
- imuops-0.3.1/src/imuops/__main__.py +6 -0
- imuops-0.3.1/src/imuops/adapters/__init__.py +26 -0
- imuops-0.3.1/src/imuops/adapters/base.py +24 -0
- imuops-0.3.1/src/imuops/adapters/legacy_arduino.py +221 -0
- imuops-0.3.1/src/imuops/adapters/oxiod.py +127 -0
- imuops-0.3.1/src/imuops/adapters/ronin.py +108 -0
- imuops-0.3.1/src/imuops/adapters/tabular.py +321 -0
- imuops-0.3.1/src/imuops/adapters/wisdm.py +136 -0
- imuops-0.3.1/src/imuops/audit.py +325 -0
- imuops-0.3.1/src/imuops/batch.py +101 -0
- imuops-0.3.1/src/imuops/benchmark.py +173 -0
- imuops-0.3.1/src/imuops/cli.py +299 -0
- imuops-0.3.1/src/imuops/columns.py +47 -0
- imuops-0.3.1/src/imuops/compare.py +217 -0
- imuops-0.3.1/src/imuops/config/__init__.py +13 -0
- imuops-0.3.1/src/imuops/config/defaults.toml +81 -0
- imuops-0.3.1/src/imuops/contrib/__init__.py +5 -0
- imuops-0.3.1/src/imuops/contrib/legacy_arduino.py +5 -0
- imuops-0.3.1/src/imuops/corruption.py +77 -0
- imuops-0.3.1/src/imuops/exporting.py +124 -0
- imuops-0.3.1/src/imuops/models.py +123 -0
- imuops-0.3.1/src/imuops/replay/__init__.py +188 -0
- imuops-0.3.1/src/imuops/reporting/__init__.py +277 -0
- imuops-0.3.1/src/imuops/reporting/templates/report.html.j2 +148 -0
- imuops-0.3.1/src/imuops/session.py +72 -0
- imuops-0.3.1/src/imuops/utils.py +276 -0
- imuops-0.3.1/src/imuops/validation.py +74 -0
- imuops-0.3.1/tests/conftest.py +193 -0
- imuops-0.3.1/tests/test_audit.py +20 -0
- imuops-0.3.1/tests/test_benchmark.py +14 -0
- imuops-0.3.1/tests/test_cli_e2e.py +45 -0
- imuops-0.3.1/tests/test_corruption.py +15 -0
- imuops-0.3.1/tests/test_legacy_adapter.py +45 -0
- imuops-0.3.1/tests/test_ops_workflows.py +103 -0
- imuops-0.3.1/tests/test_public_adapters.py +78 -0
- imuops-0.3.1/tests/test_public_alpha.py +61 -0
- imuops-0.3.1/tests/test_replay.py +16 -0
- imuops-0.3.1/tests/test_report.py +29 -0
imuops-0.3.1/.gitignore
ADDED
imuops-0.3.1/LICENSE
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Boz Liu
|
|
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.
|
|
22
|
+
|
imuops-0.3.1/PKG-INFO
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: imuops
|
|
3
|
+
Version: 0.3.1
|
|
4
|
+
Summary: IMU data QA, reliability scoring, and reproducibility tooling
|
|
5
|
+
Author: Boz Liu
|
|
6
|
+
License: MIT
|
|
7
|
+
License-File: LICENSE
|
|
8
|
+
Keywords: benchmark,data-quality,har,imu,pdr,qa,sensor-fusion,wearable
|
|
9
|
+
Classifier: Development Status :: 3 - Alpha
|
|
10
|
+
Classifier: Intended Audience :: Developers
|
|
11
|
+
Classifier: Intended Audience :: Science/Research
|
|
12
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
16
|
+
Classifier: Topic :: Scientific/Engineering
|
|
17
|
+
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
18
|
+
Requires-Python: >=3.11
|
|
19
|
+
Requires-Dist: ahrs>=0.3.1
|
|
20
|
+
Requires-Dist: h5py>=3.11.0
|
|
21
|
+
Requires-Dist: jinja2>=3.1.4
|
|
22
|
+
Requires-Dist: numpy>=1.26.0
|
|
23
|
+
Requires-Dist: openpyxl>=3.1.0
|
|
24
|
+
Requires-Dist: pandas>=2.2.0
|
|
25
|
+
Requires-Dist: plotly>=5.24.1
|
|
26
|
+
Requires-Dist: pyarrow>=15.0.0
|
|
27
|
+
Requires-Dist: pydantic>=2.8.2
|
|
28
|
+
Requires-Dist: pyyaml>=6.0.2
|
|
29
|
+
Requires-Dist: requests>=2.32.0
|
|
30
|
+
Requires-Dist: scikit-learn>=1.5.2
|
|
31
|
+
Requires-Dist: typer>=0.12.0
|
|
32
|
+
Provides-Extra: dev
|
|
33
|
+
Requires-Dist: pytest-cov>=5.0.0; extra == 'dev'
|
|
34
|
+
Requires-Dist: pytest>=8.2.0; extra == 'dev'
|
|
35
|
+
Description-Content-Type: text/markdown
|
|
36
|
+
|
|
37
|
+
# imuops
|
|
38
|
+
|
|
39
|
+
`imuops` is a public alpha for **IMU data QA, reliability scoring, and reproducibility**.
|
|
40
|
+
|
|
41
|
+
It is built around one core question:
|
|
42
|
+
|
|
43
|
+
> Is this IMU data trustworthy, why is it failing, and how does that affect baseline algorithms?
|
|
44
|
+
|
|
45
|
+
The product is intentionally **tabular-first**. The main path is customer-shaped `csv`, `tsv`, or `parquet` data plus a small YAML mapping file. Benchmark adapters stay in the repo for reproducibility demos, but they are secondary to the tabular workflow.
|
|
46
|
+
|
|
47
|
+
## Status
|
|
48
|
+
|
|
49
|
+
- alpha / preview release
|
|
50
|
+
- main product path: `tabular`
|
|
51
|
+
- benchmark/demo adapters: `ronin`, `oxiod`, `wisdm`
|
|
52
|
+
- local-only contrib adapter: `legacy_arduino`
|
|
53
|
+
|
|
54
|
+
Benchmark adapters are validated on fixtures and demo flows. They are not guaranteed across every upstream packaging or layout variant.
|
|
55
|
+
|
|
56
|
+
## Install
|
|
57
|
+
|
|
58
|
+
Requires Python 3.11+.
|
|
59
|
+
|
|
60
|
+
Primary public path:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
python3.12 -m venv .venv
|
|
64
|
+
source .venv/bin/activate
|
|
65
|
+
pip install .
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Use any Python 3.11+ interpreter available on your machine.
|
|
69
|
+
|
|
70
|
+
Optional `uv` path:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
uv venv
|
|
74
|
+
source .venv/bin/activate
|
|
75
|
+
uv pip install .
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
`imuops` is prepared for PyPI publication, but this alpha does not claim a live PyPI package yet.
|
|
79
|
+
|
|
80
|
+
## Quickstart
|
|
81
|
+
|
|
82
|
+
After install, the offline first-run path is exactly three commands:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
imuops ingest tabular examples/sample_tabular_imu.csv --config examples/sample_tabular_config.yaml --out output/sample_tabular_demo
|
|
86
|
+
imuops audit output/sample_tabular_demo --summary-format markdown
|
|
87
|
+
imuops report output/sample_tabular_demo --out output/sample_tabular_demo/report.html
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
You can also use the bundled demo wrapper:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
bash examples/run_tabular_demo.sh
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## What It Does
|
|
97
|
+
|
|
98
|
+
- normalizes messy IMU tables into one canonical session format
|
|
99
|
+
- audits timing, clipping, dropout, magnetic disturbance, bias drift, and related issues
|
|
100
|
+
- computes a versioned `trust_score` with explicit penalties, weights, and thresholds
|
|
101
|
+
- replays conservative baseline algorithms for orientation and PDR reproducibility
|
|
102
|
+
- benchmarks task-aware baselines where labels or trajectories exist
|
|
103
|
+
- compares clean vs corrupted or before vs after sessions
|
|
104
|
+
- batches QA over many sessions and writes machine-readable summaries for CI use
|
|
105
|
+
|
|
106
|
+
## Core Commands
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
imuops ingest tabular /path/to/session.csv --config /path/to/mapping.yaml --out output/session_a
|
|
110
|
+
imuops audit output/session_a --fail-below 0.80 --summary-format markdown
|
|
111
|
+
imuops export output/session_a --profile qa_filtered --format parquet --out output/session_a_clean
|
|
112
|
+
imuops compare output/session_a output/session_b --out output/compare.html
|
|
113
|
+
imuops batch audit output --out output/batch_artifacts
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Included Adapters
|
|
117
|
+
|
|
118
|
+
### Market-facing default
|
|
119
|
+
|
|
120
|
+
- `tabular`: customer-shaped `csv`, `tsv`, and `parquet` sources with YAML mapping and unit conversion
|
|
121
|
+
|
|
122
|
+
### Benchmark/demo adapters
|
|
123
|
+
|
|
124
|
+
- `ronin`: clean inertial odometry benchmark sessions
|
|
125
|
+
- `oxiod`: clean handheld / phone inertial odometry benchmark sessions
|
|
126
|
+
- `wisdm`: lightweight HAR benchmark sessions
|
|
127
|
+
|
|
128
|
+
### Contrib/local regression
|
|
129
|
+
|
|
130
|
+
- `legacy_arduino`: historical Arduino/MPU9255 adapter kept only for local regression and examples
|
|
131
|
+
|
|
132
|
+
## Trust Score
|
|
133
|
+
|
|
134
|
+
`imuops` publishes the trust-score contract directly into artifacts and reports:
|
|
135
|
+
|
|
136
|
+
- per-window formula
|
|
137
|
+
- session aggregation formula
|
|
138
|
+
- penalty totals
|
|
139
|
+
- weight profile
|
|
140
|
+
- thresholds
|
|
141
|
+
|
|
142
|
+
That is documented in [docs/trustscore.md](docs/trustscore.md), and the current validation tranche is in [docs/trustscore_validation.md](docs/trustscore_validation.md).
|
|
143
|
+
|
|
144
|
+
## Docs
|
|
145
|
+
|
|
146
|
+
- [Architecture](docs/architecture.md)
|
|
147
|
+
- [Datasets](docs/datasets.md)
|
|
148
|
+
- [Trust Score](docs/trustscore.md)
|
|
149
|
+
- [Trust-Score Validation](docs/trustscore_validation.md)
|
|
150
|
+
- [Schema Compatibility](docs/schema_compatibility.md)
|
|
151
|
+
- [Release Checklist](docs/release.md)
|
|
152
|
+
- [Contributing](CONTRIBUTING.md)
|
|
153
|
+
|
|
154
|
+
## Public Alpha Notes
|
|
155
|
+
|
|
156
|
+
- This repo is a **truthful alpha**, not a commercial deployment claim.
|
|
157
|
+
- Reports support `--redact-source-path` and `--redact-subject-id` for safer sharing.
|
|
158
|
+
- Output quality is strongest for tabular customer data and fixture/demo benchmark layouts.
|
|
159
|
+
|
|
160
|
+
## License
|
|
161
|
+
|
|
162
|
+
[MIT](LICENSE)
|
imuops-0.3.1/README.md
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# imuops
|
|
2
|
+
|
|
3
|
+
`imuops` is a public alpha for **IMU data QA, reliability scoring, and reproducibility**.
|
|
4
|
+
|
|
5
|
+
It is built around one core question:
|
|
6
|
+
|
|
7
|
+
> Is this IMU data trustworthy, why is it failing, and how does that affect baseline algorithms?
|
|
8
|
+
|
|
9
|
+
The product is intentionally **tabular-first**. The main path is customer-shaped `csv`, `tsv`, or `parquet` data plus a small YAML mapping file. Benchmark adapters stay in the repo for reproducibility demos, but they are secondary to the tabular workflow.
|
|
10
|
+
|
|
11
|
+
## Status
|
|
12
|
+
|
|
13
|
+
- alpha / preview release
|
|
14
|
+
- main product path: `tabular`
|
|
15
|
+
- benchmark/demo adapters: `ronin`, `oxiod`, `wisdm`
|
|
16
|
+
- local-only contrib adapter: `legacy_arduino`
|
|
17
|
+
|
|
18
|
+
Benchmark adapters are validated on fixtures and demo flows. They are not guaranteed across every upstream packaging or layout variant.
|
|
19
|
+
|
|
20
|
+
## Install
|
|
21
|
+
|
|
22
|
+
Requires Python 3.11+.
|
|
23
|
+
|
|
24
|
+
Primary public path:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
python3.12 -m venv .venv
|
|
28
|
+
source .venv/bin/activate
|
|
29
|
+
pip install .
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Use any Python 3.11+ interpreter available on your machine.
|
|
33
|
+
|
|
34
|
+
Optional `uv` path:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
uv venv
|
|
38
|
+
source .venv/bin/activate
|
|
39
|
+
uv pip install .
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
`imuops` is prepared for PyPI publication, but this alpha does not claim a live PyPI package yet.
|
|
43
|
+
|
|
44
|
+
## Quickstart
|
|
45
|
+
|
|
46
|
+
After install, the offline first-run path is exactly three commands:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
imuops ingest tabular examples/sample_tabular_imu.csv --config examples/sample_tabular_config.yaml --out output/sample_tabular_demo
|
|
50
|
+
imuops audit output/sample_tabular_demo --summary-format markdown
|
|
51
|
+
imuops report output/sample_tabular_demo --out output/sample_tabular_demo/report.html
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
You can also use the bundled demo wrapper:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
bash examples/run_tabular_demo.sh
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## What It Does
|
|
61
|
+
|
|
62
|
+
- normalizes messy IMU tables into one canonical session format
|
|
63
|
+
- audits timing, clipping, dropout, magnetic disturbance, bias drift, and related issues
|
|
64
|
+
- computes a versioned `trust_score` with explicit penalties, weights, and thresholds
|
|
65
|
+
- replays conservative baseline algorithms for orientation and PDR reproducibility
|
|
66
|
+
- benchmarks task-aware baselines where labels or trajectories exist
|
|
67
|
+
- compares clean vs corrupted or before vs after sessions
|
|
68
|
+
- batches QA over many sessions and writes machine-readable summaries for CI use
|
|
69
|
+
|
|
70
|
+
## Core Commands
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
imuops ingest tabular /path/to/session.csv --config /path/to/mapping.yaml --out output/session_a
|
|
74
|
+
imuops audit output/session_a --fail-below 0.80 --summary-format markdown
|
|
75
|
+
imuops export output/session_a --profile qa_filtered --format parquet --out output/session_a_clean
|
|
76
|
+
imuops compare output/session_a output/session_b --out output/compare.html
|
|
77
|
+
imuops batch audit output --out output/batch_artifacts
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Included Adapters
|
|
81
|
+
|
|
82
|
+
### Market-facing default
|
|
83
|
+
|
|
84
|
+
- `tabular`: customer-shaped `csv`, `tsv`, and `parquet` sources with YAML mapping and unit conversion
|
|
85
|
+
|
|
86
|
+
### Benchmark/demo adapters
|
|
87
|
+
|
|
88
|
+
- `ronin`: clean inertial odometry benchmark sessions
|
|
89
|
+
- `oxiod`: clean handheld / phone inertial odometry benchmark sessions
|
|
90
|
+
- `wisdm`: lightweight HAR benchmark sessions
|
|
91
|
+
|
|
92
|
+
### Contrib/local regression
|
|
93
|
+
|
|
94
|
+
- `legacy_arduino`: historical Arduino/MPU9255 adapter kept only for local regression and examples
|
|
95
|
+
|
|
96
|
+
## Trust Score
|
|
97
|
+
|
|
98
|
+
`imuops` publishes the trust-score contract directly into artifacts and reports:
|
|
99
|
+
|
|
100
|
+
- per-window formula
|
|
101
|
+
- session aggregation formula
|
|
102
|
+
- penalty totals
|
|
103
|
+
- weight profile
|
|
104
|
+
- thresholds
|
|
105
|
+
|
|
106
|
+
That is documented in [docs/trustscore.md](docs/trustscore.md), and the current validation tranche is in [docs/trustscore_validation.md](docs/trustscore_validation.md).
|
|
107
|
+
|
|
108
|
+
## Docs
|
|
109
|
+
|
|
110
|
+
- [Architecture](docs/architecture.md)
|
|
111
|
+
- [Datasets](docs/datasets.md)
|
|
112
|
+
- [Trust Score](docs/trustscore.md)
|
|
113
|
+
- [Trust-Score Validation](docs/trustscore_validation.md)
|
|
114
|
+
- [Schema Compatibility](docs/schema_compatibility.md)
|
|
115
|
+
- [Release Checklist](docs/release.md)
|
|
116
|
+
- [Contributing](CONTRIBUTING.md)
|
|
117
|
+
|
|
118
|
+
## Public Alpha Notes
|
|
119
|
+
|
|
120
|
+
- This repo is a **truthful alpha**, not a commercial deployment claim.
|
|
121
|
+
- Reports support `--redact-source-path` and `--redact-subject-id` for safer sharing.
|
|
122
|
+
- Output quality is strongest for tabular customer data and fixture/demo benchmark layouts.
|
|
123
|
+
|
|
124
|
+
## License
|
|
125
|
+
|
|
126
|
+
[MIT](LICENSE)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
[tabular]
|
|
2
|
+
adapter = "tabular"
|
|
3
|
+
task = "orientation_or_pdr_or_har"
|
|
4
|
+
reference_type = "optional_labels_or_ground_truth"
|
|
5
|
+
description = "Primary config-driven adapter for customer-shaped CSV, TSV, and Parquet IMU data."
|
|
6
|
+
fetch_mode = "user_supplied"
|
|
7
|
+
body_location = "configurable"
|
|
8
|
+
device_pose = "configurable"
|
|
9
|
+
|
|
10
|
+
[legacy_arduino]
|
|
11
|
+
adapter = "legacy_arduino"
|
|
12
|
+
task = "pdr"
|
|
13
|
+
reference_type = "gps_optional"
|
|
14
|
+
description = "Experimental contrib adapter for historical Arduino and MPU9255 logs from the local workspace."
|
|
15
|
+
fetch_mode = "local_only"
|
|
16
|
+
body_location = "unknown"
|
|
17
|
+
device_pose = "arbitrary"
|
|
18
|
+
|
|
19
|
+
[ronin]
|
|
20
|
+
adapter = "ronin"
|
|
21
|
+
task = "pdr"
|
|
22
|
+
reference_type = "trajectory"
|
|
23
|
+
description = "RoNIN-style inertial odometry session directory."
|
|
24
|
+
fetch_script = "scripts/fetch_ronin_sample.py"
|
|
25
|
+
body_location = "body_unknown"
|
|
26
|
+
device_pose = "arbitrary"
|
|
27
|
+
|
|
28
|
+
[oxiod]
|
|
29
|
+
adapter = "oxiod"
|
|
30
|
+
task = "pdr"
|
|
31
|
+
reference_type = "trajectory"
|
|
32
|
+
description = "OxIOD IMU and visual-inertial ground-truth pair."
|
|
33
|
+
fetch_script = "scripts/fetch_oxiod_sample.py"
|
|
34
|
+
body_location = "handheld"
|
|
35
|
+
device_pose = "arbitrary"
|
|
36
|
+
|
|
37
|
+
[wisdm]
|
|
38
|
+
adapter = "wisdm"
|
|
39
|
+
task = "har"
|
|
40
|
+
reference_type = "activity_labels"
|
|
41
|
+
description = "WISDM-style accelerometer activity recognition trace."
|
|
42
|
+
fetch_script = "scripts/fetch_wisdm_sample.py"
|
|
43
|
+
body_location = "phone"
|
|
44
|
+
device_pose = "free_carry"
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Architecture
|
|
2
|
+
|
|
3
|
+
`imuops` keeps each adapter thin and pushes the rest of the system onto one canonical session format. The pipeline is task-aware, but the product is intentionally **tabular-first**: benchmark adapters remain useful for reproducibility demos, while the main public-alpha path is customer-shaped CSV, TSV, and Parquet plus YAML mapping.
|
|
4
|
+
|
|
5
|
+
## Core flow
|
|
6
|
+
|
|
7
|
+
1. Adapter ingests source files into:
|
|
8
|
+
- `session.json`
|
|
9
|
+
- `imu.parquet`
|
|
10
|
+
- `gps.parquet`
|
|
11
|
+
- `ground_truth.parquet`
|
|
12
|
+
2. Audit reads the canonical session and writes:
|
|
13
|
+
- `issues.json`
|
|
14
|
+
- `audit_summary.json`
|
|
15
|
+
- CI-friendly console summaries and exit codes
|
|
16
|
+
3. Replay reads the same session and writes one artifact pair per baseline:
|
|
17
|
+
- `replay_<baseline>.parquet`
|
|
18
|
+
- `replay_<baseline>_summary.json`
|
|
19
|
+
4. Benchmark runs task-aware baselines and writes:
|
|
20
|
+
- `benchmark_summary.json`
|
|
21
|
+
- `benchmark_<task>_<baseline>.json`
|
|
22
|
+
5. Corruption writes a second canonical session plus:
|
|
23
|
+
- `corruption.json`
|
|
24
|
+
6. Report combines the session, audit output, benchmark summaries, replay artifacts, and corruption context into a single HTML file.
|
|
25
|
+
|
|
26
|
+
## Canonical metadata
|
|
27
|
+
|
|
28
|
+
`session.json` is validated with `pydantic` and includes:
|
|
29
|
+
|
|
30
|
+
- `schema_version`
|
|
31
|
+
- `trustscore_version`
|
|
32
|
+
- `dataset`
|
|
33
|
+
- `session_id`
|
|
34
|
+
- `task`
|
|
35
|
+
- `reference_type`
|
|
36
|
+
- `nominal_hz`
|
|
37
|
+
- `body_location`
|
|
38
|
+
- `device_pose`
|
|
39
|
+
- `label_namespace`
|
|
40
|
+
- `sensors`
|
|
41
|
+
- `ground_truth_available`
|
|
42
|
+
- `labels_available`
|
|
43
|
+
|
|
44
|
+
This lets the report and benchmark layers stay generic even when the source datasets have very different conventions.
|
|
45
|
+
|
|
46
|
+
## Canonical units
|
|
47
|
+
|
|
48
|
+
- `t_ms`: milliseconds from session start
|
|
49
|
+
- accelerometer: `m/s^2`
|
|
50
|
+
- gyroscope: `rad/s`
|
|
51
|
+
- magnetometer: `uT`
|
|
52
|
+
- pressure: `Pa`
|
|
53
|
+
- temperature: `C`
|
|
54
|
+
|
|
55
|
+
## Supported tasks and baselines
|
|
56
|
+
|
|
57
|
+
- `orientation`: `madgwick`, `mahony`
|
|
58
|
+
- `pdr`: step-heading dead reckoning baseline
|
|
59
|
+
- `har`: fixed-window hand-crafted features + random forest baseline
|
|
60
|
+
|
|
61
|
+
The replay layer is deliberately conservative. It exists to make QA and benchmarking reproducible, not to claim novelty.
|
|
62
|
+
|
|
63
|
+
## Core adapters vs contrib adapters
|
|
64
|
+
|
|
65
|
+
- Core:
|
|
66
|
+
- `tabular`: CSV, TSV, and Parquet plus YAML mapping
|
|
67
|
+
- `ronin`, `oxiod`, `wisdm`: benchmark/demo adapters validated on fixtures and demo flows
|
|
68
|
+
- Contrib:
|
|
69
|
+
- `legacy_arduino`: historical Arduino/MPU9255 adapter kept for local regression only
|
|
70
|
+
|
|
71
|
+
The adapters intentionally stay tolerant enough for small local extracts and hand-curated samples, but only the `tabular` adapter is positioned as the default customer-data interface.
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
{
|
|
2
|
+
"all_non_improving": true,
|
|
3
|
+
"clean": {
|
|
4
|
+
"status": "pass",
|
|
5
|
+
"trust_score": 1.0
|
|
6
|
+
},
|
|
7
|
+
"presets": [
|
|
8
|
+
{
|
|
9
|
+
"baseline_metric_deltas": {
|
|
10
|
+
"benchmark_pdr_heading_drift_rad": 0.015089873124199377,
|
|
11
|
+
"benchmark_pdr_path_smoothness": 8.874562068890959e-07,
|
|
12
|
+
"benchmark_pdr_step_count": 0.0,
|
|
13
|
+
"benchmark_pdr_trajectory_rmse_m": 0.012373560291695895,
|
|
14
|
+
"replay_pdr_heading_drift_rad": 0.015089873124199377,
|
|
15
|
+
"replay_pdr_path_smoothness": 8.874562068890959e-07,
|
|
16
|
+
"replay_pdr_step_count": 0.0,
|
|
17
|
+
"replay_pdr_trajectory_rmse_m": 0.012373560291695895
|
|
18
|
+
},
|
|
19
|
+
"non_improving": true,
|
|
20
|
+
"preset": "packet_loss_5",
|
|
21
|
+
"trust_score": 0.5323465944828356,
|
|
22
|
+
"trust_score_delta": -0.4676534055171644
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"baseline_metric_deltas": {
|
|
26
|
+
"benchmark_pdr_heading_drift_rad": 0.0,
|
|
27
|
+
"benchmark_pdr_path_smoothness": 0.0,
|
|
28
|
+
"benchmark_pdr_step_count": 0.0,
|
|
29
|
+
"benchmark_pdr_trajectory_rmse_m": 0.0,
|
|
30
|
+
"replay_pdr_heading_drift_rad": 0.0,
|
|
31
|
+
"replay_pdr_path_smoothness": 0.0,
|
|
32
|
+
"replay_pdr_step_count": 0.0,
|
|
33
|
+
"replay_pdr_trajectory_rmse_m": 0.0
|
|
34
|
+
},
|
|
35
|
+
"non_improving": true,
|
|
36
|
+
"preset": "timestamp_jitter_3ms",
|
|
37
|
+
"trust_score": 1.0,
|
|
38
|
+
"trust_score_delta": 0.0
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"baseline_metric_deltas": {
|
|
42
|
+
"benchmark_pdr_heading_drift_rad": 2.809794459825378,
|
|
43
|
+
"benchmark_pdr_path_smoothness": -1.0951255003082612e-06,
|
|
44
|
+
"benchmark_pdr_step_count": 0.0,
|
|
45
|
+
"benchmark_pdr_trajectory_rmse_m": 0.0,
|
|
46
|
+
"replay_pdr_heading_drift_rad": 2.809794459825378,
|
|
47
|
+
"replay_pdr_path_smoothness": -1.0951255003082612e-06,
|
|
48
|
+
"replay_pdr_step_count": 0.0,
|
|
49
|
+
"replay_pdr_trajectory_rmse_m": 0.0
|
|
50
|
+
},
|
|
51
|
+
"non_improving": true,
|
|
52
|
+
"preset": "axis_flip_x",
|
|
53
|
+
"trust_score": 1.0,
|
|
54
|
+
"trust_score_delta": 0.0
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"baseline_metric_deltas": {
|
|
58
|
+
"benchmark_pdr_heading_drift_rad": -0.028779030258548888,
|
|
59
|
+
"benchmark_pdr_path_smoothness": 6.97476635826116e-07,
|
|
60
|
+
"benchmark_pdr_step_count": 0.0,
|
|
61
|
+
"benchmark_pdr_trajectory_rmse_m": 0.0,
|
|
62
|
+
"replay_pdr_heading_drift_rad": -0.028779030258548888,
|
|
63
|
+
"replay_pdr_path_smoothness": 6.97476635826116e-07,
|
|
64
|
+
"replay_pdr_step_count": 0.0,
|
|
65
|
+
"replay_pdr_trajectory_rmse_m": 0.0
|
|
66
|
+
},
|
|
67
|
+
"non_improving": true,
|
|
68
|
+
"preset": "gyro_bias_small",
|
|
69
|
+
"trust_score": 1.0,
|
|
70
|
+
"trust_score_delta": 0.0
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"baseline_metric_deltas": {
|
|
74
|
+
"benchmark_pdr_heading_drift_rad": -0.1593284368719841,
|
|
75
|
+
"benchmark_pdr_path_smoothness": -7.053313986061677e-07,
|
|
76
|
+
"benchmark_pdr_step_count": 0.0,
|
|
77
|
+
"benchmark_pdr_trajectory_rmse_m": 0.0,
|
|
78
|
+
"replay_pdr_heading_drift_rad": -0.1593284368719841,
|
|
79
|
+
"replay_pdr_path_smoothness": -7.053313986061677e-07,
|
|
80
|
+
"replay_pdr_step_count": 0.0,
|
|
81
|
+
"replay_pdr_trajectory_rmse_m": 0.0
|
|
82
|
+
},
|
|
83
|
+
"non_improving": true,
|
|
84
|
+
"preset": "mag_bias_30ut",
|
|
85
|
+
"trust_score": 1.0,
|
|
86
|
+
"trust_score_delta": 0.0
|
|
87
|
+
}
|
|
88
|
+
],
|
|
89
|
+
"session_id": "sample_tabular_session",
|
|
90
|
+
"task": "pdr"
|
|
91
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# Datasets
|
|
2
|
+
|
|
3
|
+
`imuops` is designed to mix customer-shaped tabular IMU data with benchmark sessions. In this public alpha, the default product entrypoint is the config-driven `tabular` adapter.
|
|
4
|
+
|
|
5
|
+
## Adapter Matrix
|
|
6
|
+
|
|
7
|
+
| Adapter | Task | Expected source | Reference | Notes |
|
|
8
|
+
| --- | --- | --- | --- | --- |
|
|
9
|
+
| `tabular` | `orientation` / `pdr` / `har` | `csv`, `tsv`, or `parquet` plus YAML config | optional labels / ground truth | Main customer-data path |
|
|
10
|
+
| `ronin` | `pdr` | `info.json` + `data.hdf5` session dir | trajectory | Benchmark/demo adapter validated on fixtures and demo flows |
|
|
11
|
+
| `oxiod` | `pdr` | `imu*.csv` file with matching `vi*.csv` | trajectory | Benchmark/demo adapter validated on fixtures and demo flows |
|
|
12
|
+
| `wisdm` | `har` | WISDM-style `txt` or `csv` | activity labels | Benchmark/demo adapter validated on fixtures and demo flows |
|
|
13
|
+
|
|
14
|
+
The machine-readable source registry lives in [datasets/manifest.toml](../datasets/manifest.toml).
|
|
15
|
+
|
|
16
|
+
## Tabular Customer Data
|
|
17
|
+
|
|
18
|
+
The recommended public workflow is a tabular file plus a YAML mapping file. The repo bundles a small offline sample in [examples/sample_tabular_imu.csv](../examples/sample_tabular_imu.csv) and [examples/sample_tabular_config.yaml](../examples/sample_tabular_config.yaml).
|
|
19
|
+
|
|
20
|
+
The first public-alpha path is:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
imuops ingest tabular examples/sample_tabular_imu.csv --config examples/sample_tabular_config.yaml --out output/sample_tabular_demo
|
|
24
|
+
imuops audit output/sample_tabular_demo --summary-format markdown
|
|
25
|
+
imuops report output/sample_tabular_demo --out output/sample_tabular_demo/report.html
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
The YAML mapping controls:
|
|
29
|
+
|
|
30
|
+
- timestamp column and time unit
|
|
31
|
+
- accel / gyro / mag column names and units
|
|
32
|
+
- optional temperature, pressure, and label columns
|
|
33
|
+
- optional ground-truth position and heading columns
|
|
34
|
+
- metadata such as task, body location, and device pose
|
|
35
|
+
|
|
36
|
+
## Contrib / Local Regression
|
|
37
|
+
|
|
38
|
+
The legacy adapter is intentionally non-core and intentionally local:
|
|
39
|
+
|
|
40
|
+
- it is available via `imuops.contrib`
|
|
41
|
+
- it is not part of the public quickstart
|
|
42
|
+
- it is useful only for local regression on the historical workspace
|
|
43
|
+
|
|
44
|
+
You can verify that it is present with:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
python -c "from imuops.contrib import LegacyArduinoAdapter; print(LegacyArduinoAdapter.name)"
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Public Sample Fetch Helpers
|
|
51
|
+
|
|
52
|
+
The fetch scripts do not vendor datasets into the repo. They either download a public archive you specify or unpack a local archive you already obtained.
|
|
53
|
+
|
|
54
|
+
## Privacy and Sharing Notes
|
|
55
|
+
|
|
56
|
+
- benchmark fetch helpers assume the user is responsible for dataset license compliance
|
|
57
|
+
- `session.json` may contain `source_path` and `subject_id`
|
|
58
|
+
- shared reports should typically be generated with `--redact-source-path --redact-subject-id`
|
|
59
|
+
|
|
60
|
+
### RoNIN
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
python scripts/fetch_ronin_sample.py --zip-path /path/to/ronin_sample.zip --out downloads/ronin
|
|
64
|
+
imuops ingest ronin downloads/ronin/<session_dir> --out output/ronin_demo
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### OxIOD
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
python scripts/fetch_oxiod_sample.py --zip-path /path/to/oxiod_sample.zip --out downloads/oxiod
|
|
71
|
+
imuops ingest oxiod downloads/oxiod/<session_dir>/imu1.csv --out output/oxiod_demo
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### WISDM
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
python scripts/fetch_wisdm_sample.py --zip-path /path/to/wisdm_sample.zip --out downloads/wisdm
|
|
78
|
+
imuops ingest wisdm downloads/wisdm/WISDM_ar_v1.1_raw.txt --out output/wisdm_demo
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Demo Commands
|
|
82
|
+
|
|
83
|
+
### Customer-shaped tabular data
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
imuops ingest tabular /path/to/customer_session.csv --config examples/tabular_config.example.yaml --out output/customer_session
|
|
87
|
+
imuops audit output/customer_session --fail-below 0.80
|
|
88
|
+
imuops export output/customer_session --profile qa_filtered --format parquet --out output/customer_session_clean
|
|
89
|
+
imuops report output/customer_session --out output/customer_session/report.html
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Clean navigation
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
imuops audit output/ronin_demo
|
|
96
|
+
imuops replay output/ronin_demo --baseline madgwick
|
|
97
|
+
imuops benchmark output/ronin_demo --task orientation
|
|
98
|
+
imuops report output/ronin_demo --out output/ronin_demo/report.html
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Clean HAR
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
imuops audit output/wisdm_demo
|
|
105
|
+
imuops benchmark output/wisdm_demo --task har
|
|
106
|
+
imuops report output/wisdm_demo --out output/wisdm_demo/report.html
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Robustness regression
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
imuops corrupt output/ronin_demo --preset packet_loss_5 --out output/ronin_demo_packet_loss
|
|
113
|
+
imuops audit output/ronin_demo_packet_loss
|
|
114
|
+
imuops report output/ronin_demo_packet_loss --out output/ronin_demo_packet_loss/report.html
|
|
115
|
+
imuops compare output/ronin_demo output/ronin_demo_packet_loss --out output/ronin_compare.html
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Benchmark adapters are useful for demos and reproducibility, but they are secondary to the tabular customer-data path.
|