Spaces:
Build error
Build error
import os | |
from typing import Dict | |
import numpy as np | |
# from utils.log import get_logger | |
def write_results(filename, results, data_type): | |
if data_type == 'mot': | |
save_format = '{frame},{id},{x1},{y1},{w},{h},-1,-1,-1,-1\n' | |
elif data_type == 'kitti': | |
save_format = '{frame} {id} pedestrian 0 0 -10 {x1} {y1} {x2} {y2} -10 -10 -10 -1000 -1000 -1000 -10\n' | |
else: | |
raise ValueError(data_type) | |
with open(filename, 'w') as f: | |
for frame_id, tlwhs, track_ids in results: | |
if data_type == 'kitti': | |
frame_id -= 1 | |
for tlwh, track_id in zip(tlwhs, track_ids): | |
if track_id < 0: | |
continue | |
x1, y1, w, h = tlwh | |
x2, y2 = x1 + w, y1 + h | |
line = save_format.format(frame=frame_id, id=track_id, x1=x1, y1=y1, x2=x2, y2=y2, w=w, h=h) | |
f.write(line) | |
# def write_results(filename, results_dict: Dict, data_type: str): | |
# if not filename: | |
# return | |
# path = os.path.dirname(filename) | |
# if not os.path.exists(path): | |
# os.makedirs(path) | |
# if data_type in ('mot', 'mcmot', 'lab'): | |
# save_format = '{frame},{id},{x1},{y1},{w},{h},1,-1,-1,-1\n' | |
# elif data_type == 'kitti': | |
# save_format = '{frame} {id} pedestrian -1 -1 -10 {x1} {y1} {x2} {y2} -1 -1 -1 -1000 -1000 -1000 -10 {score}\n' | |
# else: | |
# raise ValueError(data_type) | |
# with open(filename, 'w') as f: | |
# for frame_id, frame_data in results_dict.items(): | |
# if data_type == 'kitti': | |
# frame_id -= 1 | |
# for tlwh, track_id in frame_data: | |
# if track_id < 0: | |
# continue | |
# x1, y1, w, h = tlwh | |
# x2, y2 = x1 + w, y1 + h | |
# line = save_format.format(frame=frame_id, id=track_id, x1=x1, y1=y1, x2=x2, y2=y2, w=w, h=h, score=1.0) | |
# f.write(line) | |
# logger.info('Save results to {}'.format(filename)) | |
def read_results(filename, data_type: str, is_gt=False, is_ignore=False): | |
if data_type in ('mot', 'lab'): | |
read_fun = read_mot_results | |
else: | |
raise ValueError('Unknown data type: {}'.format(data_type)) | |
return read_fun(filename, is_gt, is_ignore) | |
""" | |
labels={'ped', ... % 1 | |
'person_on_vhcl', ... % 2 | |
'car', ... % 3 | |
'bicycle', ... % 4 | |
'mbike', ... % 5 | |
'non_mot_vhcl', ... % 6 | |
'static_person', ... % 7 | |
'distractor', ... % 8 | |
'occluder', ... % 9 | |
'occluder_on_grnd', ... %10 | |
'occluder_full', ... % 11 | |
'reflection', ... % 12 | |
'crowd' ... % 13 | |
}; | |
""" | |
def read_mot_results(filename, is_gt, is_ignore): | |
valid_labels = {1} | |
ignore_labels = {2, 7, 8, 12} | |
results_dict = dict() | |
if os.path.isfile(filename): | |
with open(filename, 'r') as f: | |
for line in f.readlines(): | |
linelist = line.split(',') | |
if len(linelist) < 7: | |
continue | |
fid = int(linelist[0]) | |
if fid < 1: | |
continue | |
results_dict.setdefault(fid, list()) | |
if is_gt: | |
if 'MOT16-' in filename or 'MOT17-' in filename: | |
label = int(float(linelist[7])) | |
mark = int(float(linelist[6])) | |
if mark == 0 or label not in valid_labels: | |
continue | |
score = 1 | |
elif is_ignore: | |
if 'MOT16-' in filename or 'MOT17-' in filename: | |
label = int(float(linelist[7])) | |
vis_ratio = float(linelist[8]) | |
if label not in ignore_labels and vis_ratio >= 0: | |
continue | |
else: | |
continue | |
score = 1 | |
else: | |
score = float(linelist[6]) | |
tlwh = tuple(map(float, linelist[2:6])) | |
target_id = int(linelist[1]) | |
results_dict[fid].append((tlwh, target_id, score)) | |
return results_dict | |
def unzip_objs(objs): | |
if len(objs) > 0: | |
tlwhs, ids, scores = zip(*objs) | |
else: | |
tlwhs, ids, scores = [], [], [] | |
tlwhs = np.asarray(tlwhs, dtype=float).reshape(-1, 4) | |
return tlwhs, ids, scores |