今天在 GitHub Trending 上看到一个非常有科幻感的项目:RuView,它能把家里普通的 WiFi 路由器变成一个穿墙感知系统——无需摄像头、无需穿戴设备,仅靠无线电信号的反射就能检测人是否存在、测量呼吸心率、识别跌倒,甚至估计人体姿态。

一、项目概述

RuView(π RuView)是一个开源的 WiFi 感知平台,核心理念是:你家里每个 WiFi 路由器都在不断发射无线电波,人在房间里的移动、呼吸甚至静坐都会对这些电波产生可测量的扰动。RuView 通过 ESP32 传感器采集信道状态信息(CSI),再用预训练的小型神经网络将这些扰动转化为可操作的数据。

核心能力包括:

  • 人体存在检测:穿墙识别人数、进出追踪
  • 生命体征监测:无接触呼吸频率(6-30 BPM)和心率(40-120 BPM)
  • 活动识别:行走、坐下、手势、跌倒
  • 17 关键点姿态估计:在 MM-Fi 数据集上达到 82.69% torso-PCK@20,超越 MultiFormer 和 CSI2Pose
  • 睡眠质量监测:整夜睡眠阶段分类和呼吸暂停筛查
  • 环境映射:RF 指纹识别房间、检测家具移动

最令人印象深刻的是成本——每个传感器节点只需 9 美元的 ESP32 板,模型经 4-bit 量化后仅 8 KB,在树莓派上运行时间以微秒计。

二、技术原理

2.1 CSI 信号采集

WiFi 通信中的 CSI(Channel State Information)记录了每个子载波的幅度和相位信息。当信号在空间中传播并遇到人体时,反射、衍射和散射会导致 CSI 发生变化。ESP32-S3 的 CSI streaming 功能可以实时捕获这些变化。

// CSI 信号处理流程示意
原始 CSI → 去噪 → 子载波选择 → 相位unwrap →
带通滤波 → 特征提取 → 模型推理 → 语义状态输出

2.2 脉冲神经网络(SNN)

RuView 使用脉冲神经网络进行环境学习,30 秒内即可适配新环境。相比传统 ANN,SNN 在功耗和实时性上有天然优势,非常适合 ESP32 等边缘硬件。

2.3 多频率网格扫描

系统在 6 个 WiFi 信道上进行扫描,甚至可以利用邻居家的路由器作为额外的雷达信号源(“free radar illuminators”),显著提升了感知覆盖范围和精度。

2.4 密码学证明链

每条测量数据都通过 Ed25519 见证链(witness chain) 进行密码学签名,确保数据来源可信、不可篡改——这在安全监控场景中至关重要。

2.5 技术架构概览

ESP32 节点($9/个)
  ├── CSI 采集 & 边缘推理(Rust 编写)
  ├── 6 信道多频扫描
  └── Ed25519 数据签名
        ↓ MQTT / Matter
Cognitum Seed(持久存储 + AI 集成)
  ├── 环境指纹库
  ├── SNN 在线学习
  └── 21 个实体/节点(11 原始信号 + 10 语义状态)
        ↓
智能家居平台
  ├── Home Assistant(MQTT)
  ├── Apple Home(HAP 1.1)
  ├── Google Home / Alexa(Matter)
  └── SmartThings

2.6 姿态估计模型

RuView 发布在 Hugging Face 上的 wifi-densepose-pretrained 模型包含一个 128 维对比编码器,v2 编码器在 held-out 数据上实现了 82.3% 的时间三元组准确率。姿态估计模块 cog-pose-estimation 在 Pi 5 上冷启动仅需 8.4 ms

三、安装与快速开始

3.1 环境要求

  • ESP32-S3 开发板(推荐,支持 CSI streaming)
  • Cognitum Seed 或树莓派(可选,用于中枢推理)
  • Rust 1.85+(编译固件)
  • Docker(可选,运行中枢服务)

3.2 快速启动(Docker 方式)

# 拉取多架构镜像(支持 amd64 和 arm64)
docker pull ruvnet/wifi-densepose:latest

# 启动服务
docker run -d \
  --name ruview \
  -p 8080:8080 \
  ruvnet/wifi-densepose:latest

3.3 接入 Home Assistant

# 启动时添加 MQTT 标志即可自动发布到 HA
docker run -d \
  --name ruview-ha \
  -e MQTT_HOST=homeassistant.local \
  -e MQTT_PORT=1883 \
  -p 8080:8080 \
  ruvnet/wifi-densepose:latest --mqtt

系统会自动发布 21 个实体,包括原始 CSI 信号和推断的语义状态(有人在睡觉、可能遇险、房间活跃、老年人异常静止、会议进行中等)。

3.4 ESP32 固件烧录

# 克隆仓库
git clone https://github.com/ruvnet/RuView.git
cd RuView/firmware

# 使用 espflash 烧录
espflash flash --monitor

四、使用方法与实战

4.1 呼吸与心率监测

系统通过 CSI 相位信号的带通滤波实现生命体征提取:

  • 呼吸率:0.1–0.5 Hz 带通滤波 + 相位方差 + 过零 BPM 检测
  • 心率:0.8–2.0 Hz 带通滤波 + 过零 BPM 检测

无需接触身体,人在床上睡觉时也能实时监测。

4.2 跌倒检测

// 跌倒检测算法核心逻辑
// 相位加速度阈值 + 3 帧去抖 + 5 秒冷却
fn detect_fall(phase_acc: f32) -> bool {
    phase_acc > FALL_THRESHOLD && debounce_frames >= 3
}

检测延迟低于 200ms,在老年人看护场景中非常关键。

4.3 多人计数

使用自适应 P95 归一化 + 运行时可调去重因子(/api/v1/config/dedup-factor),还提供 6 个专用计数器 Cog:区域占用、电梯计数、队列长度、客流统计等。

4.4 语义状态输出

每个节点输出 10 种推断的语义状态,可直接用于自动化规则:

语义状态用途
someone-sleeping自动关闭灯光
possible-distress触发紧急通知
elderly-inactivity-anomaly长者安全看护
meeting-in-progress会议室状态指示
bathroom-occupied卫生间占用提示
fall-risk-elevated跌倒风险预警

4.5 Apple Home / Siri 语音集成

作为 HAP 1.1 桥接设备接入 Apple Home 后,可以直接用 Siri 语音查询:

“Siri,卧室有人吗?”
“Siri,客厅的心率是多少?”

无需编写自定义 Skill,开箱即用。

五、常见问题与解决方案

5.1 检测精度不够

  • 确保 ESP32 节点与目标之间有足够的 WiFi 反射路径
  • 运行 30 秒环境校准让 SNN 适配当前房间
  • 尝试多节点部署,利用多频率网格扫描提升覆盖

5.2 MQTT 连接失败

  • 检查 Home Assistant 的 MQTT broker 是否已启动
  • 确认网络防火墙允许 MQTT 端口(默认 1883)
  • 验证 MQTT 凭证配置

5.3 ESP32 固件编译错误

  • 确保使用 Rust 1.85 或更高版本
  • 安装 espflash 工具:cargo install espflash
  • 检查目标芯片是否为 ESP32-S3(CSI streaming 需要此型号)

5.4 隐私担忧

  • 所有数据处理在边缘侧完成,不依赖云端
  • 无摄像头,不采集图像
  • 数据签名链确保来源可审计

六、总结

RuView 展示了一个令人兴奋的方向:将无处不在的 WiFi 信号转化为空间感知能力。它不需要昂贵的专用硬件(9 美元 ESP32 即可),不需要摄像头(保护隐私),不需要云端(数据本地处理),却能实现穿墙人体检测、生命体征监测和姿态估计。

项目代码质量很高——1463 个测试通过、Rust 编写核心模块、完整的 ADR(架构决策记录)文档、Docker 多架构支持。对于智能家居爱好者、IoT 开发者和安全监控场景来说,这是一个非常值得关注和尝试的开源项目。

项目地址https://github.com/ruvnet/RuView