Hotdry.
ai-systems

Rust 实现的 WiFi CSI 密集人体姿态流水线:穿墙实时跟踪

基于 InvisPose 的 Rust 高性能实现,详解从商用路由器提取 CSI 幅度/相位、多 AP 信号融合及 NN 密集姿态解码的工程化 pipeline 与参数配置。

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,Rust cargo 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 一致,支持多人体遮挡 / 穿墙。

工程化落地清单与监控

  1. 安装git clone https://github.com/ruvnet/wifi-densepose./install.sh --profile rust --yes;Docker ruvnet/wifi-densepose:latest
  2. 硬件:3x ESP32-S3 (~$54),provision WiFi,flash firmware。
  3. 启动cargo run -p wifi-densepose-hardware --bin aggregator --bind 0.0.0.0:5005,API wifi-densepose start(FastAPI,/docs)。
  4. 配置(.env):
    WIFI_INTERFACE=wlan0
    CSI_BUFFER_SIZE=1000
    POSE_CONFIDENCE_THRESHOLD=0.7
    ENABLE_REAL_TIME_PROCESSING=true
    
  5. WebSocket 流ws://localhost:8000/ws/pose/stream,实时姿势。
  6. 监控点
    指标 阈值 告警
    端到端延迟 <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。

查看归档