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
📋 Table of Contents
📡 Signal Processing & Sensing — From raw WiFi frames to vital signs
The signal processing stack transforms raw WiFi Channel State Information into actionable human sensing data. Starting from 56-192 subcarrier complex values captured at 20 Hz, the pipeline applies research-grade algorithms (SpotFi phase correction, Hampel outlier rejection, Fresnel zone modeling) to extract breathing rate, heart rate, motion level, and multi-person body pose — all in pure Rust with zero external ML dependencies.
🧠 Models & Training — DensePose pipeline, RVF containers, SONA adaptation
The neural pipeline uses a graph transformer with cross-attention to map CSI feature matrices to 17 COCO body keypoints and DensePose UV coordinates. Models are packaged as single-file .rvf containers with progressive loading (Layer A instant, Layer B warm, Layer C full). SONA (Self-Optimizing Neural Architecture) enables continuous on-device adaptation via micro-LoRA + EWC++ without catastrophic forgetting.
The Rust sensing server is the primary interface, offering a comprehensive CLI with flags for data source selection, model loading, training, benchmarking, and RVF export. A REST API (Axum) and WebSocket server provide real-time data access. The Python v1 CLI remains available for legacy workflows.
⚙️ Development & Testing — 542+ tests, CI, deployment
The project maintains 542+ pure-Rust tests across 7 crate suites with zero mocks — every test runs against real algorithm implementations. Hardware-free simulation mode (--source simulate) enables full-stack testing without physical devices. Docker images are published on Docker Hub for zero-setup deployment.
All benchmarks are measured on the Rust sensing server using cargo bench and the built-in --benchmark CLI flag. The Rust v2 implementation delivers 810x end-to-end speedup over the Python v1 baseline, with motion detection reaching 5,400x improvement. The vital sign detector processes 11,665 frames/second in a single-threaded benchmark.
WiFi DensePose is MIT-licensed open source, developed by ruvnet. The project has been in active development since March 2025, with 3 major releases delivering the Rust port, SOTA signal processing, disaster response module, and end-to-end training pipeline.
🔬 SOTA Signal Processing (ADR-014) — 6 research-grade algorithms
Algorithm
Purpose
Reference
Conjugate Multiplication
Cancels CFO/SFO from raw CSI phase
SpotFi (SIGCOMM 2015)
Hampel Filter
Robust outlier removal using median/MAD
Hampel (1974)
Fresnel Zone Model
Physics-based breathing detection
FarSense (MobiCom 2019)
CSI Spectrogram
STFT time-frequency matrices
Standard since 2018
Subcarrier Selection
Variance-ratio top-K ranking
WiDance (MobiCom 2017)
Body Velocity Profile
Domain-independent velocity x time
Widar 3.0 (MobiSys 2019)
🧠 Models & Training
📦 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
Extracts Channel State Information from WiFi signals (ESP32 or RSSI)
Signal Processor
RuVector-powered phase sanitization, Hampel filter, Fresnel model
Graph Transformer
GNN body-graph reasoning with cross-attention CSI-to-pose mapping
Vital Signs
FFT-based breathing (0.1-0.5 Hz) and heartbeat (0.8-2.0 Hz) extraction
REST API
Axum (Rust) or FastAPI (Python) for data access and control
WebSocket
Real-time pose, sensing, and vital sign streaming
Analytics
Fall detection, activity recognition, START triage
📦 Installation
Guided Installer — Interactive hardware detection and profile selection
./install.sh
The installer walks through 7 steps: system detection, toolchain check, WiFi hardware scan, profile recommendation, dependency install, build, and verification.
# 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)
REST API & WebSocket — Endpoints reference
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
wifi-densepose start # Start API server
wifi-densepose -c config.yaml start # Custom config
wifi-densepose -v start # Verbose logging
wifi-densepose status # Check status
wifi-densepose stop # Stop server
wifi-densepose config show # Show configuration
wifi-densepose db init # Initialize database
wifi-densepose tasks list # List background tasks
Create a feature branch (git checkout -b feature/amazing-feature)
Commit your changes
Push and open a Pull Request
📄 Changelog
Release history
v2.3.0 — 2026-03-01
The largest release to date — delivers the complete end-to-end training pipeline, Docker images, and vital sign detection. The Rust sensing server now supports full model training, RVF export, and progressive model loading from a single binary.
Docker images published — ruvnet/wifi-densepose:latest (132 MB Rust) and :python (569 MB)
8-phase DensePose training pipeline (ADR-023) — Dataset loaders (MM-Fi, Wi-Pose), graph transformer with cross-attention, 6-term composite loss, cosine-scheduled SGD, PCK/OKS validation, SONA adaptation, sparse inference engine, RVF model packaging
--export-rvf CLI flag — Standalone RVF model container generation with vital config, training proof, and SONA profiles
--train CLI flag — Full training mode with best-epoch snapshotting and checkpoint saving
WiFi scan domain layer (ADR-022) — 8-stage pure-Rust signal intelligence pipeline for Windows WiFi RSSI
New crates — wifi-densepose-vitals (1,863 lines) and wifi-densepose-wifiscan (4,829 lines)
542+ Rust tests — All passing, zero mocks
v2.2.0 — 2026-02-28
Introduced the guided installer, SOTA signal processing algorithms, and the WiFi-Mat disaster response module. This release established the ESP32 hardware path and security hardening.
Guided installer — ./install.sh with 7-step hardware detection and 8 install profiles
6 SOTA signal algorithms (ADR-014) — SpotFi conjugate multiplication, Hampel filter, Fresnel zone model, CSI spectrogram, subcarrier selection, body velocity profile
The foundational Rust release — ported the Python v1 pipeline to Rust with 810x speedup, integrated the RuVector signal intelligence crates, and added the Three.js real-time visualization.
RuVector integration — 11 vendored crates (ADR-002 through ADR-013) for HNSW indexing, attention, GNN, temporal compression, min-cut, solver
ESP32 CSI sensor mesh — $54 starter kit with 3-6 ESP32-S3 nodes streaming at 20 Hz
Three.js visualization — 3D body model with 17 joints, real-time WebSocket streaming
CI verification pipeline — Determinism checks and unseeded random scan across all signal operations