TL;DR
이 프로젝트는 RF-DETR 객체 탐지와 RF-DETR Keypoint 추정을 결합해 노트북에서 농구 슛의 성공·실패, 릴리스 속도, 궤적, 자세를 자동 기록하는 로컬 컴퓨터 비전 시스템입니다. 공과 림을 매 프레임 찾고 관절 좌표를 추적한 뒤, 상태 엔진이 위치·속도 이력을 유지하면서 손목 분리와 림 방향 궤적을 검사해 슛 이벤트를 판정합니다. 림과 네트에 공이 가려지는 상황은 재등장 후 낙하 속도를 자유낙하와 비교해 make, airball, 무관한 공을 구분하며, 불확실한 단일 카메라 판정은 별도 태그로 남깁니다. 탐지 모델은 mAP50 88.84와 비행 중 공 98.1% 탐지율을 기록했고, 시스템은 FastAPI 로컬 웹 앱과 JSON Lines, 주석 영상을 통해 결과를 제공하며 지속적인 클라우드 사용료 없이 실행됩니다.
섹션별 상세


git clone https://github.com/aarnavshah12/shot-tracker.git
cd shot-tracker
uv venv --python 3.12 .venv
uv pip install -p .venv -e ".[dev,video,models]"
echo 'ROBOFLOW_API_KEY=your_key_here' > .env
.venv/bin/python -m app.serverGitHub 저장소를 복제하고 Python 3.12 가상 환경과 의존성을 설치한 뒤 Roboflow API 키를 등록해 로컬 서버를 실행합니다.





용어 해설
- 객체 탐지(Object Detection)
- — 영상 프레임에서 공과 림처럼 특정 객체의 위치를 찾아 경계 상자로 표시하는 기술입니다. 이 프로젝트에서는 RF-DETR 모델이 매 프레임의 공과 림을 탐지하고, 이후 속도와 궤적 계산에 필요한 좌표를 제공합니다. 탐지 누락과 가림 현상이 슛 성공 여부 판정에 직접 영향을 줍니다.
- 키포인트 추정(Keypoint Estimation)
- — 사람의 관절이나 신체 기준점 위치를 영상에서 추정하는 컴퓨터 비전 기법입니다. RF-DETR Keypoint는 손목, 팔꿈치, 어깨, 엉덩이, 무릎의 좌표와 신뢰도를 연속 프레임에서 산출합니다. 이를 이용해 릴리스 순간과 관절 각도 같은 슈팅 자세 지표를 계산합니다.
- 상태 머신(State Machine)
- — 시간에 따라 변하는 객체의 상태와 전이 조건을 관리하는 계산 구조입니다. 시스템은 공의 위치, 속도, 키포인트 신뢰도를 프레임별로 보존하면서 드리블, 세트 포인트, 릴리스, 림 주변 상황을 구분합니다. 단일 속도 조건만 사용할 때 생기는 펌프 페이크와 중복 이벤트를 줄이는 역할을 합니다.
- 픽셀-미터 변환(Pixels-per-meter Conversion)
- — 영상 속 픽셀 거리를 실제 물리적 거리로 바꾸는 보정 방식입니다. 규격 농구 림의 안쪽 지름 0.4572m와 여러 프레임에서 측정한 림 경계 상자의 중앙값 너비를 비교해 영상 전체의 변환 비율을 산출합니다. 이 비율을 적용하면 공의 속도와 릴리스 높이를 물리 단위로 계산할 수 있습니다.
- mAP50
- — 객체 탐지 모델의 예측 상자 성능을 평가하는 지표로, IoU 기준 0.5에서 평균 정밀도를 집계합니다. 이 글의 RF-DETR-small 모델은 mAP50 88.84를 기록했고 precision은 75.7, recall은 84.9였습니다. 실제 테스트에서는 비행 중 공을 774프레임 중 759프레임에서 탐지했습니다.
기술
- RF-DETR
- RF-DETR-small
- RF-DETR Keypoint
- RFDETRKeypointPreview
- Roboflow UI
- Roboflow Universe
- uv
- Python 3.12
- FastAPI
- COCO 17-keypoint
- JSON Lines
활용 사례
- 농구 슛 성공률과 연속 성공 기록 측정
- 릴리스 속도와 공의 궤적 판정
- 손목·팔꿈치·어깨·엉덩이·무릎 기반 자세 추적
- 로컬 영상 기반 스포츠 훈련 피드백
언급된 리소스
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.