RuView — 用 WiFi 訊號看見人,先別管它能幹嘛,先看訊號怎麼變成骨架
先別管它能拿來做什麼。
關於 RuView 的介紹文,開頭通常會列一串很科幻的能力——穿牆偵測、非接觸量心跳、瓦礫堆裡找倖存者。這些都是真的,但從這裡切進去,你只會記住一堆「哇」,記不住它為什麼做得到。所以倒過來:先看它底層到底在讀什麼,把那一層搞懂,上面那串能力會自己長出來。
它讀的東西,叫 CSI。
第一步:WiFi 訊號裡,藏著比「幾格」多得多的東西
你的手機螢幕上那個「WiFi 訊號幾格」,技術上叫 RSSI——一個單一的強度數字。整個房間的無線電環境,被壓縮成「強」或「弱」一個值。這就像你想知道一首歌長什麼樣,別人只告訴你「大聲」或「小聲」。
CSI(Channel State Information)給的是另一個層級的東西。WiFi 訊號不是單一頻率,它由幾十個 subcarrier(次載波)組成,每個次載波有自己的振幅和相位。CSI 把每一個次載波的狀態都記下來——資訊量比 RSSI 多了幾十倍。
關鍵的物理事實在這裡:電波從路由器發出來,碰到牆、家具、人體會反射和折射,最後才到接收端。一個人走進房間、坐下、甚至只是呼吸,胸腔起伏個幾毫米,這些訊號的路徑就跟著變,每個次載波的振幅相位也跟著變。
換個方式講你會更有感:CSI 是空間的「聲紋」。空房間有空房間的指紋,有人站在門口有另一個指紋,那個人舉起手,指紋又變了。RuView 要做的事,本質上就是學會「讀」這個指紋——從一串數字裡,反推出空間裡發生了什麼。
到這裡,問題就從「WiFi 怎麼可能看到人」變成一個你熟悉的題目了:給定一串高維度的訊號輸入,輸出一個結構化的結果。這是個監督式學習問題。
第二步:從一串數字,到 17 個關節點
訊號進來之後,RuView 的處理鏈是這樣的:
1 | ESP32 抓 CSI 原始數據 |
中間那一步「神經網路推論」是整件事的心臟,它幹的活其實跟視覺領域的姿態估計一模一樣——輸入一坨資料,輸出 17 個 COCO keypoints(就是人體 17 個關節點的座標:頭、肩、肘、腕、髖、膝、踝那些)。差別只在輸入端:視覺方案吃的是 RGB 像素,RuView 吃的是 CSI 訊號。
這個對應關係不是 RuView 自己拍腦袋想的,它建構在 Carnegie Mellon 那篇《DensePose From WiFi》論文上。論文證明的核心命題很乾脆:WiFi 訊號裡的資訊,足夠重建出人體的密集姿態。RuView 做的是把這篇學術論文工程化——從一個能跑的 demo,變成一個從 9 美元晶片到瀏覽器 WASM 都能部署的完整平台。
訓練流程也很值得看,因為它解掉了監督式學習最痛的那一塊——標註:
1 | # 1. 從原始 WiFi CSI 資料自學習(不需要人工標註) |
先用大量沒標註的 CSI 自監督預訓練,再用少量有姿態標註的資料微調——這套「先自學再微調」的路數,跟現在 LLM 的預訓練加微調是同一個哲學。沒人標的資料便宜又多,拿來打底;標好的資料貴又少,拿來校準。
第三步:把模型壓到能塞進 520KB
這裡是 RuView 最有工程味的決定,也是最該學的地方。
它的 AI 模型壓到只有大約 55KB——是的,KB,不是 MB。為什麼要這麼小?因為它要塞進 ESP32-S3 那顆只有 520KB RAM 的晶片裡,在裝置上直接跑完推論,不回雲端。專案還寫了 65 個 no_std 的 WASM 邊緣模組,核心用 Rust 重寫,輔助和訓練管線才用 Python。
這個「edge-first」的選擇,是整個架構往回倒推出來的,不是事後優化。一旦你決定運算要在 9 美元的晶片上、在斷網的廢墟裡完成,模型大小就不是「能小盡量小」的軟目標,而是「不小於某個數就根本跑不起來」的硬約束。約束逼出設計——這跟你在嵌入式或極端低延遲場景寫程式時的取捨完全是同一回事。
順帶一提,全程不碰影像這件事,不只是隱私的賣點,它根源於輸入端就沒有像素。沒有鏡頭、沒有畫面,天然就不會踩 GDPR 和 HIPAA。隱私不是它加上去的功能,是它讀 CSI 而不讀像素的副產品。
現在,那串科幻能力自己長出來了
把底層三步搞懂之後,回頭看那些能力,每一個你都能自己推出來:
- 穿牆偵測:WiFi 本來就穿牆(不然隔壁房間收不到訊號),CSI 讀的是穿牆後的訊號變化,所以偵測能跟著穿牆,靠 Fresnel zone 幾何最深做到 5 公尺
- 非接觸量呼吸心跳:呼吸心跳造成胸腔的微小週期性起伏,這些起伏寫在 CSI 的相位變化裡,用血容積脈波演算法把週期訊號從雜訊撈出來,呼吸 6-30 BPM、心率 40-120 BPM
- WiFi-Mat 災難搜救:同一套呼吸偵測,穿透 30 公分混凝土去找瓦礫下倖存者的呼吸,一台 9 美元的 ESP32-S3,對比動輒數千美元的專業搜救雷達
最適合它的場景也順著這個邏輯落地:老人照護(不用穿戴、坐著不動也偵測得到、長輩接受度高)、醫院病房非接觸監測、零售客流分析(不追蹤 MAC、天然合規)、辦公室空間利用率(按真實佔用調空調)。共同點都是——需要感知人,但裝攝影機太敏感、成本太高、或現場根本沒有視線。
它沒做到的,也要先講清楚
骨架拆完,缺點同樣是從物理限制推出來的,不是「還沒做好」:
- 不是所有 ESP32 都行:原版 ESP32 和 C3 單核心算不動 CSI,必須 ESP32-S3。消費級筆電只給你 RSSI,拿不到 CSI,只能做粗糙的有無偵測
- 空間解析度有限:56 個 subcarrier 的物理天花板擺在那,單一 AP 大約只能分辨 3-5 個人,要更準得多放幾個節點
- 純 WiFi 的姿態精度比不上純視覺,要搭 camera ground-truth 訓練才追到 92.9% PCK@20
- 目前還是 Beta,5 萬顆星代表它在 WiFi 感測開源圈工程化程度領先,但離商業 production 還有距離
最後一條最該記住:星星數衡量的是社群熱度,不是穩定度。看任何熱門 repo,先把「多少人愛」跟「能不能上線」這兩件事分開算。
學它的不只是 WiFi
RuView 真正值得帶走的,不是「WiFi 能看到人」這個獵奇事實,是它示範了一條很乾淨的思路:把一個聽起來像魔法的能力,拆回到「輸入是什麼、要學的對應關係是什麼、約束逼出哪些設計」這三個問題。任何一個你看不懂的酷東西,套這三個問題進去,魔法多半會變成一道你能算的數學題。
下次再看到「用 X 做到 Y」的驚人 demo,別急著驚嘆。先問它讀的到底是什麼訊號——答案常常比 demo 本身更有意思。
相關連結
- GitHub Repo
- 原始論文:《DensePose From WiFi》(Carnegie Mellon University)
- 向量引擎:RuVector
- 授權:MIT License
本文改寫自個人 Notion 知識庫的研究筆記,原始素材來自 ruvnet/RuView 開源專案與 CMU 論文。










