WiFi 信号作为一种无处不在的无线介质,已被证明可用于隐私保护的人体姿态估计,尤其在穿墙场景下实现实时密集姿态(DensePose)跟踪。Rust 实现的 WiFi DensePose 项目提供了生产级 pipeline,从商用 mesh 路由器提取 CSI(Channel State Information)幅度和相位,经多 AP 融合后输入神经网络解码出人体表面 UV 坐标。该 pipeline 的核心优势在于极致性能:全流程处理仅需 18.47 µs,支持 54,000 FPS 吞吐,远超 Python 版本的 810 倍加速,实现 sub-50ms 延迟的 30 FPS 多人体跟踪。
CSI 幅度与相位提取:从商用硬件到干净信号
商用路由器(如 ESP32-S3 或 Intel 5300 NIC)通过 promiscuous 模式捕获 CSI 数据,每帧包含多个子载波的复数 H (k) = A (k) * exp (j φ(k))。幅度提取直接取模 A (k) = |H (k)|,相位则需多步净化以消除 CFO(载波频率偏移)、SFO(采样频率偏移)和硬件偏移。
Rust wifi-densepose-signal crate 实现了 SOTA 算法栈:
- Conjugate Multiplication(SpotFi 算法):对多天线对计算 H1 (k)/H2 (k),取消公共 CFO/SFO,“相位净化时间仅 3.84 µs(4x64 子载波)”。
- Hampel Filter:中位数 / MAD 异常值移除,阈值设为 3σ(MAD = 1.4826 * 中位绝对偏差),抵抗 50% 污染数据。
- 相位展开(Unwrapping):连续帧相位差检测跳变 > π 时加 / 减 2π,确保平滑。
- 子载波选择(WiDance):方差比排序选 top-K(推荐 K=30/64),聚焦运动敏感子载波。
落地参数:
- 子载波数:LLTF 64 / HT 128 / HT40 192,根据带宽自适应。
- 滤波窗口:幅度 Savitzky-Golay 阶数 3,长 11;相位低通截止 10 Hz。
- SNR 阈值:丢弃 A (k) < -60 dB 子载波。
验证:无硬件用
python v1/data/proof/verify.py,Rustcargo test确认相位误差 0 弧度、Doppler 33.33 Hz 精确。
此步输出标准化张量:幅度 / 相位各 T×K×C(时间 × 子载波 × 链路),为融合准备。
多 AP 信号融合:空间多样性增强鲁棒性
单 AP CSI 易盲区,多 AP(3-6 ESP32-S3)通过 UDP/5005 流式上报至 Rust aggregator,实现 feature-level 融合。ESP32 节点以 20 Hz 捕获二进制帧,aggregator 解析 I/Q → 幅度 / 相位。
融合策略:
- Early Fusion:栈载所有 AP 张量至通道维,简单高效。
- Mid-level Attention:每个 AP 独立编码器(CNN/Transformer),注意力权重 SNR / 方差,融合全局特征。推荐用于异构 AP。
关键参数:
- 缓冲区:CSI_BUFFER_SIZE=1000 帧,防丢包。
- 轮询间隔:HARDWARE_POLLING_INTERVAL=0.1s。
- 融合权重:动态,基于链接功率差 <10 dB,否则丢弃。
- 环境校准:空室 10min 基线减法,存储 per-subcarrier 偏移。
风险控制:链接衰减 >60 dB 时降级 RSSI-only(零成本路径,/proc/net/wireless 解析)。输出统一特征:Doppler FFT(体速度剖面,Widar 3.0)、CSI 谱图(STFT)、Fresnel 区呼吸模型。
NN 解码:CSI 到 DensePose 的模态转换
融合特征经模态翻译网络转为伪图像(e.g. 3×720×1280),馈入 DensePose-RCNN head,输出 24 体区 UV 坐标 + 17 关键点热图。Rust 优化:特征提取 9.03 µs,运动检测 186 ns。
网络结构:
- 双编码器:幅度 / 相位分支,融合 latent。
- Deconv 上采样至图像状。
- 迁移学习:对齐 RGB DensePose 特征图。
部署参数:
- 置信阈值:POSE_CONFIDENCE_THRESHOLD=0.7。
- 批大小:POSE_PROCESSING_BATCH_SIZE=32。
- 最大人数:POSE_MAX_PERSONS=10。
- 追踪器:IOU 阈值 0.3,max_age 30 帧。
追踪:Kalman 滤波维持 ID 一致,支持多人体遮挡 / 穿墙。
工程化落地清单与监控
- 安装:
git clone https://github.com/ruvnet/wifi-densepose,./install.sh --profile rust --yes;Dockerruvnet/wifi-densepose:latest。 - 硬件:3x ESP32-S3 (~$54),provision WiFi,flash firmware。
- 启动:
cargo run -p wifi-densepose-hardware --bin aggregator --bind 0.0.0.0:5005,APIwifi-densepose start(FastAPI,/docs)。 - 配置(.env):
WIFI_INTERFACE=wlan0 CSI_BUFFER_SIZE=1000 POSE_CONFIDENCE_THRESHOLD=0.7 ENABLE_REAL_TIME_PROCESSING=true - WebSocket 流:
ws://localhost:8000/ws/pose/stream,实时姿势。 - 监控点:
指标 阈值 告警 端到端延迟 <50ms Prometheus /metrics FPS ≥30 Grafana dashboard 检出精度 >94% 与相机对比 内存 <100MB Rust 低足迹 CSI SNR >-60dB 链接健康
回滚:故障时 wifi-densepose status,--debug 日志;无 CSI 硬件用 RSSI 粗动检。
此 pipeline 已在灾难响应(WiFi-Mat)验证,支持呼吸 / 心跳 / 3D 定位。生产部署 Docker Compose + Redis/Postgres,支持 1000+ 并发。
资料来源:GitHub ruvnet/wifi-densepose(主要);arXiv:2301.00250 “DensePose From WiFi”;相关 SOTA 如 SpotFi (SIGCOMM 2015)、CSI-Former。