Back to Ruview

WiFi-DensePose Rust Crates

rust-port/wifi-densepose-rs/crates/README.md

0.7.014.2 KB
Original Source

WiFi-DensePose Rust Crates

See through walls with WiFi. No cameras. No wearables. Just radio waves.

A modular Rust workspace for WiFi-based human pose estimation, vital sign monitoring, and disaster response using Channel State Information (CSI). Built on RuVector graph algorithms and the WiFi-DensePose research platform by rUv.


Performance

OperationPython v1Rust v2Speedup
CSI Preprocessing~5 ms5.19 us~1000x
Phase Sanitization~3 ms3.84 us~780x
Feature Extraction~8 ms9.03 us~890x
Motion Detection~1 ms186 ns~5400x
Full Pipeline~15 ms18.47 us~810x
Vital SignsN/A86 us (11,665 fps)--

Crate Overview

Core Foundation

CrateDescriptioncrates.io
wifi-densepose-coreTypes, traits, and utilities (CsiFrame, PoseEstimate, SignalProcessor)
wifi-densepose-configConfiguration management (env, TOML, YAML)
wifi-densepose-dbDatabase persistence (PostgreSQL, SQLite, Redis)

Signal Processing & Sensing

CrateDescriptionRuVector Integrationcrates.io
wifi-densepose-signalSOTA CSI signal processing (6 algorithms from SpotFi, FarSense, Widar 3.0)ruvector-mincut, ruvector-attn-mincut, ruvector-attention, ruvector-solver
wifi-densepose-vitalsVital sign extraction: breathing (6-30 BPM) and heart rate (40-120 BPM)--
wifi-densepose-wifiscanMulti-BSSID WiFi scanning for Windows-enhanced sensing--

Neural Network & Training

CrateDescriptionRuVector Integrationcrates.io
wifi-densepose-nnMulti-backend inference (ONNX, PyTorch, Candle) with DensePose head (24 body parts)--
wifi-densepose-trainTraining pipeline with MM-Fi dataset, 114->56 subcarrier interpolationAll 5 crates

Disaster Response

CrateDescriptionRuVector Integrationcrates.io
wifi-densepose-matMass Casualty Assessment Tool -- survivor detection, triage, multi-AP localizationruvector-solver, ruvector-temporal-tensor

Hardware & Deployment

CrateDescriptioncrates.io
wifi-densepose-hardwareESP32, Intel 5300, Atheros CSI sensor interfaces (pure Rust, no FFI)
wifi-densepose-wasmWebAssembly bindings for browser-based disaster dashboard
wifi-densepose-sensing-serverAxum server: ESP32 UDP ingestion, WebSocket broadcast, sensing UI

Applications

CrateDescriptioncrates.io
wifi-densepose-apiREST + WebSocket API layer
wifi-densepose-cliCommand-line tool for MAT disaster scanning

Architecture

                          wifi-densepose-core
                         (types, traits, errors)
                                  |
              +-------------------+-------------------+
              |                   |                   |
    wifi-densepose-signal   wifi-densepose-nn   wifi-densepose-hardware
    (CSI processing)        (inference)         (ESP32, Intel 5300)
    + ruvector-mincut       + ONNX Runtime          |
    + ruvector-attn-mincut  + PyTorch (tch)   wifi-densepose-vitals
    + ruvector-attention    + Candle          (breathing, heart rate)
    + ruvector-solver            |
              |                  |             wifi-densepose-wifiscan
              +--------+---------+            (BSSID scanning)
                       |
          +------------+------------+
          |                         |
  wifi-densepose-train    wifi-densepose-mat
  (training pipeline)     (disaster response)
  + ALL 5 ruvector        + ruvector-solver
                          + ruvector-temporal-tensor
                                |
              +-----------------+-----------------+
              |                 |                 |
    wifi-densepose-api  wifi-densepose-wasm  wifi-densepose-cli
    (REST/WS)           (browser WASM)       (CLI tool)
              |
    wifi-densepose-sensing-server
    (Axum + WebSocket)

RuVector Integration

All RuVector crates at v2.0.4 from crates.io:

RuVector CrateUsed InPurpose
ruvector-mincutsignal, trainDynamic min-cut for subcarrier selection & person matching
ruvector-attn-mincutsignal, trainAttention-weighted min-cut for antenna gating & spectrograms
ruvector-temporal-tensortrain, matTiered temporal compression (4-10x memory reduction)
ruvector-solversignal, train, matSparse Neumann solver for interpolation & triangulation
ruvector-attentionsignal, trainScaled dot-product attention for spatial features & BVP

Signal Processing Algorithms

Six state-of-the-art algorithms implemented in wifi-densepose-signal:

AlgorithmPaperYearModule
Conjugate MultiplicationSpotFi (SIGCOMM)2015csi_ratio.rs
Hampel FilterWiGest2015hampel.rs
Fresnel Zone ModelFarSense (MobiCom)2019fresnel.rs
CSI SpectrogramStandard STFT2018+spectrogram.rs
Subcarrier SelectionWiDance (MobiCom)2017subcarrier_selection.rs
Body Velocity ProfileWidar 3.0 (MobiSys)2019bvp.rs

Quick Start

As a Library

rust
use wifi_densepose_core::{CsiFrame, CsiMetadata, SignalProcessor};
use wifi_densepose_signal::{CsiProcessor, CsiProcessorConfig};

// Configure the CSI processor
let config = CsiProcessorConfig::default();
let processor = CsiProcessor::new(config);

// Process a CSI frame
let frame = CsiFrame { /* ... */ };
let processed = processor.process(&frame)?;

Vital Sign Monitoring

rust
use wifi_densepose_vitals::{
    CsiVitalPreprocessor, BreathingExtractor, HeartRateExtractor,
    VitalAnomalyDetector,
};

let mut preprocessor = CsiVitalPreprocessor::new(56); // 56 subcarriers
let mut breathing = BreathingExtractor::new(100.0);    // 100 Hz sample rate
let mut heartrate = HeartRateExtractor::new(100.0);

// Feed CSI frames and extract vitals
for frame in csi_stream {
    let residuals = preprocessor.update(&frame.amplitudes);
    if let Some(bpm) = breathing.push_residuals(&residuals) {
        println!("Breathing: {:.1} BPM", bpm);
    }
}

Disaster Response (MAT)

rust
use wifi_densepose_mat::{DisasterResponse, DisasterConfig, DisasterType};

let config = DisasterConfig {
    disaster_type: DisasterType::Earthquake,
    max_scan_zones: 16,
    ..Default::default()
};

let mut responder = DisasterResponse::new(config);
responder.add_scan_zone(zone)?;
responder.start_continuous_scan().await?;

Hardware (ESP32)

rust
use wifi_densepose_hardware::{Esp32CsiParser, CsiFrame};

let parser = Esp32CsiParser::new();
let raw_bytes: &[u8] = /* UDP packet from ESP32 */;
let frame: CsiFrame = parser.parse(raw_bytes)?;
println!("RSSI: {} dBm, {} subcarriers", frame.metadata.rssi, frame.subcarriers.len());

Training

bash
# Check training crate (no GPU needed)
cargo check -p wifi-densepose-train --no-default-features

# Run training with GPU (requires tch/libtorch)
cargo run -p wifi-densepose-train --features tch-backend --bin train -- \
    --config training.toml --dataset /path/to/mmfi

# Verify deterministic training proof
cargo run -p wifi-densepose-train --features tch-backend --bin verify-training

Building

bash
# Clone the repository
git clone https://github.com/ruvnet/wifi-densepose.git
cd wifi-densepose/rust-port/wifi-densepose-rs

# Check workspace (no GPU dependencies)
cargo check --workspace --no-default-features

# Run all tests
cargo test --workspace --no-default-features

# Build release
cargo build --release --workspace

Feature Flags

CrateFeatureDescription
wifi-densepose-nnonnx (default)ONNX Runtime backend
wifi-densepose-nntch-backendPyTorch (libtorch) backend
wifi-densepose-nncandle-backendCandle (pure Rust) backend
wifi-densepose-nncudaCUDA GPU acceleration
wifi-densepose-traintch-backendEnable GPU training modules
wifi-densepose-matruvector (default)RuVector graph algorithms
wifi-densepose-matapi (default)REST + WebSocket API
wifi-densepose-matdistributedMulti-node coordination
wifi-densepose-matdroneDrone-mounted scanning
wifi-densepose-hardwareesp32ESP32 protocol support
wifi-densepose-hardwareintel5300Intel 5300 CSI Tool
wifi-densepose-hardwarelinux-wifiLinux commodity WiFi
wifi-densepose-wifiscanwlanapiWindows WLAN API async scanning
wifi-densepose-coreserdeSerialization support
wifi-densepose-coreasyncAsync trait support

Testing

bash
# Unit tests (all crates)
cargo test --workspace --no-default-features

# Signal processing benchmarks
cargo bench -p wifi-densepose-signal

# Training benchmarks
cargo bench -p wifi-densepose-train --no-default-features

# Detection benchmarks
cargo bench -p wifi-densepose-mat

Supported Hardware

HardwareCrate FeatureCSI SubcarriersCost
ESP32-S3 Mesh (3-6 nodes)hardware/esp3252-56~$54
Intel 5300 NIChardware/intel530030~$50
Atheros AR9580hardware/linux-wifi56~$100
Any WiFi (Windows/Linux)wifiscanRSSI-only$0

Architecture Decision Records

Key design decisions documented in docs/adr/:

ADRTitleStatus
ADR-014SOTA Signal ProcessingAccepted
ADR-015MM-Fi + Wi-Pose Training DatasetsAccepted
ADR-016RuVector Training PipelineAccepted (Complete)
ADR-017RuVector Signal + MAT IntegrationAccepted
ADR-021Vital Sign Detection PipelineAccepted
ADR-022Windows WiFi Enhanced SensingAccepted
ADR-024Contrastive CSI Embedding ModelAccepted
  • WiFi-DensePose -- Main repository (Python v1 + Rust v2)
  • RuVector -- Graph algorithms for neural networks (5 crates, v2.0.4)
  • rUv -- Creator and maintainer

License

All crates are dual-licensed under MIT OR Apache-2.0.

Copyright (c) 2024 rUv