- 크롤링을 통해 4개년 시즌의 모든 팀의 stat, 전술, 날씨에 따른 승률, 홈/원정 승률 등 모든 데이터를 가져와 데이터 전처리를 하고 학습시켜 모델링을 완성하고 이를 통해 홈 화면에서 앞으로의 경기에 승부 예측 기능을 구현
- 이 외에도 예측 라인업 등을 제공한다. (AI 학습)
- 이 외에도 컴퓨터 비전을 이용하여 Big Matches들의 양 팀 선수 인식, 경로 인식, 점유율 반영
- 뉴스 api를 사용하여 premiar league의 trending news와 hot topic news를 분리하여 바인딩. 로그인한 사용자의 지지 팀 정보를 얻어와 필터링하여 검색을 하여 그 팀의 뉴스를 따로 볼 수 있게 하였다.
- 유튜브 api를 이용하여 지지하는 팀의 최근 감독 인터뷰를 불러와 팀 소식에 띄웠다.
- 방대한 양의 데이터들을 모두 실시간으로 연동하여 경기 진행 중 live score, Goal 개수, red/yellow 카드, 승률, 승부, 점유율, 유효슈팅, 오프사이드 횟수 등 모든 정보를 실시간으로 변동될 수 있도록 구현
- community 탭에서는 직관 티켓 예매, 새벽 경기 알람, MOM 투표 등의 기능을 구현
첫 화면은 하나하나 누끼를 따서 만들었다 ㅎㅎ ..
- 회원가입 시 자신이 응원하는 팀을 하나 선택할 수 있다.
- 이때 이미지에 id를 부여하여 access token으로 함께 전달해 로그인 시 모든 정보에 사용하였다.
지난 경기들의 모든 정보를 볼 수 있음
home 화면에는 위와 같이 경기 팀들과 날짜, 시간, 경기 score 결과를 볼 수 있다.
- 실시간 데이터와 직접 연결했기 때문에 한 경기가 더 치뤄지거나, PL에서 score에 변동을 주면 우리 앱에서도 변동사항이 반영된다.
[detail]
- 저 중 하나를 클릭하게 되면 상세 화면으로 이동한다.
- Expected Results By AI ) 이 부분은 AI 승부예측이다. 웹 크롤링을 통해 수집한 4개년의 방대한 데이터들을 R 을 이용하여 전처리하고 train, test 데이터로 분류하여 학습시켰다. 이를 바탕으로 각 팀의 매치와 이 모델링을 연동하여 승부 예측을 진행한다. 이 때 최대로 나올 수 있는 골 갯수까지 반영된다.
- Recent 3 Matches는 그 팀들의 이전 승부를 띄우게 된다. 가장 최근 경기는 밑줄을 그어 하이라이팅 했다.
- 그리고 각 팀에서 가장 많은 골을 넣은 선수의 이미지와 골 수까지 불러올 수 있다.
- !! 포인트 !! : 예측 라인업 -> 각 팀의 부상 업데이트, stat, 감독 스타일을 반영하여 라인업을 예측해준다. 포지션 구조를 짜느라 굉장히 힘들었다 ..
- 뉴스 api를 사용하여 premiar league의 trending news와 hot topic news를 분리하여 바인딩
- 로그인한 사용자의 지지 팀 정보를 얻어와 필터링하여 검색을 하여 그 팀의 뉴스를 따로 볼 수 있게 하였다
- 유튜브 api를 이용하여 지지하는 팀의 최근 감독 인터뷰를 불러와 팀 소식에 헤드라인과 함께 뜰 수 있도록 구현
-
팀은 이벤트를 준비하면서 이전 경기 기록과 경기 중 코치에게 전달된 실시간 정보를 기반으로 경기력을 검사하기 위해 AI 지원 스포츠 분석에 그 어느 때보다 더 의존하고 있다. AI는 성공으로 이어지는 패턴을 식별하고 코치에게 팀의 득점 가능성을 극대화하기 위해 최적화할 객관적인 수치를 제공하는 지표를 계산하는 데 사용되고 있는 지표 중 하나는 볼 소유이다. 오픈 소스 추적 라이브러리인 Norfair를 활용하여 비디오 분석 기술을 테스트하고 AI가 경기 비디오를 보면서 자동으로 팀별 공 소유를 계산하는 방법을 보여주는 몇 가지 코드를 작성했다.
tryolab에서 제공한 오픈 소스를 이용해서, 축구 경기의 팀별 공 소유를 계산하는 AI를 이용했다. 점유율을 계산하는 패스 횟수/공 소유 시간이라는 2가지 선택지 중 공 소유 시간을 기준으로 계산했다.
이 AI 모델에서는 COCO dataset에서 훈련된 YOLOv5를 이용해서 플레이어와 축구공을 감지했다. 하지만, 실제 필드에서 플레이되는 공은 기존에 훈련된 모델과는 잘 맞지 않았기에, tryolab에서는 Labellmg라는 labeling tool을 이용해 미세 조정을 했다. 하지만, 아직까지는 모든 영상과 모든 공에 대하여 적용되지 않는다는 한계점이 있다.
축구는 두 팀이 같은 필드에서 경기한다. 그렇기에, 서로 다른 두 팀을 구별하는 방법이 필요하다. 각 팀의 유니폼을 기반으로 이미지 분류를 하는 AI를 훈련시키는 방법도 있지만, 저희는 HSV를 이용한 색상 필터링을 통해 두 팀을 분류하였다. 팀 분류 뿐만 아니라, 심판도 분류 가능하다. 하지만, 심판과 골키퍼의 유니폼 색이 같은 경우에는 분류하기가 어렵다는 단점이 있다.
미리 입력한 HSV 값을 이용하여, 코드 내의 HSV 분류기는 해당 색을 이용해 필터를 만들고, 앞서 인식한 각 선수들의 유니폼에 HSV 필터를 통과시켜, 가장 많이 통과한 픽셀 수를 가지고 있는 필터 색을 선택하게 된다.
또한, inertia를 이용하여 HSV 필터가 현재 프레임에만 기반하는 것이 아닌, 이 프레임의 기록을 기반으로 적용된다.
공을 가지고 있는 선수는, 앞서 인식했던 선수와 공의 위치를 이용하여, 공에 가장 가까운 선수를 공을 가진 선수로 인식하도록 했다. 임계값을 설정하여, 어느 정도 이상으로 공과 선수의 사이가 멀어지면 선수가 공을 소유했다고 인식하지 않도록 했다.
또한, inertia를 이용해서, 패스를 하는 과정에서 공이 상대팀 선수 근처로 지나갔을 때, 소유권이 불필요하게 바뀌지 않도록 했다.
- 회원가입 시 선택했던 팀에 맞게 로고가 띄워지고, 그 팀의 이름이 뜨고 팀의 커뮤니티로 들어갈 수 있다.
- 선택한 팀의 홈 구장과 위치가 띄워지고 클릭하면 직관 티켓을 예약할 수 있다.
- 해외 축구는 새벽 시간에 경기가 진행되는 경우가 많다.
- 저렇게 알림을 설정해놓으면 앱 자체에서 실제로 알림이 오며 예약을 확인할 수 있다.
- 팬들이 직접 최근 세 경기 MOM 선수에 대한 평가를 진행한다.
- 찬성/ 반대 투표와 함께 코멘트도 작성할 수 있다.
- 이는 이 팀을 지지하는 사람들끼리 같은 공간을 공유하는 것이며, 다른 팀으로 로그인 된 사람들은 그 팀의 커뮤니티와 팀 선수에만 투표할 수 있도록 accounts user 정보와 데이터베이스 내에서 외래키를 사용해 구현하였다.
- 찬성,반대 투표를 하면 rating으로 반영이 된다. 이는 데이터베이스에 쌓인 정보를 토대로 백엔드 api를 구성하여 프론트에 바인딩 하였다.
- 다른 사람의 코멘트들은 stack 구조를 적용하여 최신 순이 가장 위로 뜨게 구현하였다.