GameQuant Dev Diary;
All Posts
- LCU Client API
- LCU Driver, ffmpeg, replay API 등을 활용하여 제작한 auto data collector.
- 리플레이를 순차적으로 처음부터 끝까지 8배속으로 녹화하고, 미니맵 부분만 crop filter 적용, 저장공간을 절약한다.
- API documentation이 없어 꽤 애를 먹었지만, swagger로 콜 보내보면서 열심히 작업한 결과물이다.
»
- Line Push Statistics
- 1) 라인 위치 좌표 지도에 바텀 라인 추가 (블루팀 기준)
- 노란색: 미는 라인
- 진녹색: 중간에 걸친 라인
- 초록색: 당기는 라인
»
- Line Push Statistics 결과
- 탑 미드를 위주로 해당 챔피언이 라인을 중간에서 유지하는지(1), 당기는지(2) 혹은 미는지(3)에 대한 통계값 추출 시스템 완성
- 1) 탑 미드 라인의 챔피언이 라인을 밀고 있는지 여부를 확인하기 위한 좌표 지도 (블루팀 기준)
- 노란색: 미는 라인
- 진녹색: 중간에 걸친 라인
- 초록색: 당기는 라인
»
- JG Statistics 결과
- 결과물
- File_Name: 입력 비디오 파일 이름
- First_Pos: 정글러가 최초로 간 위치 (1: Top, 2:Mid, 3:Bot, 4:Counter JG)
- Frame_Index: First_Pos에 도달했을 때의 frame index (추후 경기 시간으로 변경 예정)
- Opposite_JG_ID: 상대 정글러의 챔피언 ID
- 값이 -1인 경우는 오류가 발생한 경우 (위치 탐색 실패)
»
- JG Statistics
- 각 진영 별 갱라인 위치와 상대 정글 위치 좌표 추출
»
- Minion Tracking
- 이것저것 많이 건드려보았는데 미니언 트랙킹 자체가 변수가 많고 고려해야하는 경우의 수가 많아서 앞으로도 계속 보완해야 할 것 같음.
- 1) Centroid 거리 비교 고도화
- 기존의 방법은 scikit-image를 활용하여 얻은 미니언 웨이브마다의 centroid를 얻은 다음 단순히 centroid 사이의 거리를 바탕으로 교착상태인지 결정
- 미니언 웨이브의 크기와 미니언으로 간주된 챔피언 아이콘이 길게 늘어질 경우 centroid와 웨이브의 가장자리 지점까지의 거리가 멀어 centroid 비교로는 정확도가 떨어짐
- Centroid의 거리에 각 웨이브의 major axis length의 절반(타원의 반지름으로 이해)만큼을 빼주어서 두 웨이브 사이의 최단 거리를 고려하는 방법으로 보완
»
- Minion Tracking
- noise(중간중간 엉뚱한 위치에 예측) 제거와 중간 몇몇 프레임에서 누락되는 경우를 보완(interpolate)
- 기존 방식은 프레임마다 미니언의 위치를 예측하고 morphology dilation을 통해 미니언을 웨이브로 묶은 다음 블루팀 웨이브와 레드팀 웨이브가 가까이 있을 경우 교착 상태(lock)으로 좌표값 반환
- noise 제거와 일부 프레임 누락 문제 해결을 위하여 각 교착 상태의 좌표를 각각의 상황(위치 기준)으로 구분
- 각 lock 좌표에 대해 기존 lock 좌표로 구성된 graph(하나의 상황을 묶은 것)와 비교하여 새로운 graph에 해당할 경우 새롭게 graph를 생성하고 그렇지 않으면 기존의 graph에 하나로 합치는 방법
- 이때 기존 그래프의 좌표와 비슷한 위치에 존재하지만 프레임 차이(frame_dist)가 큰 경우에는 같은 웨이브라고 보기 어려우므로 따로 구
»
- Code Refactoring
- 기존 코드가 jupyter notebook에 너무 난잡하게 짜여져 있어 code refactoring 진행
- 정리한 코드 구조
- main.py : main code
- utils
└ io.py : input/output
└ champ_tracking.py : functions for champion icon tracking
└ jg_tracking.py : functions for jungle monster tracking
└ minion_tracking.py : functions for minion tracking
└ time_log.py : functions for kill and object log tracking
- 정리된 main.py 코드
»
- 정글몹 tracking
- 이전에 정글몹 아이콘을 이용한 tracking 방법 대체. 정글몹은 미니맵 상에서 고정된 위치에 존재하므로 해당 위치에 정글몹 아이콘이 존재하는지 여부를 바탕으로 tracking
- 각 정글몹별 미니맵 상의 좌표 (수작업으로 구한 값이라 오차가 있을 수 있음.)
»
- 리플레이 영상으로부터 시간 추출
- 2.1 전체 영상에서 현재 게임 시간 영역 추출 (빨간색 박스)
»
- JgPos v1.4 개발
- 아래의 예시와 같이 JgPos v1.3에서 귀환 모션을 잡아내지 못하는 문제점 발견
»
- JgPos v1.3 개발
- 매칭의 대상이 되는 query icon 테두리에 각 진영(red, blue)에 해당하는 원을 추가하여 매칭 정확도 향상
»
- 플레이어의 위치 예상 AI 모델 학습용 csv 데이터셋 확보를 위한 코드 제작
- csv에 기록되는 값: Time step, here (챔피언 ID; 해당 링크의 챔피언 ID 엑셀 파일 사용), x_coord, y_coord, position (탑:0, 정글:1, 미드:2, 원딜:3, 서폿:4)
- JgPos v1.2이 예측하지 못한 프레임의 경우, 별도의 방법(e.g., 전후의 프레임 정보 활용)을 이용하여 해당 프레임에 누락된 챔피언의 위치를 기입할 예정
- JgPos v1.2 기반 샘플 csv 데이터셋 (링크)
»
- 각 챔피언의 프레임 당 위치 예측 모델 성능 개선 (JgPos v1.2)
- 챔피언 아이콘이 겹치는 경우에도 최대한 예측이 가능하도록 수정
- Center-cropping: query icon의 크기를 조금씩 줄여가며 matching
- Portion matching: occlusion된 경우를 고려하여 전체 icon 중 일부만 crop하여 matching
- HSV difference: 단순히 SSIM만 고려하였을 때, 협곡의 지형과 챔피언 아이콘의 모양이 유사하여 매칭되는 경우가 있어 매칭된 영역과 챔피언 아이콘 사이의 HSV값을 추가적으로 비교
»