Skip to content

gkswodn015/MatchVision

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

105 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MatchVision

MatchVision은 축구 경기 영상을 업로드하고, 선수/공 탐지 결과와 탑뷰 변환 결과를 웹에서 확인할 수 있는 반자동 축구 영상 분석 시스템입니다.

이 프로그램은 완전 자동 분석기가 아닙니다. 사용자가 경기장 앵커 포인트와 홈팀/원정팀/심판 샘플을 지정하면, YOLO, OpenCV, 트래킹 후처리를 이용해 분석 결과를 생성합니다. 방송 영상은 카메라 이동, 줌, 선수 가림, 유니폼 색상 차이 때문에 완전 자동 분석이 어렵기 때문에, 최소한의 사용자 입력을 기준점으로 삼는 방식입니다.

주요 기능

  • 경기 영상 업로드 및 분석 실행
  • YOLO 기반 선수/공 객체 탐지
  • track ID 기반 선수 추적
  • 수동 샘플 기반 홈팀/원정팀/심판 분류
  • track 단위 역할 잠금으로 팀 분류 흔들림 완화
  • 수동 앵커 포인트 기반 탑뷰 변환
  • Optical Flow 기반 앵커 추적으로 카메라 이동 구간 보정
  • FotMob 경기 정보, 통계, 라인업/교체 명단 크롤링
  • 리포트 페이지에서 팀별 선수 ID를 FotMob 선수 명단에 배정

실행 방법

Python 3.12 이상이 설치되어 있어야 합니다.

cd C:\Users\User\Downloads\MatchVision-main
py -m venv venv
.\venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
pip install -r requirements.txt
cd web
python manage.py migrate
python manage.py runserver

브라우저에서 아래 주소로 접속합니다.

http://127.0.0.1:8000/

서버를 종료하려면 PowerShell 창에서 Ctrl + C를 누릅니다.

사용하는 방법

  1. 회원가입 또는 로그인합니다.
  2. 영상 업로드 메뉴에서 경기 영상을 업로드합니다.
  3. 영상 분석 메뉴에서 업로드한 영상을 선택합니다.
  4. Analyzer 실행 버튼을 누릅니다.
  5. OpenCV 창이 뜨면 분석에 사용할 보정 프레임을 선택합니다.
  6. 선택한 프레임마다 경기장 앵커 포인트를 지정합니다.
  7. 홈팀 선수, 원정팀 선수, 심판 샘플을 각각 한 명씩 클릭합니다.
  8. 분석이 끝나면 리포트 페이지에서 객체 탐지 영상과 탑뷰 영상을 확인합니다.
  9. FotMob 경기 URL을 입력해 경기 정보와 선수 명단을 불러옵니다.
  10. 리포트의 팀별 선수 ID 선택창에서 각 ID에 해당하는 선수를 배정합니다.

보정 프레임 선택 요령

분석을 시작하면 먼저 카메라 각도가 바뀌는 프레임을 선택합니다. 이 프레임들은 탑뷰 변환의 기준이 됩니다.

좋은 보정 프레임은 다음 조건을 만족합니다.

  • 경기장 선이 많이 보이는 프레임
  • 페널티 박스, 센터라인, 사이드라인, 골라인처럼 기준이 되는 선이 뚜렷한 프레임
  • 화면이 심하게 흔들리거나 전환되는 순간이 아닌 프레임
  • 선수나 광고판이 경기장 선을 너무 많이 가리지 않는 프레임

카메라가 크게 이동하거나 줌이 바뀌는 영상이라면 한 프레임만 선택하지 말고, 카메라 구도가 달라지는 구간마다 보정 프레임을 추가로 선택하는 것이 좋습니다.

앵커 포인트 선택 요령

앵커 포인트는 실제 영상의 경기장 선 교차점과, 오른쪽 탑뷰 경기장 그림의 기준점을 서로 연결하는 작업입니다. 탑뷰 정확도는 이 단계의 품질에 크게 좌우됩니다.

가능하면 한 보정 프레임에서 4개보다 많은 포인트를 찍는 것이 좋습니다. 최소 4개로도 동작하지만, 6개 이상을 찍으면 잘못 찍은 점의 영향을 줄일 수 있습니다.

정확도를 높이려면 다음 기준을 지키는 것이 좋습니다.

  • 포인트를 한쪽에만 몰아서 찍지 않습니다.
  • 화면 기준 좌측과 우측에 최소 1개씩은 앵커 포인트가 있어야 합니다.
  • 가능하면 화면 위쪽과 아래쪽에도 포인트가 나뉘어 있는 것이 좋습니다.
  • 페널티 박스 모서리, 골라인과 사이드라인 교차점, 센터라인과 사이드라인 교차점처럼 실제 위치가 명확한 점을 사용합니다.
  • 잔디 무늬, 광고판 경계, 그림자, 선수 위치처럼 경기장 기준선이 아닌 지점은 사용하지 않습니다.
  • 선이 흐릿하거나 선수에게 가려진 지점은 피합니다.

나쁜 예시는 다음과 같습니다.

  • 페널티 박스 근처에만 4개를 모두 찍는 경우
  • 화면 왼쪽에만 포인트가 있고 오른쪽에는 포인트가 없는 경우
  • 실제 경기장 선 교차점이 아니라 대략적인 선 위를 찍는 경우
  • 같은 선 위에 거의 일직선으로만 포인트를 찍는 경우

권장 예시는 다음과 같습니다.

  • 왼쪽 페널티 박스 모서리 2개
  • 센터라인 근처 기준점 1개
  • 오른쪽 터치라인 또는 반대편 박스 기준점 1개 이상
  • 가능하면 좌/우, 상/하로 넓게 퍼진 6개 이상의 포인트

포인트를 잘못 찍었다면 Backspace로 되돌리고 다시 선택합니다.

팀/심판 샘플 선택 요령

앵커 선택 후에는 홈팀, 원정팀, 심판 샘플을 각각 한 명씩 클릭합니다. 이 샘플은 유니폼 색상 분류의 기준으로 사용됩니다.

좋은 샘플은 다음 조건을 만족합니다.

  • 선수 몸통 부분이 잘 보이는 사람
  • 다른 선수와 겹치지 않은 사람
  • 그림자나 조명이 심하게 가리지 않은 사람
  • 유니폼 색이 선명하게 보이는 사람
  • 골키퍼가 아닌 필드 플레이어

홈팀/원정팀 샘플로 골키퍼를 선택하지 않는 것이 좋습니다. 골키퍼 유니폼은 같은 팀 필드 플레이어와 색이 다른 경우가 많아서 팀 분류 기준으로 부적합합니다.

심판 샘플은 가능한 한 심판 몸통이 잘 보이는 장면에서 선택합니다. 심판이 너무 멀거나 다른 선수와 겹쳐 있으면 잘못 분류될 수 있습니다.

분석 결과 확인

분석이 끝나면 리포트 페이지에서 두 종류의 영상을 확인할 수 있습니다.

  • 객체 탐지 결과 영상: 원본 영상 위에 선수/공 ID와 팀 구분을 표시한 영상
  • 탑뷰 결과 영상: 선수와 공의 위치를 위에서 내려다본 경기장 위에 표시한 영상

ID 라벨은 다음 형식을 사용합니다.

  • H#12: 홈팀 track ID 12
  • A#7: 원정팀 track ID 7
  • R#3: 심판 track ID 3

탐지 결과 영상 상단에는 현재 탑뷰 보정 상태가 표시됩니다.

  • tracked: 선택한 앵커를 Optical Flow로 추적해 homography를 갱신 중
  • nearest: 추적 가능한 앵커가 부족해 가장 가까운 수동 보정값 사용 중
  • anchors: 현재 추적 중인 앵커 수

anchors 수가 4보다 작아지면 자동 추적 보정이 불안정해질 수 있습니다. 이 경우 결과가 흔들리거나 nearest 상태로 돌아갈 수 있습니다.

FotMob 정보 불러오기

리포트 페이지에서 FotMob 경기 URL을 입력하면 다음 정보를 불러옵니다.

  • 홈팀/원정팀 이름
  • 경기 스코어
  • 점유율, xG, 슈팅, 패스, 코너킥, 오프사이드 등 경기 통계
  • 홈팀/원정팀 선발 명단
  • 홈팀/원정팀 교체 명단

FotMob 정보를 불러온 뒤에는 팀별 선수 ID 선택창에서 홈팀 ID에는 홈팀 선수만, 원정팀 ID에는 원정팀 선수만 선택할 수 있습니다.

정확도를 높이는 팁

  • 카메라 구도가 크게 바뀌는 장면마다 보정 프레임을 추가합니다.
  • 앵커 포인트는 화면 전체에 넓게 분포시키고, 좌측/우측에 최소 하나씩 배치합니다.
  • 홈팀/원정팀 샘플은 골키퍼가 아닌 필드 플레이어를 선택합니다.
  • 샘플 선수는 몸통 유니폼 색이 선명하게 보이는 사람을 선택합니다.
  • 너무 긴 영상보다 짧은 구간으로 먼저 테스트하면 실패 원인을 찾기 쉽습니다.
  • 결과 영상에서 ID가 많이 바뀌면 샘플 선택이 좋지 않았거나 선수 가림이 심한 구간일 가능성이 큽니다.
  • 탑뷰 위치가 계속 어긋나면 앵커 포인트가 한쪽에 몰렸거나 잘못된 기준점을 찍었을 가능성이 큽니다.

자주 발생하는 문제

탑뷰 위치가 실제 위치와 다르게 찍히는 경우

앵커 포인트가 부정확하거나 한쪽에 몰려 있을 가능성이 큽니다. 좌측과 우측에 포인트를 나누고, 가능하면 6개 이상 선택합니다.

선수 팀 색상이 자주 바뀌는 경우

샘플 선택이 부정확했거나 유니폼 색이 비슷한 경우입니다. 몸통이 잘 보이는 필드 플레이어를 샘플로 선택합니다.

회색 ID 또는 알 수 없는 선수가 보이는 경우

분류 신뢰도가 낮은 객체일 가능성이 있습니다. 현재 버전에서는 확정되지 않은 선수는 최대한 결과에서 제외하도록 처리되어 있지만, 영상 조건에 따라 일부 흔들림이 남을 수 있습니다.

골키퍼가 팀 분류를 헷갈리게 하는 경우

골키퍼는 필드 플레이어와 유니폼 색이 다르기 때문에 색상 기반 팀 분류에서 예외가 될 수 있습니다. 홈팀/원정팀 샘플로 골키퍼를 선택하지 마세요.

생성 파일과 Git 관리

다음 파일과 폴더는 실행 중 생성되는 로컬 산출물이며 Git에 저장하지 않습니다.

  • Analyzer/result/
  • web/media/
  • web/db.sqlite3
  • Analyzer/data/
  • 모델 가중치 파일: *.pt, *.pth, *.onnx, *.weights

개발자 문서

개발 환경, 구조, 테스트, Git 관리 기준은 개발자 가이드를 참고하세요.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors