mirror of
https://github.com/ruvnet/RuView
synced 2026-06-29 13:33:19 +00:00
b71d243b42
Three PyPI artifacts now live (published from .env-sourced PYPI_TOKEN via twine from the maintainer box — direct upload bypassed the GH Actions workflow auth churn): 1. wifi-densepose==1.99.0 — tombstone (raises ImportError with migration URL) https://pypi.org/project/wifi-densepose/1.99.0/ 2. wifi-densepose==2.0.0a1 — PyO3 wheel (win_amd64 cp310-abi3) + sdist https://pypi.org/project/wifi-densepose/2.0.0a1/ 3. ruview==2.0.0a1 — meta-package re-exporting wifi_densepose https://pypi.org/project/ruview/2.0.0a1/ New `python/ruview-meta/` subdirectory: - pyproject.toml — name="ruview", version="2.0.0a1", setuptools backend, dependencies = ["wifi-densepose==2.0.0a1"] - src/ruview/__init__.py — re-exports every name from `wifi_densepose.__all__` so `from ruview import BreathingExtractor` is equivalent to `from wifi_densepose import BreathingExtractor`. Also re-exports `__version__`, `__rust_version__`, `__rust_build_tag__`, `__build_features__`. Aliases the `client` sub-package transparently when wifi-densepose[client] extras are installed. - README.md — explains why two PyPI names ship the same code (brand vs technical name) and shows install commands for both. End-to-end verified: fresh venv, `pip install ruview`, `import ruview` + `import wifi_densepose` both succeed, `ruview.BreathingExtractor is wifi_densepose.BreathingExtractor` → True. Multi-platform wheels (manylinux x86_64+aarch64, macos x86_64+arm64) still pending — the cibuildwheel workflow path remains for that. Linux/macOS users today install via the sdist (requires rustup + maturin locally). Refs: docs/adr/ADR-117-pip-wifi-densepose-modernization.md Refs: #785 Co-Authored-By: claude-flow <ruv@ruv.net>
59 lines
1.9 KiB
Markdown
59 lines
1.9 KiB
Markdown
# ruview
|
|
|
|
**Ambient intelligence from WiFi CSI.** Detect human presence, count
|
|
people, read breathing and heart rate, and estimate skeletal pose —
|
|
using only the WiFi signal already in your home. No cameras. No
|
|
wearables. Works through walls and in the dark.
|
|
|
|
`ruview` is the brand-facing meta-package for the
|
|
[RuView](https://github.com/ruvnet/RuView) sensing stack. It installs
|
|
the compiled PyO3 wheel published as
|
|
[`wifi-densepose`](https://pypi.org/project/wifi-densepose/) and
|
|
re-exports its full API under the `ruview` namespace — so you can
|
|
write either of these and they do the same thing:
|
|
|
|
```python
|
|
from ruview import BreathingExtractor, SensingClient
|
|
from wifi_densepose import BreathingExtractor, SensingClient
|
|
```
|
|
|
|
## Install
|
|
|
|
```bash
|
|
pip install ruview # core DSP
|
|
pip install "ruview[client]" # + WebSocket/MQTT clients
|
|
```
|
|
|
|
## Usage
|
|
|
|
```python
|
|
from ruview import BreathingExtractor
|
|
|
|
br = BreathingExtractor.esp32_default() # 56 subcarriers @ 100 Hz, 30s window
|
|
for residuals, weights in csi_source:
|
|
est = br.extract(residuals=residuals, weights=weights)
|
|
if est is not None:
|
|
print(f"{est.value_bpm:.1f} BPM (confidence={est.confidence:.2f})")
|
|
```
|
|
|
|
Full API + WebSocket / MQTT / Home Assistant integration docs:
|
|
[wifi-densepose on PyPI](https://pypi.org/project/wifi-densepose/).
|
|
|
|
## Why two PyPI names?
|
|
|
|
Historic: `wifi-densepose` is the technical / academic name (the
|
|
project started as a WiFi-based DensePose implementation).
|
|
`ruview` is the brand the v2 ambient-intelligence platform ships
|
|
under. Both are the same code. You pick the import that reads
|
|
better in your project.
|
|
|
|
## Links
|
|
|
|
- **Repository** — https://github.com/ruvnet/RuView
|
|
- **Modernization plan** — [ADR-117](https://github.com/ruvnet/RuView/blob/main/docs/adr/ADR-117-pip-wifi-densepose-modernization.md)
|
|
- **Issues** — https://github.com/ruvnet/RuView/issues
|
|
|
|
## License
|
|
|
|
MIT.
|