2021-07-06 JG Statistics enhancements

  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인 경우는 오류가 발생한 경우 (위치 탐색 실패)

    Daily%20Report%202021%2007%2006%20(Tue)%2074d9b440c053444ebcb9dd9c21a1ce45/Untitled.png

    jg_stat_df.csv

  • 보조 결과물 (vis)
  • 각 영상에서 최초 위치를 발견하였을 때의 frame에 정글러의 위치를 표시하여 시각화한 결과도 함께 제공

    Daily%20Report%202021%2007%2006%20(Tue)%2074d9b440c053444ebcb9dd9c21a1ce45/Untitled%201.png

    Daily%20Report%202021%2007%2006%20(Tue)%2074d9b440c053444ebcb9dd9c21a1ce45/11-13_KR-5300592817_01.png

  1. JG Statistics 코드
    • 통계값을 얻고자 하는 챔피언의 이름으로 된 폴더에 webm 파일 저장

      Daily%20Report%202021%2007%2006%20(Tue)%2074d9b440c053444ebcb9dd9c21a1ce45/Untitled%202.png

    • 해당 폴더 경로를 –video_dir 파라미터로 넣어주면 해당 영상들에 대한 정보를 csv로 추출하여 저장

      Daily%20Report%202021%2007%2006%20(Tue)%2074d9b440c053444ebcb9dd9c21a1ce45/Untitled%203.png

    • main 파일: jg_statistics.py

        video_list = glob(os.path.join(args.video_dir, '*.webm'))
              
        champ_dict = get_champ_icons(args.champ_dir)
              
        pos_labels, first_frame_idcs, vis_imgs, opposite_names = [], [], [], []
        for video_path in video_list:
          # Load a input video
          frames = load_video(video_path, args.max_frames)
              
          # Champion ID information
          champ_ID_df = pd.read_csv(args.champ_csv)
          champ_ID_dict = champ_ID_df.set_index('ID').to_dict()['Name']
              
          # Get the base icons of all champions from the disk
          icons = get_all_icons_in_frame(frames[0])
          icon_dict = match_icons(icons, champ_dict, champ_ID_df, args.query_size, ICON_SIZE)
              
          # Get target jg name and opposite jg name
          target_champ_w_team = [name for name in icon_dict.keys() if args.target_champ in name][0]
          if target_champ_w_team.endswith('_B'):
            side_icon = icons[1]
            opposite_jg_name = list(icon_dict.keys())[6].replace('_R', '')
          if target_champ_w_team.endswith('_R'):
            side_icon = icons[6]
            opposite_jg_name = list(icon_dict.keys())[1].replace('_B', '')
                
          icon_query = icon_dict[target_champ_w_team][0]
          opposite_jg_ID = champ_ID_df[champ_ID_df['Name'] == opposite_jg_name].ID.values[0]
              
          # main
          jg_pos_df, minimap_size = convert_single_champ_to_csv(target_champ_w_team, frames, side_icon, icon_query, args.crop_pxs, args.top_k, args.skip_interval)
          minimap_w_line = get_separate_line_and_jg_map(minimap_size, team=target_champ_w_team.split('_')[-1])
          jg_first_pos_label, first_frame_idx, (x,y) = get_the_first_jg_pos_and_frame_idx(jg_pos_df, minimap_w_line)
              
          if first_frame_idx != -1:
            jg_pos_vis = get_jg_pos_vis(frames, first_frame_idx, x, y)
          else:
            jg_pos_vis = None
              
          pos_labels.append(jg_first_pos_label)
          first_frame_idcs.append(first_frame_idx)
          vis_imgs.append(jg_pos_vis)
          opposite_names.append(opposite_jg_ID)
              
        export_jg_statistics(args.output_dir, video_list, pos_labels, first_frame_idcs, opposite_names, vis_imgs)