RuView 调研报告
RuView 调研报告
一、项目概述
1.1 基本信息
| 项目信息 | 详情 |
|---|---|
| 项目名称 | π RuView (WiFi DensePose) |
| 开发者 | Reuven Cohen (ruvnet) |
| GitHub | https://github.com/ruvnet/RuView |
| 官网 | https://ruv.net |
| 开源协议 | MIT |
| 编程语言 | Rust (v2), Python (v1) |
| Stars | 37.3k+ |
| 测试覆盖 | 1,031+ Rust 测试用例 |
| 当前状态 | 活跃开发中 |
1.2 一句话介绍
RuView 是一个基于 WiFi 信号的无摄像头人体感知系统,利用 WiFi CSI(信道状态信息)实现穿墙人体姿态估计、呼吸检测和心率监测,通过 Rust 重写实现了 810 倍的性能提升。
1.3 核心定位
"WiFi DensePose: Seeing Human Pose Through Walls Using WiFi Signals"
RuView 将 WiFi 路由器变成了感知设备,无需摄像头即可"看到"墙后的人体姿态。
1.4 设计理念
┌─────────────────────────────────────────────────────────────────┐
│ RuView 设计理念 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ❌ 无摄像头 │
│ ❌ 无可穿戴设备 │
│ ❌ 无隐私担忧 │
│ ❌ 无光线依赖 │
│ │
│ ✅ WiFi 信号感知 │
│ ✅ 穿墙探测能力 │
│ ✅ 低成本硬件 ($8-9/节点) │
│ ✅ 边缘计算 │
│ ✅ 实时处理 (54,000 fps) │
│ │
│ 目标: 让 WiFi 成为无处不在的感知基础设施 │
│ │
└─────────────────────────────────────────────────────────────────┘
二、核心功能
2.1 功能概览
| 功能模块 | 状态 | 描述 |
|---|---|---|
| WiFi DensePose | ✅ 完整 | WiFi 人体姿态估计 |
| CSI 信号采集 | ✅ 完整 | ESP32-S3 CSI 数据捕获 |
| 生命体征检测 | ✅ 完整 | 呼吸(6-30 BPM)、心率(40-120 BPM) |
| 穿墙感知 | ✅ 完整 | 穿透墙壁、家具、碎片 |
| 运动检测 | ✅ 完整 | 高精度运动状态识别 |
| 多节点网络 | ✅ 完整 | 4-6 节点 360° 覆盖 |
| 边缘智能 | ✅ 完整 | 65 个 WASM 模块 |
| 3D 可视化 | ✅ 完整 | Three.js 实时渲染 |
2.2 核心特性详解
特性 1: WiFi DensePose - WiFi 人体姿态估计
原理: 利用 WiFi 信号的 CSI(信道状态信息)重建人体姿态。
WiFi 发射器 ──→ 人体反射 ──→ WiFi 接收器
│
▼
CSI 信号变化
│
▼
深度学习模型
│
▼
人体姿态估计
技术优势: - 无需摄像头,保护隐私 - 穿透墙壁、家具 - 不受光线影响 - 低成本硬件
特性 2: CSI 信号处理
CSI (Channel State Information) 是 WiFi 信号在子载波级别的幅度和相位信息。
┌─────────────────────────────────────────────────────────────────┐
│ CSI 信号结构 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ WiFi 信道 = 多个子载波 (Subcarriers) │
│ │
│ 每个子载波包含: │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ 幅度 │ │ 相位 │ │
│ │ (Amplitude) │ │ (Phase) │ │
│ └─────────────┘ └─────────────┘ │
│ │
│ 人体运动 → 信号反射 → CSI 变化 → 模式识别 │
│ │
└─────────────────────────────────────────────────────────────────┘
处理流程: 1. CSI 采集: ESP32-S3 捕获原始 CSI 数据 2. 预处理: 幅度归一化、相位清理 3. 特征提取: 时频域特征 4. 模型推理: RuVector AI 模型
特性 3: 生命体征检测
呼吸检测 (6-30 BPM): - 通过 CSI 相位变化检测胸部起伏 - FFT 频谱分析提取呼吸频率 - 精度: ±1 BPM
心率检测 (40-120 BPM): - 检测心脏跳动引起的微小震动 - 高灵敏度相位处理 - 精度: ±2 BPM
特性 4: Rust 性能优化
性能对比 (Python vs Rust):
| 操作 | Python (v1) | Rust (v2) | 加速比 |
|---|---|---|---|
| CSI 预处理 | ~5ms | 5.19 µs | 1000x |
| 相位清理 | ~3ms | 3.84 µs | 780x |
| 特征提取 | ~8ms | 9.03 µs | 890x |
| 运动检测 | ~1ms | 186 ns | 5400x |
| 完整流水线 | ~15ms | 18.47 µs | 810x |
Rust 优化技术: - SIMD 向量化 - 零拷贝数据处理 - 无锁并发 - 内存池优化
三、技术架构
3.1 整体架构
┌─────────────────────────────────────────────────────────────────┐
│ RuView 架构 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 感知层 (Sensing) │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ ESP32-S3 │ │ ESP32-S3 │ │ ESP32-S3 │ │ ESP32-S3 │ │ │
│ │ │ 节点 1 │ │ 节点 2 │ │ 节点 3 │ │ 节点 N │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ (WiFi CSI Data) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 处理层 (Processing) │ │
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ CSI 预处理 │ │ 特征提取 │ │ 模型推理 │ │ │
│ │ │ (Rust) │ │ (Rust) │ │ (RuVector) │ │ │
│ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 智能层 (Intelligence) │ │
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ 姿态估计 │ │ 生命体征 │ │ 运动检测 │ │ │
│ │ │ DensePose │ │ Vital Signs │ │ Motion │ │ │
│ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 应用层 (Application) │ │
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ 3D 可视化 │ │ API 服务 │ │ 边缘模块 │ │ │
│ │ │ (Three.js) │ │ (REST/gRPC) │ │ (WASM) │ │ │
│ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
3.2 核心组件
ESP32-S3 CSI 节点
硬件规格: | 参数 | 规格 | |------|------| | 芯片 | ESP32-S3 | | 成本 | $8-9/节点 | | WiFi | 802.11 b/g/n | | 子载波 | 64 (20MHz) / 256 (40MHz) | | 采样率 | 最高 1000 Hz |
固件功能: - CSI 数据采集 - 原始数据打包 - 通过串口/网络传输
RuVector AI 框架
核心特性: - 注意力机制 (Attention) - 图算法 (Graph Algorithms) - 模型压缩 (Compression) - 边缘优化
SONA 自适应架构
SONA (Self-Optimizing Neural Architecture): - Micro-LoRA: 轻量级模型适配 - EWC++: 持续学习防止遗忘 - 设备端自适应: 无需云端训练
RVF 模型容器
RVF (RuView Format) 特性: - 单文件模型打包 - 渐进式加载 - 跨平台兼容 - 压缩存储
3.3 目录结构
RuView/
├── firmware/
│ └── esp32-csi-node/ # ESP32 固件
│ ├── src/ # 固件源码
│ └── CMakeLists.txt # 构建配置
│
├── rust-port/
│ └── wifi-densepose-rs/ # Rust 实现
│ ├── src/
│ │ ├── csi/ # CSI 处理
│ │ ├── features/ # 特征提取
│ │ ├── models/ # AI 模型
│ │ └── pipeline/ # 处理流水线
│ └── Cargo.toml
│
├── v1/ # Python 原版
│ ├── wifi_densepose/ # 核心模块
│ └── examples/ # 示例代码
│
├── ui/ # Three.js 可视化
│ ├── src/
│ └── public/
│
├── docs/
│ └── adr/ # 架构决策记录
│ ├── ADR-024.md # 自学习 WiFi AI
│ └── ...
│
└── docker/ # Docker 部署
└── Dockerfile
3.4 多节点感知网络
多静态网格 (Multistatic Mesh):
┌─────────────────────────────────────────────────────────────────┐
│ 多节点感知布局 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ [节点 1] ──────────────────────────────────── [节点 2] │
│ │ │ │
│ │ ┌─────────────┐ │ │
│ │ │ 人体目标 │ │ │
│ │ └─────────────┘ │ │
│ │ │ │
│ [节点 3] ──────────────────────────────────── [节点 4] │
│ │
│ 4-6 个节点提供 360° 房间覆盖 │
│ 多视角融合提高感知精度 │
│ │
└─────────────────────────────────────────────────────────────────┘
优势: - 360° 无死角覆盖 - 多视角数据融合 - 冗余备份 - 提高定位精度
四、安装与使用
4.1 硬件准备
所需硬件: | 组件 | 数量 | 成本 | |------|------|------| | ESP32-S3 开发板 | 2-6 个 | $8-9/个 | | WiFi 路由器 | 1 个 | 现有 | | 主机 (运行 RuView) | 1 台 | - |
4.2 软件安装
方式 1: Docker 部署
# 拉取镜像
docker pull ruvnet/ruview:latest
# 启动服务
docker run -d --name ruview \
-p 8080:8080 \
-p 9222:9222 \
ruvnet/ruview:latest
方式 2: 从源码构建
# 克隆仓库
git clone https://github.com/ruvnet/RuView.git
cd RuView
# 构建 Rust 版本
cd rust-port/wifi-densepose-rs
cargo build --release
# 运行测试
cargo test
方式 3: ESP32 固件烧录
# 安装 ESP-IDF
git clone --recursive https://github.com/espressif/esp-idf.git
cd esp-idf
./install.sh
# 编译固件
cd RuView/firmware/esp32-csi-node
idf.py build
# 烧录到 ESP32
idf.py -p /dev/ttyUSB0 flash monitor
4.3 基本使用
启动 CSI 采集
# 连接 ESP32,启动 CSI 数据流
python scripts/start_csi_stream.py --port /dev/ttyUSB0
运行姿态估计
# 启动 Rust 处理流水线
./target/release/wifi-densepose \
--csi-source tcp://0.0.0.0:9000 \
--model models/densepose.rvf \
--output ui/data/
启动可视化
# 启动 Web UI
cd ui
npm install
npm start
# 访问 http://localhost:3000
4.4 API 使用
import requests
# 获取当前姿态
response = requests.get('http://localhost:8080/api/pose')
pose_data = response.json()
print(f"检测到 {pose_data['person_count']} 人")
print(f"姿态关键点: {pose_data['keypoints']}")
# 获取生命体征
vitals = requests.get('http://localhost:8080/api/vitals')
print(f"呼吸频率: {vitals.json()['breathing_rate']} BPM")
print(f"心率: {vitals.json()['heart_rate']} BPM")
五、技术深度分析
5.1 CSI 信号原理
WiFi CSI vs RSSI:
| 指标 | RSSI | CSI |
|---|---|---|
| 粒度 | 单一值 | 多子载波 |
| 信息量 | 信号强度 | 幅度+相位 |
| 分辨率 | 低 | 高 |
| 适用场景 | 简单定位 | 精细感知 |
CSI 数学表示:
H(f, t) = |H(f, t)| * e^(j∠H(f, t))
其中:
- H(f, t): 时刻 t 频率 f 的信道响应
- |H(f, t)|: 幅度
- ∠H(f, t): 相位
- f: 子载波频率
- t: 时间
5.2 信号处理流水线
原始 CSI 数据
│
▼
┌─────────────┐
│ 幅度处理 │ ← 归一化、滤波
└─────────────┘
│
▼
┌─────────────┐
│ 相位清理 │ ← 相位解卷绕、线性化
└─────────────┘
│
▼
┌─────────────┐
│ 特征提取 │ ← 时域、频域特征
└─────────────┘
│
▼
┌─────────────┐
│ 模型推理 │ ← RuVector AI
└─────────────┘
│
▼
┌─────────────┐
│ 姿态/体征 │ ← 输出结果
└─────────────┘
5.3 边缘智能模块
65 个 WASM 模块分类:
| 类别 | 模块数 | 功能 |
|---|---|---|
| 预处理 | 15 | CSI 数据清洗、归一化 |
| 特征 | 12 | 时频域特征提取 |
| 检测 | 10 | 运动、存在检测 |
| 估计 | 8 | 姿态、位置估计 |
| 追踪 | 7 | 多目标追踪 |
| 适配 | 6 | 模型自适应 |
| 通信 | 7 | 数据传输、协议 |
5.4 自学习 WiFi AI (ADR-024)
对比自监督学习架构:
┌─────────────────────────────────────────────────────────────────┐
│ 自学习 WiFi AI 架构 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ CSI 样本 A │ │ CSI 样本 B │ │
│ └──────────────┘ └──────────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ 编码器 A │ │ 编码器 B │ │
│ └──────────────┘ └──────────────┘ │
│ │ │ │
│ └────────┬───────────┘ │
│ ▼ │
│ ┌──────────────┐ │
│ │ 对比损失 │ ← 正样本拉近,负样本推远 │
│ └──────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────┐ │
│ │ 表征学习 │ ← 无标注自动学习 │
│ └──────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
优势: - 无需人工标注 - 环境自适应 - 持续学习 - 边缘部署友好
六、使用场景
6.1 适用场景
| 场景 | 描述 | 推荐指数 |
|---|---|---|
| 智能家居 | 人员检测、手势控制 | ⭐⭐⭐⭐⭐ |
| 健康监测 | 老人跌倒、呼吸监测 | ⭐⭐⭐⭐⭐ |
| 安防监控 | 穿墙入侵检测 | ⭐⭐⭐⭐⭐ |
| 搜索救援 | 灾后生命探测 | ⭐⭐⭐⭐⭐ |
| 运动分析 | 姿态、动作识别 | ⭐⭐⭐⭐ |
| 医疗康复 | 远程生命体征 | ⭐⭐⭐⭐ |
| 隐私场所 | 浴室、更衣室监控 | ⭐⭐⭐⭐⭐ |
6.2 不适用场景
| 场景 | 原因 |
|---|---|
| 高精度定位 | 精度约 10-50cm,不如 UWB |
| 多人精细区分 | 超过 5 人时准确率下降 |
| 室外开放空间 | WiFi 信号衰减快 |
| 金属密集环境 | 信号反射干扰严重 |
6.3 典型用例
用例 1: 老人跌倒检测
老人居住房间
│
├── [ESP32 节点 x 4] ──→ CSI 数据流
│ │
└── RuView 边缘服务器 │
▼
┌─────────────┐
│ 跌倒检测 │
└─────────────┘
│
┌────────────────┼────────────────┐
▼ ▼ ▼
[本地报警] [推送子女] [呼叫急救]
用例 2: 搜索救援
灾后废墟
│
├── [便携 ESP32 阵列] ──→ CSI 扫描
│ │
└── 移动边缘设备 │
▼
┌─────────────┐
│ 生命体征 │
│ 检测 │
└─────────────┘
│
▼
[定位被困者]
用例 3: 智能家居手势控制
用户手势 ──→ CSI 变化 ──→ RuView ──→ 手势识别 ──→ 智能家居控制
│
┌─────────────────────┼─────────────────────┐
▼ ▼ ▼
[开灯/关灯] [调节音量] [切换频道]
七、对比分析
7.1 RuView vs 摄像头 vs 激光雷达 vs 毫米波
| 维度 | RuView | 摄像头 | 激光雷达 | 毫米波雷达 |
|---|---|---|---|---|
| 穿墙能力 | ✅ | ❌ | ❌ | 部分 |
| 隐私保护 | ✅ | ❌ | ✅ | ✅ |
| 光线依赖 | ❌ | ✅ | ❌ | ❌ |
| 成本 | $20-60 | $50-200 | $500-5000 | $100-500 |
| 精度 | 中 | 高 | 极高 | 中高 |
| 覆盖范围 | 5-10m | 视角限制 | 100m+ | 50-200m |
| 3D 感知 | ✅ | 部分 | ✅ | ✅ |
| 生命体征 | ✅ | ❌ | ❌ | ✅ |
7.2 技术选型建议
┌─────────────────────────────────────────────────────────────────┐
│ 场景选择指南 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 需要穿墙感知? │
│ │ │
│ ├── 是 ──→ 预算有限? │
│ │ │ │
│ │ ├── 是 ──→ 【RuView】 │
│ │ │ │
│ │ └── 否 ──→ 需要极高精度? │
│ │ │ │
│ │ ├── 是 ──→ 【毫米波雷达】 │
│ │ │ │
│ │ └── 否 ──→ 【RuView】 │
│ │ │
│ └── 否 ──→ 隐私敏感? │
│ │ │
│ ├── 是 ──→ 【RuView】或【毫米波】 │
│ │ │
│ └── 否 ──→ 需要视觉细节? │
│ │ │
│ ├── 是 ──→ 【摄像头】 │
│ │ │
│ └── 否 ──→ 【RuView】 │
│ │
└─────────────────────────────────────────────────────────────────┘
八、最佳实践
8.1 推荐做法
- 多节点部署
- 至少 4 个 ESP32 节点
- 分布在房间四角
-
确保视线覆盖
-
信号校准
- 部署后进行空房间校准
- 定期更新基线
-
环境变化后重新校准
-
边缘计算优先
- 使用 WASM 模块本地处理
- 减少网络延迟
- 保护隐私数据
8.2 避坑指南
| 问题 | 解决方案 |
|---|---|
| 信号干扰 | 避免与其他 2.4GHz 设备冲突 |
| 金属反射 | 调整节点位置,避开大型金属 |
| 多径效应 | 增加节点数量,多视角融合 |
| 精度不足 | 校准环境,优化模型参数 |
九、生态系统
9.1 相关项目
| 项目 | 描述 | 链接 |
|---|---|---|
| ESP32-CSI-Tool | ESP32 CSI 采集工具 | GitHub |
| WiFi-DensePose | 原始研究论文实现 | CMU |
| RuVector | AI 推理框架 | ruv.net |
9.2 学术研究
- WiFi-DensePose: CMU 原始研究
- Widar: WiFi 人体运动识别
- WiVi: WiFi 可视化穿墙
- RF-Capture: MIT 穿墙人体成像
十、总结
10.1 优势
| 优势 | 说明 |
|---|---|
| 穿墙感知 | 无需视线的独特能力 |
| 隐私友好 | 无摄像头,无隐私担忧 |
| 低成本 | $8-9/节点的硬件成本 |
| 高性能 | 810x 加速,54,000 fps |
| 边缘智能 | 65 个 WASM 模块本地处理 |
| 全功能 | 姿态、生命体征、运动检测 |
10.2 劣势
| 劣势 | 说明 |
|---|---|
| 精度限制 | 不如摄像头/激光雷达 |
| 环境敏感 | 金属、多径干扰 |
| 范围限制 | 5-10m 有效范围 |
| 硬件依赖 | 需要 ESP32 节点 |
| 生态较新 | 社区还在发展中 |
10.3 最终评价
RuView 是 WiFi 感知领域的突破性项目,通过创新的 CSI 处理和 Rust 性能优化,实现了低成本、高性能的穿墙人体感知。对于智能家居、健康监测、搜索救援等隐私敏感场景,它是理想的选择。
推荐指数: ⭐⭐⭐⭐⭐ (5/5) - 特定场景
适用人群: - 智能家居开发者 - 健康监测系统工程师 - 安防监控系统集成商 - 搜索救援技术研究者 - 隐私敏感应用开发者