def _save_tracker_output(seq: Sequence, tracker: Tracker, output: dict): """Saves the output of the tracker.""" if not os.path.exists(tracker.results_dir): os.makedirs(tracker.results_dir) base_results_path = os.path.join(tracker.results_dir, seq.name) segmentation_path = os.path.join(tracker.segmentation_dir, seq.name) frame_names = [ os.path.splitext(os.path.basename(f))[0] for f in seq.frames ] def save_bb(file, data): tracked_bb = np.array(data).astype(int) np.savetxt(file, tracked_bb, delimiter='\t', fmt='%d') def save_time(file, data): exec_times = np.array(data).astype(float) np.savetxt(file, exec_times, delimiter='\t', fmt='%f') def _convert_dict(input_dict): data_dict = {} for elem in input_dict: for k, v in elem.items(): if k in data_dict.keys(): data_dict[k].append(v) else: data_dict[k] = [ v, ] return data_dict for key, data in output.items(): # If data is empty if not data: continue if key == 'target_bbox': if isinstance(data[0], (dict, OrderedDict)): data_dict = _convert_dict(data) for obj_id, d in data_dict.items(): bbox_file = '{}_{}.txt'.format(base_results_path, obj_id) save_bb(bbox_file, d) else: # Single-object mode bbox_file = '{}.txt'.format(base_results_path) save_bb(bbox_file, data) elif key == 'time': if isinstance(data[0], dict): data_dict = _convert_dict(data) for obj_id, d in data_dict.items(): timings_file = '{}_{}_time.txt'.format( base_results_path, obj_id) save_time(timings_file, d) else: timings_file = '{}_time.txt'.format(base_results_path) save_time(timings_file, data) elif key == 'segmentation': assert len(frame_names) == len(data) if not os.path.exists(segmentation_path): os.makedirs(segmentation_path) for frame_name, frame_seg in zip(frame_names, data): imwrite_indexed( os.path.join(segmentation_path, '{}.png'.format(frame_name)), frame_seg)
def _save_tracker_output(seq: Sequence, tracker: Tracker, output: dict): """Saves the output of the tracker.""" if not os.path.exists(tracker.results_dir): os.makedirs(tracker.results_dir) base_results_path = os.path.join(tracker.results_dir, seq.name) segmentation_path = os.path.join(tracker.segmentation_dir, seq.name) frame_names = [ os.path.splitext(os.path.basename(f))[0] for f in seq.frames ] def save_bb(file, data): tracked_bb = np.array(data).astype(int) np.savetxt(file, tracked_bb, delimiter='\t', fmt='%d') def save_one_file(bb): data = {} length = len(bb) for i in range(0, length): data[i] = bb[i] with open("/gdrive/My Drive/tracking_results/result.json", 'w') as fp: json.dump(data, fp) def save_one_file_txt(bb): data = list() length = len(bb) for i in range(0, length - 1): data[i] = bb[i] with open("/gdrive/My Drive/tracking_results/result.txt", 'w') as txt: txt.write(str(data)) txt.write("\n") def save_time(file, data): exec_times = np.array(data).astype(float) np.savetxt(file, exec_times, delimiter='\t', fmt='%f') def _convert_dict(input_dict): data_dict = {} for elem in input_dict: for k, v in elem.items(): if k in data_dict.keys(): data_dict[k].append(v) else: data_dict[k] = [ v, ] return data_dict for key, data in output.items(): # If data is empty if not data: continue #TODO save in one TXT file if key == 'target_bbox': if isinstance(data[0], (dict, OrderedDict)): data_dict = _convert_dict(data) bb = list() for obj_id, d in data_dict.items(): bbox_file = '{}_{}.txt'.format(base_results_path, obj_id) one_file = 'results.txt' bb.append(d) save_one_file(bb) save_bb(bbox_file, d) #save_one_file_txt(d) else: # Single-object mode bbox_file = '{}.txt'.format(base_results_path) save_bb(bbox_file, data) #elif key == 'time': #if isinstance(data[0], dict): #data_dict = _convert_dict(data) #for obj_id, d in data_dict.items(): #timings_file = '{}_{}_time.txt'.format(base_results_path, obj_id) #save_time(timings_file, d) #else: #timings_file = '{}_time.txt'.format(base_results_path) #save_time(timings_file, data) elif key == 'segmentation': assert len(frame_names) == len(data) if not os.path.exists(segmentation_path): os.makedirs(segmentation_path) for frame_name, frame_seg in zip(frame_names, data): imwrite_indexed( os.path.join(segmentation_path, '{}.png'.format(frame_name)), frame_seg)