앞선 글에서 다음 할 일로 적어 둔 FastAPI 래핑을 마쳤다. agent/src/supersub_agent/api.py가 측정 → 판정 → 합산 전 구간을 HTTP로 노출하고, 같은 프로세스에서 확인용 웹 UI를 띄운다.
uv run uvicorn supersub_agent.api:app --host 0.0.0.0 --port 8000
경로는 두 개다.
POST /api/analyze/synthetic— 영상 없이 [B]~[D] 구간만. 지금 검증된 범위.POST /api/analyze/video— [A] 포즈 추출을 포함한 전 구간. 실클립 미검증 구간이라 UI에도 경고를 띄웠다.
실측
합성 입력(31프레임)으로 재실행한 결과다.
| 항목 | 값 |
|---|---|
측정 (features.py) | 0.01초 |
| 판정 (5개 항목) | 27.0초 — 항목당 약 5.4초 |
| 최초 요청 | 약 51초 (모델 적재 포함) |
| 모델 상주 VRAM | 약 2.7GB / 8GB |
| 총점 | 80점 · B · provisional |
판정 모델은 적재에 시간이 걸리므로 프로세스당 한 번만 올리고 재사용한다. 두 번째 요청부터 27초로 떨어지는 것이 그 차이다. 항목별로 모델을 따로 호출하는 구조라 판정 시간은 루브릭 항목 수에 비례한다 — 항목이 늘면 이 부분이 먼저 병목이 된다.
문서와 구현이 어긋난 곳을 맞췄다
구현하면서 뒤집힌 결정이 문서에 반영되지 않은 곳이 남아 있어 함께 정리했다.
- 시스템 설계 3)절 기술 스택 — MediaPipe Pose(33관절)로 적혀 있던 것을 실제 구성인 OpenCV + RT-DETR + ViTPose(COCO-17)로 교체
agent/README.md·pyproject.toml— 4bit NF4 적재로 적혀 있던 서술을 bf16 기본으로 수정 (quantize=True는 더 큰 모델을 쓸 때만 켜는 선택지로 남김)- 미결 항목 4번 — GPU 조달 판단 근거를 3.5 7.8B 기준에서 현재 모델(4.0 1.2B, 상주 2.7GB) 기준으로 갱신
다음 할 일
- 실제 슈팅 영상 확보 — 여전히 가장 앞에 있다.
/api/analyze/video는 만들었지만 아직 실클립으로 한 번도 통과시키지 못했다 - 지도자 검수로 루브릭 각도 임계값 확정
- 골든셋 라벨링 후 QWK 측정
- MySQL 적재 (
analysis_metric_value)
이 UI는 확인용이다. 인증·동시성·작업 큐가 없으므로 서비스 경로로 쓰지 않는다. 정식 구성은 비동기 잡(analysis_job) + WebSocket 진행률이다.