import json import os import re import numpy as np import cv2 from glob import glob from fire import Fire def process(dataset_name): with open(os.path.join(dataset_name, 'list.txt'), 'r') as f: lines = f.readlines() videos = [x.strip() for x in lines] # if dataset_name == 'VOT2016': meta_data = {} tags = [] for video in videos: with open(os.path.join(dataset_name, video, "groundtruth.txt"),'r') as f: gt_traj = [list(map(float, x.strip().split(','))) for x in f.readlines()] img_names = sorted(glob(os.path.join(dataset_name, video, 'color', '*.jpg'))) if len(img_names) == 0: img_names = sorted(glob(os.path.join(dataset_name, video, '*.jpg'))) im = cv2.imread(img_names[0]) img_names = [x.split('/', 1)[1] for x in img_names] # tag if dataset_name in ['VOT2018', 'VOT2019']: tag_file = os.path.join(dataset_name, video, 'camera_motion.tag') if os.path.exists(tag_file): with open(tag_file, 'r') as f: camera_motion = [int(x.strip()) for x in f.readlines()] camera_motion += [0] * (len(gt_traj) - len(camera_motion)) else: print("File not exists: ", tag_file) camera_motion = [] # [0] * len(gt_traj) tag_file = os.path.join(dataset_name, video, 'illum_change.tag') if os.path.exists(tag_file): with open(tag_file, 'r') as f: illum_change = [int(x.strip()) for x in f.readlines()] illum_change += [0] * (len(gt_traj) - len(illum_change)) else: print("File not exists: ", tag_file) illum_change = [] # [0] * len(gt_traj) tag_file = os.path.join(dataset_name, video, 'motion_change.tag') if os.path.exists(tag_file): with open(tag_file, 'r') as f: motion_change = [int(x.strip()) for x in f.readlines()] motion_change += [0] * (len(gt_traj) - len(motion_change)) else: print("File not exists: ", tag_file) motion_change = [] # [0] * len(gt_traj) tag_file = os.path.join(dataset_name, video, 'size_change.tag') if os.path.exists(tag_file): with open(tag_file, 'r') as f: size_change = [int(x.strip()) for x in f.readlines()] size_change += [0] * (len(gt_traj) - len(size_change)) else: print("File not exists: ", tag_file) size_change = [] # [0] * len(gt_traj) tag_file = os.path.join(dataset_name, video, 'occlusion.tag') if os.path.exists(tag_file): with open(tag_file, 'r') as f: occlusion = [int(x.strip()) for x in f.readlines()] occlusion += [0] * (len(gt_traj) - len(occlusion)) else: print("File not exists: ", tag_file) occlusion = [] # [0] * len(gt_traj) img_files = os.path.join('VOT2019', ) meta_data[video] = {'video_dir': video, 'init_rect': gt_traj[0], 'img_names': img_names, 'width': im.shape[1], 'height': im.shape[0], 'gt_rect': gt_traj, 'camera_motion': camera_motion, 'illum_change': illum_change, 'motion_change': motion_change, 'size_change': size_change, 'occlusion': occlusion} elif 'VOT2016' == dataset_name: tag_file = os.path.join(dataset_name, video, 'camera_motion.label') if os.path.exists(tag_file): with open(tag_file, 'r') as f: camera_motion = [int(x.strip()) for x in f.readlines()] camera_motion += [0] * (len(gt_traj) - len(camera_motion)) else: print("File not exists: ", tag_file) camera_motion = [] # [0] * len(gt_traj) tag_file = os.path.join(dataset_name, video, 'illum_change.label') if os.path.exists(tag_file): with open(tag_file, 'r') as f: illum_change = [int(x.strip()) for x in f.readlines()] illum_change += [0] * (len(gt_traj) - len(illum_change)) else: print("File not exists: ", tag_file) illum_change = [] # [0] * len(gt_traj) tag_file = os.path.join(dataset_name, video, 'motion_change.label') if os.path.exists(tag_file): with open(tag_file, 'r') as f: motion_change = [int(x.strip()) for x in f.readlines()] motion_change += [0] * (len(gt_traj) - len(motion_change)) else: print("File not exists: ", tag_file) motion_change = [] # [0] * len(gt_traj) tag_file = os.path.join(dataset_name, video, 'size_change.label') if os.path.exists(tag_file): with open(tag_file, 'r') as f: size_change = [int(x.strip()) for x in f.readlines()] size_change += [0] * (len(gt_traj) - len(size_change)) else: print("File not exists: ", tag_file) size_change = [] # [0] * len(gt_traj) tag_file = os.path.join(dataset_name, video, 'occlusion.label') if os.path.exists(tag_file): with open(tag_file, 'r') as f: occlusion = [int(x.strip()) for x in f.readlines()] occlusion += [0] * (len(gt_traj) - len(occlusion)) else: print("File not exists: ", tag_file) occlusion = [] # [0] * len(gt_traj) meta_data[video] = {'video_dir': video, 'init_rect': gt_traj[0], 'img_names': img_names, 'gt_rect': gt_traj, 'width': im.shape[1], 'height': im.shape[0], 'camera_motion': camera_motion, 'illum_change': illum_change, 'motion_change': motion_change, 'size_change': size_change, 'occlusion': occlusion} else: meta_data[video] = {'video_dir': video, 'init_rect': gt_traj[0], 'img_names': img_names, 'gt_rect': gt_traj, 'width': im.shape[1], 'height': im.shape[0]} json.dump(meta_data, open(dataset_name+'.json', 'w')) if __name__ == '__main__': Fire(process)