Skip to content

Release: Rust Sensing Server v0.1.0 — Full DensePose-Compatible API #41

@ruvnet

Description

@ruvnet

Rust Sensing Server v0.1.0 - WiFi-DensePose

Introduction

This release replaces the entire Python backend stack (FastAPI HTTP server + WebSocket server + mock server, ~2.7GB of Python dependencies) with a single 2.1MB Rust binary (sensing-server.exe). The server provides full DensePose-compatible API endpoints, dual WebSocket streams, WiFi-derived pose estimation with 17 COCO keypoints, and static UI file serving - all from one process.

The Rust server integrates the RuVector signal processing pipeline (5 crates) and supports three data sources: ESP32 CSI hardware, Windows WiFi RSSI, and simulation mode with automatic detection at startup.

Capabilities

Single Binary, Full Stack

  • HTTP REST API on port 8080 - all DensePose-compatible endpoints
  • Pose WebSocket on port 8080 (/api/v1/stream/pose) - real-time pose data
  • Sensing WebSocket on port 8765 (/ws/sensing) - raw CSI sensing updates
  • Static UI server on port 8080 (/ui/*) - serves the entire web UI
  • UDP listener on port 5005 - receives ESP32 CSI binary frames (ADR-018 format)

REST Endpoints

Endpoint Description
GET /health/live Liveness probe with uptime
GET /health/ready Readiness probe
GET /health/version Server version info
GET /health/health Full health status
GET /health/metrics System metrics
GET /api/v1/info Server info, features, source
GET /api/v1/pose/current Current pose (persons, keypoints, bbox)
GET /api/v1/pose/stats Detection statistics
GET /api/v1/pose/zones/summary Zone occupancy summary
GET /api/v1/stream/status WebSocket stream status

WiFi-Derived Pose Estimation

  • Generates 17 COCO-format keypoints (nose, eyes, ears, shoulders, elbows, wrists, hips, knees, ankles)
  • Keypoint positions derived from WiFi signal properties
  • Bounding box as {x, y, width, height} (UI-compatible format)
  • Confidence scores from WiFi sensing classification

Data Sources (Auto-Detected)

  1. ESP32 CSI - UDP binary frames with 56 subcarriers
  2. Windows WiFi - netsh RSSI polling
  3. Simulation - Synthetic CSI with breathing/motion patterns

Test Results

REST API (7/7 PASS)

  PASS GET /health/live
  PASS GET /api/v1/info
  PASS GET /api/v1/pose/current
  PASS GET /api/v1/pose/stats
  PASS GET /api/v1/pose/zones/summary
  PASS GET /api/v1/stream/status
  PASS GET /health/version

WebSocket Streams (2/2 PASS)

  PASS ws://localhost:8080/api/v1/stream/pose
       -> connection_established, then continuous pose_data
       -> 1 person, 17 keypoints, bbox {x,y,width,height}
       -> Sample: nose x=316.2 y=150.4 conf=1.00

  PASS ws://localhost:8765/ws/sensing
       -> continuous sensing_update messages
       -> tick=322, source=simulated, 56 subcarriers

ESP32 Hardware Test

  ESP32 CSI detected on UDP :5005
  Data source: esp32
  Real CSI frames streaming with 56 subcarriers
  tick advancing to 42402 (until ESP32 powered off)

Compilation

  cargo build --release -p wifi-densepose-sensing-server
  0 errors, 0 warnings
  Binary size: 2.1MB

Instructions

Build

cd rust-port/wifi-densepose-rs
cargo build --release -p wifi-densepose-sensing-server

Run

# Auto-detect data source
./target/release/sensing-server --source auto --ui-path ../../ui

# Force specific source
./target/release/sensing-server --source esp32
./target/release/sensing-server --source wifi
./target/release/sensing-server --source simulate

Access UI

Open http://localhost:8080/ui/index.html

Items Left To Do

High Priority

Medium Priority

  • Wire up 5 RuVector crates for SOTA signal processing
  • Multi-person detection from WiFi zone analysis
  • Persistent pose tracking with stable IDs
  • Breathing/heartbeat vital sign overlay

Low Priority

  • TLS support (--tls-cert, --tls-key flags)
  • Config file support (TOML/YAML)
  • Systemd/Windows service mode
  • Cross-compilation CI builds
  • Performance benchmarks
  • Unit tests for Rust server binary

PR

#40

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions