【実演】壁の向こうをコードで暴く。WiFi-DensePoseと歩む「視覚なき」追跡の世界
「壁の向こう側を視る」だと? まるで透視魔法のようだが、実はこれ、エンジニアの知恵と執念が詰まったガチガチの技術なのだ。
さあ、コントの幕開けだ。我と一緒に、この禁断のコードを解読してやろう!
通常、人のポーズを推定するにはカメラ(画像)を使う。だが、それだと壁があったり、暗闇だったりすると手も足も出ない。
そこでこいつの出番だ。WiFiの電波(CSI Channel State Information)を利用するのだ。人間が動くとWiFiの電波が反射・減衰する。その「乱れ」をAI(ディープラーニング)で解析し、高精度な3Dポーズとして再現してしまうのだ。
プライバシーの守護神
画像を撮らないから、寝室や脱衣所に置いても「覗き」にならない。エンジニアとしての倫理観も守れるな!
オクルージョン(遮蔽)に強い
壁があろうが段ボールに隠れていようが、WiFiが届けばそこには「存在」が映し出される。
市販のルーターで動く
特殊なレーダーは不要。その辺のメッシュルーターで動くのが、実装のハードルを下げておる。
ふむ、この秘宝を動かすには、それなりの「供物(ハードウェア)」と「呪文(ライブラリ)」が必要だ。
WiFiルーター
CSI(チャネル状態情報)を抽出できるチップセット(Intel 5300やESP32など)を搭載したもの。
GPUサーバー
電波の波形からポーズを計算するのは重労働だ。NVIDIAのGPUは必須と言えよう。
基本的にはPythonの世界だ。以下のコマンドで魔力を注入するのだ。
# リポジトリを召喚!
git clone https://github.com/ruvnet/wifi-densepose.git
cd wifi-densepose
# 依存関係という名の契約を結ぶ
pip install -r requirements.txt
「どうやって波形を画像に変えるんだ?」という疑問に答えよう。 このシステムは、WiFiのデータを一旦「振幅」や「位相」といった行列データに変換し、それをResNetなどの強力なモデルに叩き込む構成になっている。
import torch
from wifi_densepose import PoseEstimator
# 1. 賢者(モデル)を呼び出す
# InvisPoseの学習済み重みをロード
model = PoseEstimator(backbone="resnet50")
model.load_state_dict(torch.load("invispose_weights.pth"))
model.eval()
# 2. WiFiの電波(CSI)を受信
# 本来はドライバ経由で取得するが、ここでは仮の波動として扱うぞ!
wifi_signal = get_wifi_csi_stream()
# 3. 波動をポーズに変換!
with torch.no_grad():
# 電波をテンソルに変換して推論
# 出力はDensePoseフォーマット(UVマップ)だ
output_pose = model(wifi_signal)
# 4. 結果を投影する
visualize_pose(output_pose) # 壁の向こうの勇者が丸見えだ!
勇者よ、これを使えば「高齢者の見守り」や「不審者の検知」が、カメラなしでスマートに行えるようになる。エンジニアとしては、「物理現象(電波)をデータ構造(3Dモデル)に変換する」という最高にエキサイティングな領域なのだ!
「壁を透視するなんて卑怯だ!」と誰かに言われたら、「これは高度な信号処理だ」とドヤ顔で答えてやるがよい!
さて、勇者よ。 まずは貴様のPCでこのリポジトリを動かしてみるか? それとも、CSI(電波情報)をどうやって取得するのか、もう少し詳しく深掘りしてみたいか?