# camera24 Tracking / skeleton 검토

작성: 2026-10-27 KST. 이번 결과는 기존 cache의 시각화이며 새 추론이나 Tracking 실행 결과가 아니다.

## 열 파일

- `outputs/camera24_tracking_skeleton_10fps.mp4`: 정상 속도 검토 영상 1개, 3200x1800, 약30.1초.
- `outputs/frame_map.csv`: 출력 Frame / 기존 sample / 원본 1-based Frame / 상대 PTS.
- `outputs/observation_states.json`: 관측마다 실제 ID, query, score, 유효 관절 수, 확인 가능한 관측 상태.

기존 10FPS 관측301개를 누락/중복/보간 없이 사용했다. 기존 네 모델 영상의201개 관측은 이 영상의
sample100~300에 그대로 포함된다. 각 관측의 실제 PTS 간격을 유지하므로 엄밀한 고정간격 CFR로
재타이밍하지 않았다. 첫/마지막 관측은 원본1/722, 0.000/29.998초이며 마지막 표시 유지까지 약30.1초다.
원본723은 표본에 없어 추가하지 않았다. Runtime frameSeq가 아닌 녹화 파일의 Frame 번호다.

## 표시 읽는 법

- 큰 화면은 원본 좌표 `(240,40)-(1680,640)`의 고정 확대다. 아래 작은 화면은 전체 영상이다.
- 확대 화면 위 ID와 연결선을 따라 bbox를 찾고 오른쪽 상태표와 대조한다.
- `T숫자`는 cache에 저장된 실제 Tracking ID다. 22개 ID에 서로 다른 고정 RGB를 배정했다.
  일부 색이 비슷하게 보일 수 있으므로 색이 아니라 숫자로 비교한다.
- `미추적(q숫자)`는 회색 점선 bbox와 회색 skeleton이다. q는 현재 Frame의 모델 출력 칸이며
  같은 q가 계속 보이더라도 같은 사람으로 연결한 것이 아니다.
- 사람 score 0.15 / 관절 score 0.3을 유지했다. 관절 점과 기존12개 body 연결선을 표시한다.
  유효 관절이 적다는 이유로 객체를 추가 제거하지 않았으며, 보간이나 ID 수정도 없다.
- 처음 관측은 이 검토 범위 기준이다. 같은 ID 재등장은 해당 숫자가 다시 관측됐다는 뜻일 뿐,
  동일인 복구 성공을 보증하지 않는다. 미관측을 Tracker 종료로 해석하지 않는다.
- 실제로 겹친 후보 bbox/skeleton은 그대로 겹쳐 보일 수 있다. 임의 분리/삭제하지 않았다.
  고밀도 장면에서는 위 연결선보다 bbox 색과 오른쪽 ID/score 표를 함께 확인한다.
- 반복242는 실제 관측242/10.031초, 반복483은 다음 실제 관측485/20.118초에서 통과로 표시한다.
  경계에서 cache/ID를 초기화하지 않았다. 행동 분류나 싸움 판정은 이 영상에 표시하지 않는다.

## 검증

- PyAV 전체301Frame decode PASS, 모든 출력 PTS가 cache와 일치(최대 오차0초).
- 영상/RGB sample/bbox/skeleton/ID/상태표를 동일 관측으로 대응. 이전4개 모델 Frame map과 일치.
- q3 연속9관측(원본285~304)은 전부 미추적으로 검증. 같은 ID 재등장28회는 관측 사실만 기록.
- 글자 경계 자동 검사 PASS. Frame1/285/485 및 최대9후보 Frame456의 한글/상태표/확대/구분 표본 확인.
- 원격/test 영상·CSV·상태JSON SHA256 일치. 상세: `reports/validation.json`, `reports/independent_validation.json`.
- CPU 전용 runc, network none, CPU2/RAM8GiB 상한. 렌더링45.77초, 표본 메모리579.5MiB.
  이 값은 자원 peak나 성능 보장이 아니다. 기존 Noto Sans CJK KR 폰트를 시험 폴더에만 복사했다.
- 운영 health ready,6 running/22 stopped. 설정/Pose 지문/run/generation/child/state 전후 동일.
  운영 provider 응답은 진행 중이며 장시간 FPS 수용 시험은 하지 않았다. 시험 컨테이너 종료 확인.

## 후속 피드백

예: `원본 Frame285~304 / 좌측 / T481 옆 미추적(q3) / 같은 사람이 계속 미추적으로 보임`.
객체 정체성과 교체 여부는 사용자의 영상 판단과 대조할 사항이다. 이 작업에서 원인 확정이나 튜닝은 하지 않았다.
ST-GCN++ hugging 위주, AVA walk/stand/carry 위주, PoseC3D cheer up 위주라는 사용자 평가로 세 후보 보류.
YOWOv2 피드백 대기. NTU60 주23/49/50/51, 보조22/26/30/41/52/53/54/56/58은 잠정 후보일 뿐 이번 표시에 적용하지 않았다.

## 보존 / 정리

원본·기존 eval cache·기존 모델 영상·image·인증은 변경하지 않았다. 이 run만 신규 결과를 소유한다.
원격 run은 `/storage/contextra/experiments/action-model-eval/2026/2026-10-27_contextra-camera24-tracking-review_r01`.
로컬 run은 `/data/codex-artifacts/contextra/action-model-eval/2026/2026-10-27_contextra-camera24-tracking-review_r01`.
`helpers/render_tracking.py`가 렌더러이며 `helpers/control.py`는 CPU 전용 시험 실행, `helpers/verify.py`는 대응 검증이다.
재생성 시 새 고유 run을 사용한다. 사용자 승인 없이 기존 run을 삭제하거나 덮어쓰지 않는다.
