앞선 글에서 다음 할 일로 적어 둔 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 진행률이다.


위로

Copyright © 2026 Super-Sub

This site uses Just the Docs, a documentation theme for Jekyll.