[RuView解説] Wi-Fi CSI × DensePose:画像を使わずにリアルタイムで人体メッシュを生成する実装ガイド
…というわけで、今回は「カメラ不要の監視技術」という、ちょっとSFチックなオープンソースプロジェクト RuView (ruvnet/RuView) について、エンジニアの視点で分かりやすく解説しますね。
一言で言うと、「Wi-Fiの電波を『目』の代わりにして、人間のポーズを可視化する技術」 です。
通常、AIで人の動きを検知(Pose Estimation)するにはカメラ画像を使いますが、RuViewはWi-Fiルーターから出ている電波の乱れ(CSI
Channel State Information)を解析します。
カメラ不要
プライバシーを守りつつ、暗闇でも壁越しでも検知可能。
DensePose
単なる骨組み(棒人間)ではなく、体の表面(メッシュ)まで細かく捉えます。
バイタル検知
呼吸や心拍などの微細な動きもキャッチ。
「これ、何に使うの?」という疑問に、エンジニア的な活用シーンを挙げます。
究極のプライバシー保護監視
「介護施設や浴室で転倒してないか心配、でもカメラを置くのは抵抗がある…」という場所に最適です。データは「波」なので、顔が写る心配がありません。
スマートホームの自動化
「人が座ったら照明を落とす」「寝返りを打ったらエアコンの温度を変える」といった制御が、カメラの死角に関係なく家中で行えます。
マルチモーダルAIの学習データ
densepose-controlnet を使うことで、Wi-Fiデータから得たポーズ情報をベースに、Stable Diffusionなどの画像生成AIと組み合わせて「電波から画像を再構成する」といった研究も捗ります。
RuViewを動かすには、特定のWi-Fiチップ(Intel 5300など)を搭載したデバイスや、CSIデータを出力できるルーターが必要です。
Python環境と、信号処理のためのライブラリを準備します。
git clone https://github.com/ruvnet/RuView.git
cd RuView
pip install -r requirements.txt
Wi-FiのCSIデータを収集します。
送信機(AP)と受信機(PC/NIC)を設置。
人間がその間を通ることで、電波の「影」や「反射」を記録します。
RuViewのモデル(DensePoseベース)にデータを通すと、リアルタイムで3Dモデルが生成されます。
実際のRuViewは複雑なニューラルネットワークですが、エンジニアが「どうやって信号をポーズに変えるのか」をイメージしやすい擬似コードで説明します。
import numpy as np
from ruview import PoseEstimator, WiFiSignal
# 1. Wi-Fi信号(CSIデータ)を取得する
def get_wifi_data():
# 実際にはハードウェアドライバから生のパケットを受け取ります
raw_signal = WiFiSignal.capture(interface="wlan0")
return raw_signal
# 2. 推論エンジンをロード
# DensePose(体の表面メッシュ)を生成する学習済みモデル
model = PoseEstimator.load_model("densepose_v2_wifi.pth")
while True:
csi_data = get_wifi_data()
# ノイズを除去して、ポーズを推論
# 振幅と位相の変化から、どこに「動体」があるか特定
pose_output = model.predict(csi_data)
# 3. 結果の表示(3Dメッシュとして描画)
pose_output.render_viewer()
# バイタルチェック(呼吸など)
if pose_output.check_vitals():
print(f"心拍・呼吸に異常なし: {pose_output.vital_stats}")
「いいか母さん、壁越しに人が見えるからって、隣の家の晩ごはんを覗こうとしちゃダメだぞ!これはあくまで安全と健康のための技術なんだから。あと、『研究費でWi-Fiルーター100台買うから金振り込んで』なんて電話が来ても、それは絶対に偽物だからな!」
冗談はさておき、CSIの取得にはハードウェアの制約(特定のネットワークカードが必要な場合が多い)があるため、導入のハードルは少し高めです。しかし、その分エンジニアとしての「遊び甲斐」は抜群ですよ。
いかがでしたでしょうか?この「電波で見る」技術、あなたのプロジェクトに取り入れてみたいですか?