cover

大家好,我是何三,独立开发者

你家里有多少个摄像头?

门口一个、客厅一个、卧室门口再藏一个……为了安全感,我们装了一堆摄像头,然后每天活在"我是不是被偷窥了"的焦虑里。隐私和安全的矛盾,一直是个死结。

但最近一个开源项目让我坐不住了——RuView(WiFi DensePose),它用家里最普通的 WiFi 信号,就能重建人体姿态、检测呼吸心跳,甚至感知有没有人跌倒。没有摄像头、不拍照、不录像,连光都不需要。

硬件成本呢?每个传感器节点最低只要 6 美元。

说实话,第一次看到这个项目介绍的时候,我以为又是什么学术团队的 demo。看了代码才知道,这玩意儿是认真的——1300 多个测试、62 份架构决策记录、19 个 Rust crate、完整的 Docker 部署方案。用 Rust 写的信号处理流水线跑到了 每秒 54000 帧,比 Python 版本快了 810 倍

今天就来拆解一下这个项目到底在做什么,以及为什么它值得关注。

WiFi 信号怎么能"看到"人?

wifi

很多人一听"WiFi 感知"就觉得玄乎,其实原理并不复杂。

你手机连 WiFi 的时候,路由器发射的 2.4GHz 无线电波会在房间里到处反射、散射。当这些波碰到你身体的时候,会因为人体的导电性而发生相位和幅度的变化——这就是 CSI(信道状态信息)

简单说,WiFi 芯片在接收每一帧数据的时候,都能知道每个子载波的信号强度和相位发生了什么变化。你的每一次呼吸(胸腔起伏改变反射面)、每一次心跳(微弱的体表振动)、每一个动作(改变信号反射路径),都会体现在 CSI 数据里。

原理图

RuView 做的事情就是:用 ESP32-S3 芯片把 CSI 数据采集下来,通过信号处理流水线清洗噪声,然后喂给神经网络,输出结构化的感知结果。

这里有个关键细节——穿墙感知。WiFi 信号本身就是能穿墙的,利用菲涅尔区几何和多径建模,系统可以检测到墙壁后面的人,最深达 5 米。这是任何摄像头都做不到的。

这系统到底能干什么?

一口气列出来可能会让人觉得在吹牛,但这些能力都有对应的模块和数据支撑:

能力 技术路线 实际表现
姿态估计 CSI 子载波 → DensePose UV 映射 17 个关键点骨架
呼吸检测 带通滤波 → FFT 峰值 6–30 次/分钟
心率提取 带通滤波 → FFT 峰值 40–120 bpm
存在感知 RSSI 方差 + 运动频段功率 延迟 < 1ms
穿墙检测 菲涅尔区 + 多径建模 最深 5 米
多人追踪 卡尔曼滤波 + 重识别嵌入 每个 AP 约 3–5 人

存在检测可能是最实用的功能。ESP32 节点可以在完全离线的情况下独立运行,不需要服务器,直接在芯片上做存在检测和跌倒告警。这意味着哪怕断网了,系统照样工作。

想象一下几个应用场景:

  • 老人独居监测:不装摄像头也能知道老人有没有摔倒、呼吸心率是否正常
  • 办公室空间利用率:不用人脸识别就知道会议室有没有人
  • 安防入侵检测:穿墙感知,关了灯也能发现异常

最妙的是,因为全程不涉及图像采集,所以天然符合 GDPR 和 HIPAA 的隐私合规要求——你根本不需要贴"此处有监控"的告示。

6 美元怎么搭一套感知系统?

硬件清单极其简陋:

  • ESP32-S3(8MB 闪存版):约 9 美元
  • ESP32-S3 SuperMini(4MB 紧凑版):约 6 美元
  • 你家现有的 WiFi 路由器
  • 一根 USB 数据线

一个节点就能做存在检测、呼吸和心率监测。搭个 3 节点的基础网格(约 27 美元),就能做 2D 姿态估计。4-6 个节点的全量配置(约 54 美元),可以实现 3D 姿态重建,精度抖动控制在亚 30 毫米内。

总功耗不到 10 瓦。这比装一个智能摄像头还便宜、还省电。

工程质量令人发指

真正让我对这个项目改观的,不是它做了什么,而是它怎么做的

先看数据:19 个 Rust crate、1300+ 测试、62 份 ADR(架构决策记录)、8 个 DDD 领域模型。这在一个开源项目里已经算相当工程化了。

再看技术栈的分层设计:

wifi-densepose/
├── rust-port/          # Rust 生产级运行时(54000fps)
   └── crates/         # 19 个独立 crate
       ├── core        # 核心类型和 CSI 原语
       ├── signal      # 14 模块信号处理
       ├── nn          # ONNX/Candle 推理
       ├── train       # 8 阶段训练流水线
       ├── sensing-server  # Axum REST/WS
       ├── wasm        # 浏览器端
       └── desktop     # Tauri v2 桌面应用
├── firmware/           # ESP32-S3 固件(C/FreeRTOS)
├── ui/                 # Three.js 3D 可视化
├── v1/                 # Python v1 参考实现
├── monitoring/         # Prometheus + Grafana
└── docs/               # 62 份 ADR + 文档

信号处理从底层 Rust crate 到 ESP32 固件,全部有清晰的领域边界。每个 crate 独立测试,可以按需组合。项目甚至实现了 WASM 边缘推理——直接在 ESP32 上运行 wasm3 解释器执行模型推理,不依赖网络。

快速上手路径

它还做了一个让我觉得很硬核的东西:确定性证明(Deterministic Proof)。运行一条 ./verify 命令,用种子 42 生成的 1000 帧合成数据通过整个流水线,然后和预发布的 SHA-256 哈希比对。如果哈希对不上,说明流水线有改动。这种对确定性的执着,在 ML 项目里很少见。

30 秒体验一下

不买硬件也能玩。最快的方式就是 Docker:

docker pull ruvnet/wifi-densepose:latest
docker run -p 3000:3000 ruvnet/wifi-densepose:latest

打开 http://localhost:3000,你会看到一个 Three.js 驱动的 3D 可视化仪表盘。系统检测不到 ESP32 硬件时会自动回退到模拟模式,用合成数据展示完整的感知效果。

如果连 Docker 都不想装,纯 Python 验证也行:

pip install numpy scipy
./verify

这会证明信号处理流水线是真实且确定性的——不需要 PyTorch、不需要 GPU、不需要任何硬件。

聊几个槽点

虽然这个项目工程质量很高,但说实话也有让人犹豫的地方。

学术到工程的鸿沟。WiFi DensePose 的底层研究来自卡内基梅隆大学,学术 paper 里展示的效果通常是在受控实验室环境下的。到了真实家庭环境——有家具、有多径干扰、有隔壁邻居的 WiFi 污染——精度能打几折,项目文档里没有给出足够的基准数据。这也是很多 WiFi 感知项目被诟病的原因:论文里牛得一塌糊涂,部署到现场拉胯。

ESP32 CSI 的硬件限制。只有 ESP32-S3 支持完整的 CSI 采集,初代 ESP32 和 ESP32-C3 都不行。而且 2.4GHz WiFi 的 CSI 在 5GHz 下完全无法工作,如果你家路由器只开了 5GHz 频段,还得手动切回 2.4GHz。

多人场景的物理天花板。WiFi 感知的物理极限就是每个接入点大约 3-5 人。官方也没藏着掖着,直接标注了"物理极限"三个字。这意味着这东西在小房间、单人场景下效果最好,做成商用的人数统计系统还需要更多节点和更复杂的融合算法。

学习曲线不低。虽然 Docker 一键启动很方便,但真要深入理解信号处理流水线、训练自己的模型、调优 ESP32 固件,门槛还是相当高的。文档虽然详尽(62 份 ADR),但内容量巨大,新手容易迷失。

代码和资源

  • GitHub 仓库:https://github.com/ruvnet/wifi-densepose
  • Docker 镜像ruvnet/wifi-densepose:latest
  • 硬件:ESP32-S3(8MB Flash),单节点约 $6-9
  • 技术栈:Rust + Python + ESP-IDF + Three.js + ONNX Runtime
  • 许可证:开源(具体见仓库)

写在最后

RuView 让我看到了一种可能性:AI 感知不一定非得依赖摄像头

用无处不在的 WiFi 信号做感知介质,有天然的优势——穿墙、无光、隐私友好、硬件成本极低。当然也有明显的劣势——精度不如摄像头、场景适应性差、部署复杂度高。

但作为一个开源项目,它的工程质量、文档深度和架构设计都远超同类项目。就算你现在用不上 WiFi 感知,它的信号处理流水线、ESP32 固件架构、Rust + Python 双代码库的设计模式,都值得学习。

至少,下次有人跟你争论"隐私和安全能不能兼顾"的时候,你可以甩这个项目给他看看。

本文使用 MGO 编辑并发布

关注"何三笔记",回复"mgo" 免费下载使用