RuView 소개
RuView는 카메라나 웨어러블 기기 없이 일반 WiFi 신호의 변화만으로 공간 안의 사람을 감지하고, 호흡과 심박 같은 생체 신호까지 측정하는 WiFi 센싱(WiFi sensing) 플랫폼 입니다. 사람이 움직이거나 호흡할 때 공기 중을 채우고 있는 WiFi 전파에는 미세한 교란이 생기는데, RuView는 ESP32 센서로 캡처한 채널 상태 정보(Channel State Information, CSI)에서 이 교란을 추출해 누가 어디에 있고 어떤 상태인지 추론합니다.
RuView는 카메라 기반 모니터링의 사생활 노출 문제와 어두운 환경에서의 한계, 그리고 웨어러블 기기가 강제하는 착용 부담을 동시에 피하면서, 벽 너머의 존재 감지, 수면 중 호흡·심박 측정, 낙상 감지 같은 응용을 노립니다. ESP32-S3 한 대 기준으로 약 $9 의 저가 하드웨어에서 동작하며, Hugging Face에 공개된 사전 학습 모델 ruvnet/wifi-densepose-pretrained 를 4비트로 양자화하면 8 KB 안에 들어가는 것 이 특징입니다.
저장소는 Rust로 작성되어 있고, RuVector 와 Cognitum Seed 위에서 동작합니다. 클라우드 의존 없이 엣지에서 학습과 추론을 모두 수행하며, 모든 측정값은 Ed25519 기반 witness chain으로 암호학적으로 서명됩니다. Home Assistant 통합 문서 와 Matter 브리지(ADR-122) 를 통해 Apple Home, Google Home, Alexa, SmartThings와 직접 연동되며, 노드 하나당 11개의 원시 신호와 10개의 추론된 의미 상태(누군가 자고 있음, 잠재적 위기, 방 활성화, 노약자 무활동 이상, 회의 중, 욕실 점유, 낙상 위험 상승, 침대 이탈, 무동작, 다중 룸 이동 등) 등 21개 엔터티와 3개의 Home Assistant 블루프린트를 함께 제공합니다.
RuView의 동작 원리와 전체 파이프라인
RuView의 신호 처리 파이프라인은 README의 "How It Works" 섹션에 한 장의 흐름도로 정리되어 있습니다. WiFi 라우터가 내보내는 전파가 사람의 몸에 부딪혀 산란되면, ESP32 메쉬가 채널 1·6·11에서 CSI를 캡처하고, 신호 처리·자기 학습 인코더·신경망을 차례로 거쳐 포즈와 생체 신호로 변환됩니다.
각 단계는 다음과 같이 이어집니다.
- 다중 대역 융합(Multi-Band Fusion): 3개 채널 × 56개 서브캐리어를 합쳐 링크당 168개의 가상 서브캐리어를 만들어 해상도를 확보합니다.
- 다중 정적 융합(Multistatic Fusion): N×(N-1) 링크에 어텐션 가중을 적용해 여러 관측 지점에서의 신호를 하나의 임베딩으로 묶습니다.
- 간섭성 게이트(Coherence Gate): 잡음이 큰 측정값을 거르고, 며칠 동안 재튜닝 없이도 안정적으로 동작하게 합니다.
- 신호 처리: Hampel 필터, SpotFi, Fresnel 영역 모델, BVP(혈류량 파형), 스펙트로그램을 적용해 깨끗한 특징을 추출합니다.
- AI 백본(RuVector): 어텐션·그래프 알고리즘·압축·필드 모델을 묶은 신호 처리 계층입니다.
- 시그널 라인 프로토콜(CRV): gestalt → sensory → topology → coherence → search → model의 6단계 게슈탈트 처리 파이프라인입니다.
- 출력: 실시간 포즈(17 키포인트), 호흡·심박, 룸 핑거프린트, 드리프트 경보가 산출됩니다.
이 흐름은 ADR-024(자기 지도 CSI 임베딩 모델) 와 ADR-027(교차 환경 도메인 일반화 MERIDIAN) 으로 보강되어, 카메라 정답 없이도 부트스트랩이 가능하고 학습한 방 외의 환경에서도 동작하도록 설계되어 있습니다.
RuView의 주요 감지 기능
RuView가 CSI 신호에서 추출하는 신호와 적용된 처리 기법은 README 상단의 기능 표 에 정리되어 있습니다. 자주 쓰이는 항목만 옮기면 다음과 같습니다.
- 호흡 측정(Breathing rate): wrapped phase에 0.1–0.5 Hz 대역 필터와 circular variance, zero-crossing BPM을 적용해 6–30 BPM 범위를 실시간 추정합니다.
- 심박 측정(Heart rate): 0.8–2.0 Hz 대역 필터와 zero-crossing 알고리즘으로 40–120 BPM 범위를 실시간 추정합니다.
- 존재 감지(Presence detection): Hugging Face에 공개된 학습 헤드와, 모델 없이 동작하는 phase-variance 폴백을 함께 제공합니다. 약 30초의 환경 캘리브레이션 후 1ms 안에 추정합니다.
- CSI 임베딩(CSI embeddings): 128차원 contrastive 인코더이며, 4비트 양자화 변형은 8 KB 안에 들어갑니다. Apple M4 Pro 기준 초당 164,183개의 임베딩을 생성합니다.
- 17 키포인트 포즈 추정(Pose estimation): Candle 런타임 위에서
pose_v1.safetensors를 로드하는cog-pose-estimation모듈 로, Raspberry Pi 5 기준 콜드 스타트가 8.4ms 라고 ADR-101 에 명시되어 있습니다. - 낙상 감지(Fall detection): phase-acceleration 임계치와 3프레임 디바운스, 5초 쿨다운을 결합해 200ms 이내의 감지를 목표로 합니다.
- 다중 인원 카운팅: 적응형 P95 정규화와 런타임 조정 가능한 dedup factor를 사용하며,
occupancy-zones,elevator-count,queue-length,customer-flow,clean-room,person-matching같은 학습된 카운터를 별도 Cog로 제공합니다. - 벽 너머 감지(Through-wall sensing): Fresnel 영역 기하와 multipath 모델을 사용해 신호 조건에 따라 약 5m 까지의 감지를 지원합니다.
- 다중 주파수 메쉬: 6개 대역을 채널 호핑하고 TDM 슬롯 스케줄링으로 합치는 ADR-029 구조로 센싱 대역폭을 3배 확장합니다.
- 3D 포인트 클라우드 융합: MiDaS의 카메라 깊이, WiFi CSI, mmWave 레이더를 22ms 파이프라인으로 묶어 한 프레임당 19,000개 이상의 점을 생성합니다.
RuView는 카메라 정답 없이 자체 학습한 단계의 PCK@20이 약 2.5%이며, 카메라 정답으로 보강한 학습이 35%+ 를 목표로 진행 중이지만 ADR-079 의 P7–P9 단계가 아직 완료되지 않았다고 자체 명시하고 있습니다. RuView는 "Beta Software — Under active development. APIs and firmware may change" 라고 README 상단에 경고를 박아 두었으며, ESP32-C3와 1세대 ESP32는 단일 코어로 인해 CSI DSP가 불가능해 지원 대상에서 제외됩니다.
RuView의 자기 지도 학습과 모델 구성
RuView는 카메라나 라벨 없이 raw CSI 데이터만으로도 부트스트랩이 가능한 자기 지도(self-supervised) 학습 파이프라인 을 핵심 자산으로 삼고 있습니다. WiFi 신호를 128차원 핑거프린트로 변환하는 contrastive 인코더는 60,000 프레임 / 61만 contrastive triplet에 대해 1,220만 스텝을 학습했으며, 검증 세트에서 존재 감지 정확도 100% 를 보고합니다.
전체 모델은 ESP32 한 대의 520 KB 메모리 가운데 55 KB만 차지하도록 설계되어 있습니다.
| 구성 요소 | 파라미터 | ESP32 메모리 |
|---|---|---|
| Transformer 백본 | ~28,000 | 28 KB |
| 임베딩 프로젝션 헤드 | ~25,000 | 25 KB |
| 방별 MicroLoRA 어댑터 | ~1,800 | 2 KB |
| 합계 | ~55,000 | 55 KB |
각 방에 1,792개 파라미터의 MicroLoRA 어댑터를 끼우는 방식으로 환경에 적응하며, EWC++ 정규화로 기존에 학습한 지식을 보존합니다. 결과적으로 새 공간에 배포하면 약 10분 안에 학습이 완료된다고 ADR-024 는 안내합니다. 핑거프린트 인덱스는 env_fingerprint(방 식별), activity_pattern(활동 분류), temporal_baseline(이상 탐지), person_track(개인 재식별) 네 종류로 구분돼 검색·분류·이상 탐지에 그대로 활용됩니다.
RuView의 엣지 모듈 카탈로그
RuView는 단일 도구가 아니라 105개 엣지 모듈(Cog)로 구성된 카탈로그 를 함께 배포합니다. 각 모듈은 약 400 KB 내외의 서명된 바이너리로, Cognitum-V0 어플라이언스에서 WiFi-DensePose 센싱 스택과 나란히 실행됩니다. 카탈로그는 OTA로 갱신되고, 모든 바이너리는 ADR-100 의 Ed25519 서명으로 검증된 뒤에 설치됩니다.
카탈로그는 헬스(14), 보안(14), 빌딩(11), 리테일(7), 산업(7), 연구(12), AI(15), 스웜(11), 시그널(6), 네트워크(1), 개발자(7)의 11개 도메인으로 나뉩니다. 대표적인 모듈로는 수면 무호흡을 감지하는 sleep-apnea (4 KB), 심박 부정맥을 잡는 cardiac-arrhythmia (8 KB), 보행 분석으로 낙상 위험을 점수화하는 gait-analysis (12 KB), 그리고 신호 재생·인젝션 공격을 차단하는 prompt-shield (10 KB) 가 있습니다. 모든 모듈은 OTA 레지스트리(/api/v1/edge/registry, ADR-102)에서 받아와 어플라이언스에 설치할 수 있습니다.
RuView의 설치 및 사용법
가장 빠른 평가는 시뮬레이션 데이터가 포함된 Docker 이미지를 사용하는 방법입니다.
docker pull ruvnet/wifi-densepose:latest
docker run -p 3000:3000 ruvnet/wifi-densepose:latest
# http://localhost:3000 접속
실측 데이터를 다루려면 ESP32-S3 보드(약 $9)에 firmware/esp32-csi-node 펌웨어를 적재하고 WiFi 자격증명을 프로비저닝합니다.
python -m esptool --chip esp32s3 --port COM9 --baud 460800 \
write_flash 0x0 bootloader.bin 0x8000 partition-table.bin \
0xf000 ota_data_initial.bin 0x20000 esp32-csi-node.bin
python firmware/esp32-csi-node/provision.py --port COM9 \
--ssid "YourWiFi" --password "secret" --target-ip 192.168.1.20
WiFi 6 / 802.15.4 연구용으로는 ESP32-C6 보드를 같은 펌웨어로 빌드할 수 있습니다. 보드 추가에 따른 변경 사항은 ADR-110 에 정리되어 있습니다.
cd firmware/esp32-csi-node
idf.py set-target esp32c6 && idf.py build
idf.py -p COM6 flash
Python 패키지는 PyPI에서 동일한 PyO3 휠로 배포됩니다. asyncio WebSocket과 MQTT 클라이언트가 필요하면 [client] extras를 함께 설치합니다.
pip install ruview # 또는 pip install wifi-densepose
pip install "ruview[client]" # WebSocket / MQTT 클라이언트 포함
from ruview import BreathingExtractor, HeartRateExtractor
from ruview.client import SensingClient, RuViewMqttClient
Hugging Face에서 사전 학습 모델을 받을 때는 huggingface_hub 를 사용합니다.
pip install huggingface_hub
huggingface-cli download ruvnet/wifi-densepose-pretrained \
--local-dir models/wifi-densepose-pretrained
이때 사전 학습 모델은 JSONL 형식의 RVF로 배포되며, Python 학습/추론 경로(safetensors) 는 그대로 사용할 수 있지만 라이브 센싱 서버는 아직 JSONL 컨테이너를 파싱하지 못합니다. 라이브 파이프라인을 돌릴 때는 --model 옵션 없이 휴리스틱 모드로 실행하라고 README의 가이드 는 안내합니다. 양자화 변형은 model-q2.bin(4 KB), model-q4.bin(8 KB, 권장), model-q8.bin(16 KB), model.safetensors(48 KB) 의 네 종류가 함께 들어 있습니다.
RuView의 Claude Code·Codex 플러그인
RuView는 온보딩, ESP32 펌웨어 빌드/플래시, 프로비저닝, 센싱 앱 실행, 모델 학습, 다중 정적 센싱, 검증까지의 워크플로를 9개 스킬, 7개 /ruview-* 명령, 3개 에이전트로 묶은 Claude Code 플러그인 을 함께 배포합니다. 마켓플레이스 매니페스트는 저장소 루트의 .claude-plugin/marketplace.json 입니다.
# Claude Code 안에서 마켓플레이스에 추가 후 설치
/plugin marketplace add ruvnet/RuView
/plugin install ruview@ruview
# 또는 로컬 클론에서 단발 실행
claude --plugin-dir ./plugins/ruview
ruview-start(온보딩), ruview-flash(펌웨어 빌드/플래시), ruview-provision(WiFi·메쉬 슬롯 설정), ruview-app(존재 감지·생체 신호·포즈·수면·MAT·포인트 클라우드 실행), ruview-train(모델 학습/평가/배포), ruview-advanced(다중 정적·토모그래피), ruview-verify(테스트·결정적 증명·witness 번들) 7개 명령이 매핑돼 있습니다. Codex CLI 사용자는 plugins/ruview/codex/prompts/*.md 를 ~/.codex/prompts/ 로 복사하면 동일한 명령을 사용할 수 있습니다.
RuView의 라이선스
RuView는 MIT 라이선스 로 공개되어 있어 개인 및 상업적 목적으로 자유롭게 사용할 수 있습니다.
RuView 공식 홈페이지
RuView 프로젝트 GitHub 저장소
RuView 사전 학습 모델 다운로드
더 읽어보기
이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. ![]()
파이토치 한국 사용자 모임
이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일
로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)
아래
쪽에 좋아요
를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ ![]()

