You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
See through walls with WiFi. No cameras. No wearables. Just radio waves.
WiFi DensePose turns commodity WiFi signals into real-time human pose estimation, vital sign monitoring, and presence detection — all without a single pixel of video. By analyzing Channel State Information (CSI) disturbances caused by human movement, the system reconstructs body position, breathing rate, and heartbeat using physics-based signal processing and machine learning.
# 30 seconds to live sensing — no toolchain required
docker pull ruvnet/wifi-densepose:latest
docker run -p 3000:3000 ruvnet/wifi-densepose:latest
# Open http://localhost:3000
Hardware options for live CSI capture:
Option
Hardware
Cost
Capabilities
ESP32 Mesh (recommended)
3-6x ESP32-S3 + WiFi router
~$54
Presence, motion, breathing, heartbeat
Research NIC
Intel 5300 / Atheros AR9580
~$50-100
Full CSI with 3x3 MIMO
Any WiFi
Windows/Linux laptop
$0
RSSI-based presence and motion
No hardware? Verify the pipeline with the deterministic reference signal: python v1/data/proof/verify.py
📦 RVF Model Container — Single-file deployment with progressive loading
Property
Detail
Format
Segment-based binary (magic 0x52564653) with 64-byte headers
Progressive Loading
Layer A <5ms, Layer B 100ms-1s, Layer C full graph
Signing
Ed25519 training proofs for verifiable provenance
Quantization
f32/f16/u8 via rvf-quant with SIMD distance
CLI
--export-rvf, --save-rvf, --load-rvf, --model
# Export model package
./target/release/sensing-server --export-rvf wifi-densepose-v1.rvf
# Load and run with progressive loading
./target/release/sensing-server --model wifi-densepose-v1.rvf --progressive
Profile recommendation — picks the best profile for your hardware
Dependency installation — installs what's missing
Build — compiles the selected profile
Summary — shows next steps and verification commands
Install Profiles
Profile
What it installs
Size
Requirements
verify
Pipeline verification only
~5 MB
Python 3.8+
python
Full Python API server + sensing
~500 MB
Python 3.8+
rust
Rust pipeline (~810x faster)
~200 MB
Rust 1.70+
browser
WASM for in-browser execution
~10 MB
Rust + wasm-pack
iot
ESP32 sensor mesh + aggregator
varies
Rust + ESP-IDF
docker
Docker-based deployment
~1 GB
Docker
field
WiFi-Mat disaster response kit
~62 MB
Rust + wasm-pack
full
Everything available
~2 GB
All toolchains
Non-Interactive Install
# Install a specific profile without prompts
./install.sh --profile rust --yes
# Just run hardware detection (no install)
./install.sh --check-only
# Or use make targets
make install # Interactive
make install-verify # Verification only
make install-python # Python pipeline
make install-rust # Rust pipeline
make install-browser # WASM browser build
make install-docker # Docker deployment
make install-field # Disaster response kit
make install-full # Everything
make check # Hardware check only
From Source (Rust — Primary)
git clone https://github.com/ruvnet/wifi-densepose.git
cd wifi-densepose
# Install Rust pipeline (810x faster than Python)
./install.sh --profile rust --yes
# Or manually:cd rust-port/wifi-densepose-rs
cargo build --release
cargo test --workspace
pip install wifi-densepose
# With optional dependencies
pip install wifi-densepose[gpu] # For GPU acceleration
pip install wifi-densepose[all] # All optional dependencies
Using Docker
Pre-built images are published on Docker Hub:
# Rust sensing server (132 MB — recommended)
docker pull ruvnet/wifi-densepose:latest
docker run -p 3000:3000 -p 3001:3001 -p 5005:5005/udp ruvnet/wifi-densepose:latest
# Python sensing pipeline (569 MB)
docker pull ruvnet/wifi-densepose:python
docker run -p 8765:8765 -p 8080:8080 ruvnet/wifi-densepose:python
# Or use docker-compose for bothcd docker && docker compose up
Image
Tag
Size
Ports
ruvnet/wifi-densepose
latest, rust
132 MB
3000 (REST), 3001 (WS), 5005/udp (ESP32)
ruvnet/wifi-densepose
python
569 MB
8765 (WS), 8080 (UI)
Export RVF model package:
docker run --rm -v $(pwd):/out ruvnet/wifi-densepose:latest --export-rvf /out/wifi-densepose-v1.rvf
System Requirements
Rust: 1.70+ (primary runtime — install via rustup)
Python: 3.8+ (for verification and legacy v1 API)
Operating System: Linux (Ubuntu 18.04+), macOS (10.15+), Windows 10+
Memory: Minimum 4GB RAM, Recommended 8GB+
Storage: 2GB free space for models and data
Network: WiFi interface with CSI capability (optional — installer detects what you have)
GPU: Optional (NVIDIA CUDA or Apple Metal)
🚀 Quick Start — First API call in 3 commands
1. Basic Setup
# Install the package (Rust — recommended)
./install.sh --profile rust --yes
# Or Python legacy
pip install wifi-densepose
# Copy example configuration
cp example.env .env
# Edit configuration (set your WiFi interface)
nano .env
2. Start the System
fromwifi_denseposeimportWiFiDensePose# Initialize with default configurationsystem=WiFiDensePose()
# Start pose estimationsystem.start()
# Get latest pose dataposes=system.get_latest_poses()
print(f"Detected {len(poses)} persons")
# Stop the systemsystem.stop()
3. Using the REST API
# Start the API server
wifi-densepose start
# Start with custom configuration
wifi-densepose -c /path/to/config.yaml start
# Start with verbose logging
wifi-densepose -v start
# Check server status
wifi-densepose status
The API will be available at http://localhost:8000
importasyncioimportwebsocketsimportjsonasyncdefstream_poses():
uri="ws://localhost:8000/ws/pose/stream"asyncwithwebsockets.connect(uri) aswebsocket:
whileTrue:
data=awaitwebsocket.recv()
poses=json.loads(data)
print(f"Received poses: {len(poses['persons'])} persons detected")
# Run the streaming clientasyncio.run(stream_poses())
🖥️ CLI Usage — Server management, Rust sensing server flags
Rust Sensing Server (Primary)
# Start with simulated data (no hardware)
./target/release/sensing-server --source simulate --ui-path ../../ui
# Start with ESP32 CSI hardware
./target/release/sensing-server --source esp32 --udp-port 5005
# Start with Windows WiFi RSSI
./target/release/sensing-server --source wifi
# Run vital sign benchmark
./target/release/sensing-server --benchmark
# Export RVF model package
./target/release/sensing-server --export-rvf model.rvf
# Train a model
./target/release/sensing-server --train --dataset data/ --epochs 100
# Load trained model with progressive loading
./target/release/sensing-server --model wifi-densepose-v1.rvf --progressive
Flag
Description
--source
Data source: auto, wifi, esp32, simulate
--http-port
HTTP port for UI and REST API (default: 8080)
--ws-port
WebSocket port (default: 8765)
--udp-port
UDP port for ESP32 CSI frames (default: 5005)
--benchmark
Run vital sign benchmark (1000 frames) and exit
--export-rvf
Export RVF container package and exit
--load-rvf
Load model config from RVF container
--save-rvf
Save model state on shutdown
--model
Load trained .rvf model for inference
--progressive
Enable progressive loading (Layer A instant start)
--train
Train a model and exit
--dataset
Path to dataset directory (MM-Fi or Wi-Pose)
--epochs
Training epochs (default: 100)
Python Legacy CLI
WiFi DensePose provides a comprehensive command-line interface for easy system management, configuration, and monitoring.
CLI Installation
The CLI is automatically installed with the package:
# Install WiFi DensePose with CLI
pip install wifi-densepose
# Verify CLI installation
wifi-densepose --help
wifi-densepose version
Basic Commands
The WiFi-DensePose CLI provides the following commands:
wifi-densepose [OPTIONS] COMMAND [ARGS]...
Options:
-c, --config PATH Path to configuration file
-v, --verbose Enable verbose logging
--debug Enable debug mode
--help Show this message and exit.
Commands:
config Configuration management commands.
db Database management commands.
start Start the WiFi-DensePose API server.
status Show the status of the WiFi-DensePose API server.
stop Stop the WiFi-DensePose API server.
tasks Background task management commands.
version Show version information.
Server Management
# Start the WiFi-DensePose API server
wifi-densepose start
# Start with custom configuration
wifi-densepose -c /path/to/config.yaml start
# Start with verbose logging
wifi-densepose -v start
# Start with debug mode
wifi-densepose --debug start
# Check server status
wifi-densepose status
# Stop the server
wifi-densepose stop
# Show version information
wifi-densepose version
# Database management commands
wifi-densepose db [SUBCOMMAND]
# Examples:# Initialize database
wifi-densepose db init
# Run database migrations
wifi-densepose db migrate
# Check database status
wifi-densepose db status
# Backup database
wifi-densepose db backup
# Restore database
wifi-densepose db restore
Background Tasks
# Background task management commands
wifi-densepose tasks [SUBCOMMAND]
# Examples:# List running tasks
wifi-densepose tasks list
# Start background tasks
wifi-densepose tasks start
# Stop background tasks
wifi-densepose tasks stop
# Check task status
wifi-densepose tasks status
REST API (Rust Sensing Server)
GET /api/v1/sensing # Latest sensing frame
GET /api/v1/vital-signs # Breathing, heart rate, confidence
GET /api/v1/bssid # Multi-BSSID registry
GET /api/v1/model/layers # Progressive loading status
GET /api/v1/model/sona/profiles # SONA profiles
POST /api/v1/model/sona/activate # Activate SONA profile