Commit graph

70 commits

Author SHA1 Message Date
유창욱
01c7f4636e fix(edge): smooth keypoints per-track after tracking, not before (FIX 1)
edge/app.py run_once used ONE shared KeypointSmoother across all persons
BEFORE tracking assigned IDs. The smoother holds per-joint-index One-Euro
filter state, so with >1 person in frame the filter state was shared and
corrupted across different people, and same-timestamp calls within a frame
would pass through unsmoothed while still clobbering the shared state.
Multi-person scenes could get corrupted torso angles -> missed/false falls.

Add TrackSmootherPool (edge/smoothing.py) that lazily allocates one
KeypointSmoother per track_id. run_once now: tracks raw keypoints first,
then smooths each track's latest frame in place using its own pooled
smoother, and forgets a track's smoother when the track is lost (ties into
FIX 5 lost-track cleanup).

BEHAVIOR CHANGE: keypoints are now smoothed after tracking instead of
before. Single-person pipelines are unaffected (still one smoother, one
identity). Multi-person pipelines get correct, non-cross-contaminated
smoothing.

run_once signature: smoother param replaced with pool: TrackSmootherPool.
build_pipeline now constructs "pool" instead of "smoother".

Tests: tests/test_smoothing.py adds TrackSmootherPool identity/forget
coverage; tests/test_app.py adds test_two_persons_get_independent_smoothing
demonstrating each track's smoothed keypoints stay on its own side instead
of being pulled toward the other person.
2026-07-11 22:14:03 +09:00
유창욱
2ac26d4091 feat(edge): hardware adapter stubs + Pi bring-up/benchmark doc 2026-07-11 21:54:24 +09:00
유창욱
b621627863 feat(edge): main-loop wiring (run_once) + pipeline factory 2026-07-11 21:46:43 +09:00
유창욱
e74cc7f898 test(edge): cover ghost/zone env overrides and config defaults 2026-07-11 21:43:35 +09:00
유창욱
a63a5918cc feat(edge): env-based Config for detectors and transport 2026-07-11 21:40:06 +09:00
유창욱
bfff96ddbd feat(edge): OfflineQueue (SQLite persist + ordered resend) 2026-07-11 21:33:43 +09:00
유창욱
67464971bf feat(edge): PostClient with HMAC+nonce signed event POST 2026-07-11 21:27:38 +09:00
유창욱
5da838ef0b feat(edge): RingBuffer + face blur + JPEG snapshotter 2026-07-11 21:21:57 +09:00
유창욱
e801c7d057 test(edge): add genuine EventEngine cooldown primitive test 2026-07-11 21:18:27 +09:00
유창욱
e8e24c266f feat(edge): EventEngine orchestration with dedup + cooldown 2026-07-11 21:12:43 +09:00
유창욱
406c0f5b6c feat(edge): ZoneIntrusionDetector (foot-anchor point-in-polygon, debounce) 2026-07-11 21:05:42 +09:00
유창욱
3bcfdea11d feat(edge): GhostIncidentDetector (collapse-then-occluded spatial incident) 2026-07-11 20:59:31 +09:00
유창욱
bd170c4803 feat(edge): ImmobilityWatchdog (posture-independent prolonged immobility) 2026-07-11 20:51:33 +09:00
유창욱
5545b26779 feat(edge): FallDetector state machine (OR-logic, baseline freeze, post-fall no-motion) 2026-07-11 20:41:11 +09:00
유창욱
1020304dca feat(edge): Event model + severity mapping (§7.3 payload) 2026-07-11 20:34:57 +09:00
유창욱
02ca524bf6 feat(edge): Track model + IoU tracker with lost-track reporting 2026-07-11 20:28:45 +09:00
유창욱
991178a896 feat(edge): One-Euro keypoint smoothing (INT8 jitter) 2026-07-11 20:23:21 +09:00
유창욱
444c01407a feat(edge): pose geometry utils (torso angle, com, normalization) 2026-07-11 20:18:03 +09:00
유창욱
33e987d8d9 feat(edge): data models (Keypoint, BBox, Person) + COCO indices 2026-07-11 20:13:00 +09:00
유창욱
a4f2ead211 docs: workplace safety AI CCTV design spec v2.0 + P1-A edge core plan
- 설계 스펙 v2.0 (다관점 리뷰 반영: 기절경로 분리, 시점강건 낙상, 인증/RBAC, 평가셋, fps 3티어, 컴플라이언스, 증거 무결성)
- P1-A 엣지 감지 코어 구현계획 (16 태스크 TDD)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ne4rU4FToTLHcBUMUvUnT1
2026-07-11 20:08:01 +09:00