RuView: $9 WiFi Board Detects Breath Through Walls, But Pose Estimation Fails Cross-Room

RuView uses $9 ESP32 boards and WiFi CSI to detect presence, breathing, heart rate, and pose through walls, but its 17-keypoint model achieves only 3% accuracy on-device; the author documents why cross-person and cross-room generalization fails, showing that per-room calibration with 50 samples is essential for deployment.

Geek Labs
Geek Labs
Geek Labs
RuView: $9 WiFi Board Detects Breath Through Walls, But Pose Estimation Fails Cross-Room

Project Overview

RuView is an open-source Rust project (MIT licensed) with 102k GitHub stars that uses WiFi Channel State Information (CSI) from cheap ESP32 boards to sense human presence, count people, measure breathing (6–30 breaths/min) and heart rate (40–120 bpm), detect falls, recognize gestures, fingerprint rooms, monitor sleep stages, and estimate 17-keypoint human pose — all without cameras or wearables. The system works through walls at ~5 meters range.

Hardware Requirements and Capability Tiers

The official Setup Guide defines capability tiers by node count:

1 node (ESP32 + AP): presence, breathing, coarse motion.

2–3 nodes: add body localization and motion direction.

4+ nodes with trained models: full 17-keypoint skeleton.

Total hardware cost is quoted at $140 for a full setup. A single board costs ~$9 but requires firmware flashing and serial configuration.

How WiFi Sensing Works

WiFi signals reflect off walls, furniture, and people. Chest movement during breathing causes minute changes in the reflected multipath. CSI (Channel State Information) captures amplitude and phase per subcarrier. RuView runs on ESP32, reading CSI locally and extracting respiration from 0.1–0.5 Hz and heart rate from 0.8–2.0 Hz bands. Unlike cameras, it outputs only waveforms and numeric metrics, no images.

Benchmark Results and the Honesty Gap

On the public MM-Fi dataset, RuView reports 82.69% torso PCK@20, beating MultiFormer (72.25%) and CSI2Pose (68.41%). However, the author voluntarily reduced the headline from 91.86% after discovering a normalization flaw that leaked adjacent frames between train/test splits.

More critically, the author publishes a breakdown showing severe generalization collapse:

Same distribution: 83.6% (pose), 88.1% (action).

Cross-person: 64% (pose), ~10% (action — random guess).

Cross-room: ~10% (pose).

The on-device 17-keypoint model scores only 3.0% PCK@20 (target 35%). Benchmark logs attribute this to insufficient training data: only 1,077 paired samples, 30 minutes, upper-body only, with cameras capturing just 14.3 of 17 joints on average.

Why Generalization Fails: The Core Insight

The author experimented with CORAL, DANN, knowledge distillation, contrastive pre-training, and more training subjects — all failed. Contrastive loss never left random baseline, meaning the same action on different people produces fundamentally misaligned WiFi features.

Key finding: WiFi-sensed features do not transfer across people, rooms, or datasets. Features trained on MM-Fi achieve 91.5% on NTU-Fi, worse than random features (93%). Freezing a random encoder and training only a readout head loses only 2–4 percentage points versus full training — the encoder learns almost nothing; all signal resides in the final layer.

Practical Deployment: Per-Room Calibration Is Mandatory

Because features don't transfer, each deployment requires on-site labeled data. The author shows:

50 samples → cross-room performance jumps from 10% to 70%.

200 samples → 76%.

Adaptation uses a rank-8 LoRA adapter (11 KB).

Changing the router or moving furniture invalidates calibration, requiring re-collection.

Installation Options

Zero-cost simulation (no real sensing)

docker pull ruvnet/wifi-densepose:latest
export RUVIEW_API_TOKEN=$(openssl rand -hex 32)
docker run -p 127.0.0.1:3000:3000 -e RUVIEW_API_TOKEN ruvnet/wifi-densepose:latest

Open http://localhost:3000 for the UI (runs on synthetic data).

Python package

pip install ruview
pip install "ruview[client]"

ESP32 firmware flashing

python -m esptool --chip esp32s3 --port COM9 --baud 460800 \
  write_flash 0x0 bootloader.bin 0x8000 partition-table.bin \
  0xf000 ota_data_initial.bin 0x20000 esp32-csi-node.bin
python firmware/esp32-csi-node/provision.py --port COM9 \
  --ssid "your_wifi" --password "pass" --target-ip 192.168.1.20

Laptop RSSI fallback

A tutorial exists for using built-in WiFi RSSI (signal strength only) to coarsely detect presence — no breathing/heart-rate capability.

Known Issues and Caveats

Documentation mismatch: The recommended model.safetensors has NUL-padded header, causing standard loaders to fail; another file in the same repo works.

Windows guide broken: Docker args, Python paths, locale issues unresolved; author acknowledged in July but no fix.

Noisy issue tracker: 2,400+ issues include many automated "chore" commits drowning real bugs.

Hardware barrier: $9 board price assumes soldering/flashing/serial skills; not plug-and-play.

Not for precision measurement: Official disclaimer: readings are approximate, verify before use.

Author's Conclusion

The project's greatest value is its benchmark document ( docs/benchmarks/mmfi-wifi-sensing-study.md), which explains why WiFi sensing fails in real environments more clearly than most papers. For hobbyists, a single $9 ESP32-S3 delivers a magical "presence + breathing" demo. For products, accept that every room needs fresh calibration — this is not a one-click rollout.

Links

Source: github.com/ruvnet/RuView Demo & docs: ruvnet.github.io/RuView,

huggingface.co/ruvnet/wifi-densepose-pretrained
Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

open-sourcepose estimationbenchmarkmodel generalizationcalibrationCSIESP32WiFi sensing
Geek Labs
Written by

Geek Labs

Daily shares of interesting GitHub open-source projects. AI tools, automation gems, technical tutorials, open-source inspiration.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.