diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..368acc6 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,25 @@ +# move_detect — 작업장 안전 AI CCTV + +Pi5+Hailo-8 엣지(Python `edge/`) → HMAC POST → Cafe24 PHP+MySQL 대시보드(`server/`). +납품·폐쇄망 대상 프로젝트 — `~/.claude/rules/common/build-deployment.md` 적용. + +## 시작 + +- 위치 참조: `docs/PROJECT_MAP.md` 먼저 읽기 (전체 재스캔 금지). 변경 시 MAP 갱신. +- 작업 기록: 단락 종료마다 `docs/INDEX.md`에 결과만 추가. +- 감사 상태: `docs/delivery-audit.md` (43/43 — 실장비 OFF-HW 검증만 잔여). + +## 검증 (verify) + +``` +python -m pytest tests -q # edge (203+) +cd server && php vendor/bin/phpunit # server (119+, PDO 4 skip) +``` + +## 제약 + +- ultralytics(AGPL) 금지 — Hailo HEF/MoveNet만. 라이브뷰·영상 전송 금지(스냅샷만, 얼굴 블러). +- 감지기 타이머는 monotonic `now`, 이벤트 스탬프만 wall clock. +- DB 테이블 prefix `move_`. 프런트 JS는 textContent만(innerHTML 금지), 바닐라(빌드 없음). +- UI는 라이트·고밀도 운영 콘솔 방향 확정 (메모리 참조; 다크·미니멀 반려됨). +- 원격: Forgejo(`tea` CLI, gh 금지). diff --git a/docs/INDEX.md b/docs/INDEX.md new file mode 100644 index 0000000..55b45c6 --- /dev/null +++ b/docs/INDEX.md @@ -0,0 +1,8 @@ +# INDEX — 작업 기록 (완료 결과만) + +- **2026-08-06** 대시보드 장치→카메라 트리 레일 + (device,camera) 쌍 카메라 필터 — + `eaff176`. PHPUnit 119 통과 + Chrome 실렌더 검증(트리 상태·필터·접기·콘솔 무오류). +- **2026-08-06** 감사 잔여 P2-6/7/8 종결 (ID 스왑 게이트 · sustained-prone FALLING · + stale 트랙 no-data) — `32f2237`. TDD(RED 확인), pytest 203 통과/2 skip. + → delivery-audit 오프하드웨어 항목 43/43 완료. 잔여는 실장비(OFF-HW) 검증뿐. +- **2026-08-06** 연속성 문서 신설: `CLAUDE.md` · `docs/PROJECT_MAP.md` · 본 INDEX. diff --git a/docs/PROJECT_MAP.md b/docs/PROJECT_MAP.md new file mode 100644 index 0000000..c933db8 --- /dev/null +++ b/docs/PROJECT_MAP.md @@ -0,0 +1,56 @@ +# PROJECT_MAP — move_detect + +> 작업 전 이 문서로 위치를 찾고 필요한 파일만 연다 (전체 재스캔 금지). +> 새 파일·라우트·스키마 변경 시 해당 섹션을 갱신할 것. + +## 개요 + +작업장 안전 AI CCTV. Raspberry Pi 5 + Hailo-8 엣지 추론(Python) → HMAC POST → Cafe24 +웹호스팅 PHP+MySQL 대시보드. 감지: 넘어짐 · 넘어짐 후 미동 · 장시간 부동 · 위험구역 +침입(경고/절대금지/협착) · 유령사고(위험 상태로 소실). 스냅샷만 전송, 라이브뷰·영상 없음. + +## edge/ (Python — Pi에서 구동) + +| 파일 | 역할 | +|------|------| +| `app.py` | `run_once` 파이프라인 (프레임→추론→추적→감지→스냅샷→전송). ambiguous 리셋·stale 필터 | +| `engine.py` | `EventEngine` — 감지기 오케스트레이션, 쿨다운 dedup, 트랙 forget | +| `tracking.py` | `IouTracker` — 전역 그리디 IoU 매칭, `ambiguous()` (교차 경합 트랙) | +| `detectors/` | `fall.py`(FALLING→FALLEN→NO_MOTION, sustained prone) · `immobility.py` · `ghost.py` · `zone.py` | +| `smoothing.py` | 트랙별 키포인트 스무딩 풀 | +| `snapshot.py` | RingBuffer · FaceBlurrer(PIPA) · Snapshotter | +| `alert.py` / `serverclient.py` | HMAC+nonce POST, 커스텀 UA, no-redirect | +| `queue.py` | 오프라인 전송 큐 | +| `config.py` | env → Config (빈 CAFE24_URL/SECRET는 기동 실패) | +| `daemon.py` / `runtime.py` / `health.py` | 상주 루프 · 하트비트 텔레메트리 | +| `adapters/` | hailo_pose · movenet_pose(CPU 폴백) · picamera_source(CSI) · uvc_source(USB) | +| `probe.py` / `tools/` | 카메라 사전 점검 · HEF/모델 fetch (빌드머신 전용) | + +## server/ (PHP 8 + PDO — Cafe24) + +- 진입: `public/index.php` (라우트 전부 여기), 뷰: `src/View/{layout,events,login,zones,event_detail}.php` +- 라우트: `POST /api/events`(ingest, HMAC) · `POST /api/heartbeat` · `GET /api/config` · + `GET /api/events` · `GET /api/devices` · `GET/POST /api/zones*` · `POST /login|/logout` · + `GET /snap/{uuid}` · `POST /events/{id}/ack` · 페이지 `/`, `/login`, `/zones`, `/events/{id}/view` +- `src/Ingest/` HMAC+nonce+rate-limit+replay 방지 · `src/Auth/` argon2id/세션/RBAC/CSRF · + `src/Dashboard/` 이벤트목록·디바이스상태·존편집·스냅샷프록시 · `src/Repository/` 9종 (인터페이스+PDO) +- 프런트: `public/assets/app.js`(이벤트 콘솔 폴링·필터) · `device-tree.js`(장치→카메라 트리 레일) · + `zone-draw.js` · `detail.js` · `app.css` +- DB: `schema.sql` (테이블 prefix `move_`), 마이그레이션 `migrations/` +- 배포: `server/deploy/build_cafe24_package.sh` → zip, `server/docs/server-deploy.md` + +## deploy/ · dist/ (납품) + +- `deploy/`: Pi 설치 — `setup_online.sh`, `bundle/build_offline_bundle.sh`(폐쇄망), + `systemd/move-detect-edge.service`, `device.env`(사전 프로비저닝) +- `dist/`: `1_cafe24_upload/` · `2_pi_install/` · `PROVISION_SECRETS.md` + +## tests/ + +- Python: `tests/` 31파일 (pytest) — 하드웨어 필요 테스트는 `tests/hardware/` + skip 마커 +- PHP: `server/tests/` 19파일 (phpunit, in-memory repo; PDO 통합은 skip 게이트) + +## docs/ + +`delivery-audit.md`(감사 43건, 전부 완료 — OFF-HW 실장비 검증만 잔여) · `pilot-runbook.md` · +`hardware-bringup.md` · `INDEX.md`(작업 기록)