in siammot/data/ingestion/ingest_mot.py [0:0]
def sample_from_mot_csv(csv_path, fps, sample=None, mot17=True, has_gt=False):
if sample is None:
id_ = Path(csv_path).stem
sample = DataSample(id_)
else:
sample = sample.get_copy_without_entities()
with open(csv_path, newline='') as f:
reader = csv.reader(f, delimiter=',')
def coord(x):
return round(float(x))
for row in reader:
frame_num = int(row[0])
obj_id = row[1]
x = coord(row[2])
y = coord(row[3])
w = coord(row[4])
h = coord(row[5])
conf = float(row[6])
# If not mot17 the last 3 are 3D coords which are usually -1
# (see pg. 9 https://arxiv.org/pdf/1504.01942.pdf)
if has_gt and mot17:
label = int(row[7])
visibility = float(row[8])
else:
label = 1
visibility = 1
label_text = MOT_LABEL_MAP[label]
# NOTE: Actually all classes that aren't Pedestrian have confidence 0 and so should be ingested
# but are ignored at evaluation time
# i.e. (label != 1 and conf) is never true
assert not (label != 1 and conf)
has_person_label = label_text in ("Pedestrian")
time_ms = int((frame_num - 1) / fps * 1000)
entity = AnnoEntity(time=time_ms, id=obj_id)
entity.bbox = [x, y, w, h]
blob = {
"frame_csv": frame_num,
"frame_idx": frame_num - 1,
"visibility": visibility
}
entity.labels = {}
# entity.labels["person"] = 1
if has_person_label:
entity.labels["person"] = 1
else:
entity.labels[str(label)] = 1
entity.labels["vis"] = visibility
entity.confidence = conf
entity.blob = blob
sample.add_entity(entity)
return sample