芥末
发布于 2026-03-02 / 0 阅读
0
0

WiFi DensePose 入门:用 CSI 做人体姿态感知的原理与现实边界

wifi-densepose 是一个围绕 WiFi 感知做实验的开源项目,地址如下:

https://github.com/ruvnet/wifi-densepose

它想解决的问题很有吸引力:不用摄像头,只利用 WiFi 信号的变化,判断房间里是否有人、人的姿态大概是什么样,甚至进一步估计呼吸率、心率等生命体征。

这个方向并不是玄学。WiFi 信号在室内传播时,会被墙壁、家具、人体反射和散射。人体移动、手臂摆动、胸腔呼吸起伏,都会改变无线信道的状态。只要硬件能拿到足够细的信号变化,再配合信号处理和机器学习模型,就有机会从这些变化中恢复人体活动信息。

但要把“有信号变化”变成“论文级 DensePose 人体表面还原”,中间隔着硬件、数据集、标注、训练、泛化能力等一整套复杂工程。wifi-densepose 当前更适合作为 WiFi 感知 Demo 或研究原型来体验,不应直接当作已经成熟可落地的穿墙人体 DensePose 系统。

CSI 是什么:WiFi 感知真正依赖的数据

普通应用通常只能拿到 WiFi 信号强度,比如手机上显示的几格信号。这类信息太粗,最多反映“信号强不强”,很难支撑细粒度人体动作分析。

WiFi 感知更依赖 Channel State Information(信道状态信息,CSI)。CSI 描述的是无线信号从发射端到接收端经过信道后的变化情况,通常包含每个子载波上的:

数据含义用途
幅度信号在该子载波上的强弱变化反映遮挡、反射、路径衰减
相位信号波形相对于参考的偏移对微小位移更敏感,但也更容易受硬件误差影响
天线对信息多发多收天线之间的信道差异提供空间维度信息
RSSIReceived Signal Strength Indicator(接收信号强度指示)可作为辅助特征,但粒度不如 CSI

可以把 CSI 理解成“WiFi 信号穿过房间后的细粒度指纹”。当人站在不同位置、摆出不同动作、胸腔有微小起伏时,这个指纹会发生变化。

整体流程大致如下:

flowchart LR
    A[WiFi 发射端] --> B[室内环境]
    B --> C[人体反射/遮挡/散射]
    C --> D[WiFi 接收端]
    D --> E[采集 CSI 幅度和相位]
    E --> F[滤波/校准/特征提取]
    F --> G[机器学习或深度学习模型]
    G --> H[存在检测]
    G --> I[人体姿态估计]
    G --> J[呼吸率/心率估计]

这里最关键的一点是:普通 WiFi 设备不一定能直接导出 CSI。很多消费级路由器和电脑网卡只向系统暴露 RSSI,不开放每个子载波的 CSI 数据。要做稳定实验,通常需要支持 CSI 导出的网卡、固件、驱动,或者使用 ESP32 等可采集 CSI 的设备。

DensePose 与普通姿态估计有什么区别

人体姿态估计有很多层级。

最简单的是存在检测:房间里有没有人。

再进一步是关键点检测:识别头、肩、肘、膝等骨架点。

DensePose 更难。DensePose 的目标不是只找几个关节点,而是把人体可见区域映射到三维人体表面的坐标系统中。典型 DensePose 会把人体分成多个区域,并为人体表面点预测 UV 坐标。

能力层级输出结果难度
存在检测是否有人、是否有人移动较低
活动识别走路、坐下、挥手等类别中等
关键点姿态头、肩、肘、膝等 2D/3D 关节较高
DensePose人体表面区域与 UV 坐标映射很高
生命体征呼吸率、心率对信噪比和静止条件要求高

CMU 曾有研究探索 DensePose From WiFi:使用深度神经网络,把 WiFi CSI 的幅度和相位映射到人体表面区域与 UV 坐标。这类方案想达到较好效果,需要满足几个条件:

  • 有能稳定输出 CSI 的专用硬件;
  • 室内环境、发射端、接收端位置要经过设计;
  • 需要采集大量 WiFi CSI 数据;
  • 需要同步摄像头或其他传感器生成姿态标注;
  • 模型训练需要大量迭代、复杂损失函数和验证集;
  • 换房间、换设备、换人群后,效果可能明显下降。

也就是说,论文级 DensePose from WiFi 是一个完整研究系统,不是简单启动一个 Web 页面就能完成的功能。

wifi-densepose 当前更接近什么

wifi-densepose 的 README 描述了不少目标能力,比如人体姿态、生命体征、存在检测等。从技术方向看,这些目标都属于 WiFi 感知范畴;但从项目状态看,当前实现与“完整 DensePose-quality estimation”仍有距离。

项目维护者在 Issue #39 中明确说明,Full DensePose-quality estimation 还没有完成,相关神经网络训练仍处于 roadmap 阶段。

因此,对它的定位更合理:

项目形态更接近的描述
已经成熟的穿墙 DensePose 系统不适合这样理解
可直接替代摄像头的人体姿态产品不适合这样理解
WiFi CSI 感知实验框架更接近
带可视化界面的研究 Demo更接近
用于理解 CSI 数据流和端到端流程适合

换句话说,它可以帮助理解 WiFi 感知系统如何搭建数据流、如何展示结果、如何接入测试信号,但不能把 README 中的远期目标等同于当前已经完整实现的能力。

一个 WiFi 姿态估计系统通常怎么工作

为了避免把概念讲虚,可以把 WiFi DensePose 类系统拆成四层:硬件采集层、信号处理层、模型推理层、可视化层。

flowchart TB
    subgraph Hardware[硬件采集层]
        TX[WiFi 发射端]
        RX[支持 CSI 的接收端]
    end

    subgraph Signal[信号处理层]
        CSI[CSI 原始数据]
        Clean[相位校准/去噪/滤波]
        Feature[特征窗口]
    end

    subgraph Model[模型推理层]
        Presence[存在检测模型]
        Pose[姿态估计模型]
        Vital[生命体征估计]
    end

    subgraph UI[可视化层]
        Web[Web Dashboard]
        Skeleton[2D/3D 姿态展示]
        Metrics[呼吸率/心率指标]
    end

    TX --> RX
    RX --> CSI
    CSI --> Clean
    Clean --> Feature
    Feature --> Presence
    Feature --> Pose
    Feature --> Vital
    Presence --> Web
    Pose --> Skeleton
    Vital --> Metrics

1. 硬件采集层

WiFi 发射端持续发包,接收端采集 CSI。理想情况下,接收端能拿到多个子载波、多个天线对上的幅度和相位。

如果只有 RSSI,信息量通常不够。RSSI 是整体强度,CSI 才是细粒度信道状态。

2. 信号处理层

CSI 原始数据不能直接喂给模型。相位会受到硬件时钟、载波频偏、采样偏移影响,幅度也会有噪声和环境扰动,所以通常要做处理:

flowchart LR
    A[原始 CSI] --> B[异常值剔除]
    B --> C[相位展开与校准]
    C --> D[滤波去噪]
    D --> E[滑动时间窗口]
    E --> F[幅度/相位特征]
    F --> G[模型输入张量]

常见问题包括:

  • 人没动时也会有噪声;
  • WiFi 设备自身会带来相位漂移;
  • 多径反射让同一个动作在不同房间呈现不同 CSI 模式;
  • 人体姿态变化和环境变化可能混在一起;
  • 多人场景比单人场景复杂很多。

3. 模型推理层

模型可以做不同任务:

  • 二分类:是否有人;
  • 多分类:动作类别;
  • 回归:呼吸率、心率;
  • 关键点估计:输出关节坐标;
  • DensePose:输出人体区域与 UV 坐标。

任务越细,训练数据越难准备。尤其 DensePose 需要对齐 WiFi CSI 与视觉标注,数据采集成本远高于普通分类任务。

4. 可视化层

wifi-densepose 提供 Web 可视化界面,用来展示姿态或指标结果。这个界面对理解端到端数据流很有帮助,但 UI 能显示骨架或人体模型,不代表底层模型已经达到论文级精度。

生命体征监测为什么更难

呼吸和心跳确实会影响 WiFi 信号。呼吸带来的胸腔周期性起伏相对明显,心跳引起的位移更小,对信噪比要求更高。

典型生命体征估计流程类似这样:

flowchart LR
    A[CSI 时间序列] --> B[选择稳定子载波]
    B --> C[去除人体大幅运动]
    C --> D[带通滤波]
    D --> E[频谱分析]
    E --> F[呼吸率/心率估计]

这类能力通常有苛刻条件:

指标相对难度典型要求
呼吸率中等人尽量静止,环境干扰较少
心率信噪比更高,硬件稳定性更强
多人生命体征很高需要区分不同人体反射路径
穿墙生命体征很高墙体衰减、多径和噪声更严重

如果人在走动、转身、挥手,大幅动作会淹没呼吸和心跳造成的微弱周期信号。生命体征监测更适合静止场景,比如坐着或躺着,而不是复杂活动场景。

什么时候适合尝试 wifi-densepose

场景是否适合原因
学习 CSI 数据流适合可以理解 WiFi 感知系统的输入、处理和输出
做 WiFi sensing Demo适合Web 可视化能帮助快速体验流程
验证 Docker 部署流程适合官方镜像可以快速启动界面
复现论文级 DensePose 效果不适合直接期待完整 DensePose-quality estimation 尚未实现
生产环境人体监控不适合稳定性、泛化、隐私和合规都需要额外工程
医疗级生命体征监测不适合精度、认证、硬件条件都达不到医疗要求

它最适合的用法是:把它当成 WiFi 感知方向的入口项目,理解 CSI、信号流、可视化和硬件接入方式,而不是把它当成成熟人体姿态产品。

Docker 快速体验

如果只是想先看 Web 界面和项目结构,可以使用 Docker 启动。

docker pull ruvnet/wifi-densepose:latest

docker run --rm \
  -p 3000:3000 \
  -p 3001:3001 \
  -p 5005:5005/udp \
  ruvnet/wifi-densepose:latest

启动后访问:

http://localhost:3000

端口含义可以按这个方式理解:

端口协议作用
3000TCPWeb 可视化界面
3001TCP可能用于前后端通信或辅助服务
5005UDP接收外部 CSI 或测试数据流

如果还没有 ESP32 或支持 CSI 的网卡,可以先使用项目内置的测试信号或录制数据,确认容器、界面、数据流能够跑通。等流程没问题后,再投入时间配置硬件。

接入真实硬件前要确认的事

真实 CSI 采集比启动 Docker 麻烦得多。动手前最好确认这些问题:

检查项需要确认什么
网卡或开发板是否能导出 CSI,而不是只能读 RSSI
驱动和固件是否支持 CSI 采样、频段、带宽、天线配置
数据格式输出的 CSI 是否能被项目解析
时间同步CSI 与姿态标签或参考信号是否能对齐
环境稳定性房间布局、发射端和接收端位置是否固定
人数和动作单人、多人、静止、运动场景要分开验证
标注数据若要训练模型,是否有可靠姿态标签

很多 WiFi 感知实验失败,不是模型代码写错,而是 CSI 数据质量不够。相位没有校准、采样不稳定、环境变化太大,都会让模型输出变得不可用。

关键限制

普通 WiFi 不等于可用 CSI

“用 WiFi 检测人体”容易让人误解成只要家里有路由器就能做。实际不是这样。系统需要的是可导出的 CSI 数据,而不是普通系统 API 里的 WiFi 信号强度。

换环境后效果可能大幅下降

WiFi 信号受房间结构影响很大。同一个动作在不同房间、不同家具布局、不同路由器位置下,CSI 模式可能完全不同。模型如果只在少量场景训练,泛化能力通常有限。

DensePose 需要大量标注

DensePose 不是普通分类任务。要训练这类模型,需要把 CSI 时间片和人体表面标注对应起来,通常需要同步摄像头或其他传感器提供标签。没有数据集和训练过程,很难凭空得到高质量 DensePose 输出。

生命体征不是医疗级能力

呼吸率和心率估计对静止条件、信噪比、采样质量都很敏感。它可以作为研究方向探索,但不能直接用于医疗诊断或安全关键场景。

隐私问题仍然存在

不用摄像头不代表没有隐私风险。WiFi 感知可以推断房间内是否有人、人在做什么动作,这类数据仍然属于敏感信息。实验和部署都应取得明确授权。

对 wifi-densepose 的合理预期

wifi-densepose 展示了一个有趣方向:WiFi 不只是联网工具,也可以作为环境感知传感器。它背后的技术核心是 CSI,通过分析信道幅度和相位变化,推断人体存在、运动、姿态和微弱生命体征。

不过,当前开源实现与论文级 DensePose from WiFi 之间仍有明显距离。更合适的使用方式是:

  • 用 Docker 跑通界面和流程;
  • 用测试数据理解 CSI 到可视化的链路;
  • 准备支持 CSI 的硬件;
  • 小范围验证存在检测或简单动作识别;
  • 再考虑复杂姿态估计和生命体征任务。

如果目标是学习 WiFi 感知,它是一个不错的入口;如果目标是直接得到稳定的穿墙全身 DensePose,还需要硬件、数据集、模型训练和大量实验验证。


评论