개요
RuView는 ESP32 센서를 통해 WiFi 채널 상태 정보(CSI)를 수집하여 벽 너머의 인체 감지, 호흡 및 심박수 모니터링, 자세 추정을 구현합니다. 완전히 엣지 디바이스에서 실행되며 클라우드나 인터넷이 필요 없습니다.
README 미리보기
# π RuView\n\n\n \n \n \n\n\n> **Beta Software** — Under active development. APIs and firmware may change. Known limitations:\n> - ESP32-C3 and original ESP32 are not supported (single-core, insufficient for CSI DSP)\n> - Single ESP32 deployments have limited spatial resolution — use 2+ nodes or add a [Cognitum Seed](https://cognitum.one) for best results\n> - Camera-free pose accuracy is limited (PCK@20 ≈ 2.5% with proxy labels) — [camera ground-truth training](docs/adr/ADR-079-camera-ground-truth-training.md) targets **35%+ PCK@20**; the pipeline is implemented, but the data-collection and evaluation phases (ADR-079 P7–P9) are still pending, so no measured camera-supervised PCK@20 has been published yet\n>\n> Contributions and bug reports welcome at [Issues](https://github.com/ruvnet/RuView/issues).\n\n## **See through walls with WiFi** ##\n\n**Turn ordinary WiFi into a spatial intelligence / sensing system.** Detect people, measure breathing and heart rate, track movement, and monitor rooms — through walls, in the dark, with no cameras or wearables. Just physics.\n\n### π RuView is a WiFi sensing platform that turns radio signals into spatial intelligence.\n\nEvery WiFi router already fills your space with radio waves. When people move, breathe, or even sit still, they disturb those waves in measurable ways. RuView captures these disturbances using Channel State Information (CSI) from low-cost ESP32 sensors and turns them into actionable data: who's there, what they're doing, and whether they're okay.\n\n**What it senses:**\n- **Presence and occupancy** — detect people through walls, count them, track entries and exits\n- **Vital signs** — breathing rate and heart rate, contactless, while sleeping or sitting\n- **Activity recognition** — walking, sitting, gestures, falls — from temporal CSI patterns\n- **Environment mapping** — RF fingerprinting identifies rooms, detects moved furniture, spots new objects\n- **Sleep quality** — overnight monitoring with slee
FAQ (5)
문제 해결WiFi CSI 인체 감지는 사기인가요? 왜 제 노트북에서는 작동하지 않나요?
이는 사기극이 아니라, 잘 정립된 기술입니다. 가장 흔한 문제는 지원되지 않는 하드웨어를 사용하는 것입니다. 특정 칩셋만이 Channel State Information (CSI)을 노출합니다. 대부분의 소비자용 WiFi 어댑터(노트북 내장 WiFi 포함)는 CSI를 지원하지 않습니다. 호환되는 하드웨어를 사용하십시오: ESP32-S3 (가장 저렴하고 쉬움), 수정된 펌웨어가 적용된 Intel 5300 NIC, 또는 ath9k 패치가 적용된 Atheros AR9580. ESP32-S3의 경우 firmware/esp32-csi-node/에서 펌웨어를 플래시하고 단계별 튜토리얼(issue #34 참조)을 따르십시오. 안테나 근처를 걸으며 aggregator의 진폭 변화를 관찰하십시오. 지원되는 하드웨어를 사용한 후에도 문제가 지속되면 새 issue에 시리얼 출력과 aggregator 로그를 제공하십시오.
문제 해결Docker 이미지 ghcr.io/ruvnet/ruview를 pull할 때 'denied' 오류가 발생하는 이유는 무엇인가요?
올바른 이미지 이름은 ghcr.io/ruvnet/wifi-densepose:latest이며, ghcr.io/ruvnet/ruview가 아닙니다. 저장소 소유자는 컨테이너 이름을 wifi-densepose로 지정했습니다. GitHub Container Registry에서 docker pull ghcr.io/ruvnet/wifi-densepose:latest 또는 Docker Hub에서 docker pull ruvnet/wifi-densepose:latest를 사용하세요. amd64와 arm64 아키텍처 모두 사용 가능하며 공개적으로 접근할 수 있습니다.
문제 해결sensing-server에서 시각화 페이지를 열 때 404 오류를 해결하는 방법?
서버는 UI 디렉토리에서 정적 파일을 제공합니다 (기본값: 바이너리 기준 ../../ui). 404 오류가 발생하면 경로가 잘못되었을 가능성이 높습니다. ui 폴더가 서버의 작업 디렉토리에서 존재하고 접근 가능한지 확인하세요. --ui-path 플래그로 재정의할 수 있습니다. 예: --ui-path ./ui 또는 절대 경로. 서버를 다시 시작하고 로그에 올바른 UI 경로가 표시되는지 확인하십시오.
문제 해결ESP32 CSI 노드가 state=8, yield=0pps를 표시하는 이유와 UDP 데이터가 센싱 서버에 도달하지 않는 이유는 무엇인가요?
사전 빌드된 릴리스 바이너리는 CSI 수집을 Wi-Fi 관리 프레임(비콘, 프로브)으로만 제한합니다. 이로 인해 CSI 콜백 속도가 크게 저하되어(종종 약 18초 간격) 집계기가 상태 8을 넘어 결과를 생성하는 데 필요한 최소 프레임 속도에 도달하지 못합니다. 결과적으로 UDP를 통해 전송되는 CSI 프레임이 없으며, 대시보드는 OFFLINE 상태를 유지합니다. 해결 방법: DATA promiscuous filter를 활성화한 상태(sdkconfig 또는 소스 수정)로 소스에서 펌웨어를 빌드하여 모든 데이터 프레임을 캡처합니다. 영구 수정: #906에 병합됨(디스플레이 없는 보드에서 데이터 프레임 캡처 가능) 및 #908에 게시된 새로 고쳐진 바이너리. 최신 릴리스 바이너리를 사용하거나 main 브랜치에서 빌드하세요.
문제 해결ESP32-S3 promiscuous mode를 MGMT-only로 설정하고 과도한 WiFi 데이터 트래픽 하에서 CSI 콜백이 매우 드문 이유는 무엇입니까? (70초 동안 단 3개만)
MGMT 전용 무차별 모드는 관리 프레임(비콘, 프로브 등)만 캡처하고 데이터 프레임은 캡처하지 않습니다. YouTube 4K + iperf와 같은 대량 트래픽은 데이터 프레임으로 구성되므로, CSI 콜백은 간헐적인 관리 프레임에서만 트리거됩니다. 데이터 트래픽에서 빈번한 CSI를 얻으려면 스니퍼가 데이터 프레임도 캡처하도록 구성하세요(예: MGMT와 DATA 모두 활성화, 또는 모든 프레임을 캡처하도록 필터 설정).