-
Notifications
You must be signed in to change notification settings - Fork 3.2k
Closed
Description
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)
- ESP32 CSI - UDP binary frames with 56 subcarriers
- Windows WiFi - netsh RSSI polling
- 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-serverRun
# 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 simulateAccess UI
Open http://localhost:8080/ui/index.html
Items Left To Do
High Priority
- Visual skeleton rendering verification in browser Live Demo tab
- CI/CD pipeline fix - upgrade actions/upload-artifact from v3 to v4
- Merge PR feat: Rust sensing server with full DensePose-compatible API #40
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
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels