212 lines
7.0 KiB
Python
212 lines
7.0 KiB
Python
import os
|
|
import sys
|
|
import json
|
|
import cv2
|
|
import glob as gb
|
|
import numpy as np
|
|
|
|
|
|
def colormap(rgb=False):
|
|
color_list = np.array(
|
|
[
|
|
0.000, 0.447, 0.741,
|
|
0.850, 0.325, 0.098,
|
|
0.929, 0.694, 0.125,
|
|
0.494, 0.184, 0.556,
|
|
0.466, 0.674, 0.188,
|
|
0.301, 0.745, 0.933,
|
|
0.635, 0.078, 0.184,
|
|
0.300, 0.300, 0.300,
|
|
0.600, 0.600, 0.600,
|
|
1.000, 0.000, 0.000,
|
|
1.000, 0.500, 0.000,
|
|
0.749, 0.749, 0.000,
|
|
0.000, 1.000, 0.000,
|
|
0.000, 0.000, 1.000,
|
|
0.667, 0.000, 1.000,
|
|
0.333, 0.333, 0.000,
|
|
0.333, 0.667, 0.000,
|
|
0.333, 1.000, 0.000,
|
|
0.667, 0.333, 0.000,
|
|
0.667, 0.667, 0.000,
|
|
0.667, 1.000, 0.000,
|
|
1.000, 0.333, 0.000,
|
|
1.000, 0.667, 0.000,
|
|
1.000, 1.000, 0.000,
|
|
0.000, 0.333, 0.500,
|
|
0.000, 0.667, 0.500,
|
|
0.000, 1.000, 0.500,
|
|
0.333, 0.000, 0.500,
|
|
0.333, 0.333, 0.500,
|
|
0.333, 0.667, 0.500,
|
|
0.333, 1.000, 0.500,
|
|
0.667, 0.000, 0.500,
|
|
0.667, 0.333, 0.500,
|
|
0.667, 0.667, 0.500,
|
|
0.667, 1.000, 0.500,
|
|
1.000, 0.000, 0.500,
|
|
1.000, 0.333, 0.500,
|
|
1.000, 0.667, 0.500,
|
|
1.000, 1.000, 0.500,
|
|
0.000, 0.333, 1.000,
|
|
0.000, 0.667, 1.000,
|
|
0.000, 1.000, 1.000,
|
|
0.333, 0.000, 1.000,
|
|
0.333, 0.333, 1.000,
|
|
0.333, 0.667, 1.000,
|
|
0.333, 1.000, 1.000,
|
|
0.667, 0.000, 1.000,
|
|
0.667, 0.333, 1.000,
|
|
0.667, 0.667, 1.000,
|
|
0.667, 1.000, 1.000,
|
|
1.000, 0.000, 1.000,
|
|
1.000, 0.333, 1.000,
|
|
1.000, 0.667, 1.000,
|
|
0.167, 0.000, 0.000,
|
|
0.333, 0.000, 0.000,
|
|
0.500, 0.000, 0.000,
|
|
0.667, 0.000, 0.000,
|
|
0.833, 0.000, 0.000,
|
|
1.000, 0.000, 0.000,
|
|
0.000, 0.167, 0.000,
|
|
0.000, 0.333, 0.000,
|
|
0.000, 0.500, 0.000,
|
|
0.000, 0.667, 0.000,
|
|
0.000, 0.833, 0.000,
|
|
0.000, 1.000, 0.000,
|
|
0.000, 0.000, 0.167,
|
|
0.000, 0.000, 0.333,
|
|
0.000, 0.000, 0.500,
|
|
0.000, 0.000, 0.667,
|
|
0.000, 0.000, 0.833,
|
|
0.000, 0.000, 1.000,
|
|
0.000, 0.000, 0.000,
|
|
0.143, 0.143, 0.143,
|
|
0.286, 0.286, 0.286,
|
|
0.429, 0.429, 0.429,
|
|
0.571, 0.571, 0.571,
|
|
0.714, 0.714, 0.714,
|
|
0.857, 0.857, 0.857,
|
|
1.000, 1.000, 1.000
|
|
]
|
|
).astype(np.float32)
|
|
color_list = color_list.reshape((-1, 3)) * 255
|
|
if not rgb:
|
|
color_list = color_list[:, ::-1]
|
|
return color_list
|
|
|
|
|
|
def txt2img(visual_path="visual_val_gt"):
|
|
print("Starting txt2img")
|
|
|
|
valid_labels = {1}
|
|
ignore_labels = {2, 7, 8, 12}
|
|
|
|
if not os.path.exists(visual_path):
|
|
os.makedirs(visual_path)
|
|
color_list = colormap()
|
|
|
|
gt_json_path = 'datasets/mot/annotations/val_half.json'
|
|
img_path = 'datasets/mot/train/'
|
|
show_video_names = ['MOT17-02-FRCNN',
|
|
'MOT17-04-FRCNN',
|
|
'MOT17-05-FRCNN',
|
|
'MOT17-09-FRCNN',
|
|
'MOT17-10-FRCNN',
|
|
'MOT17-11-FRCNN',
|
|
'MOT17-13-FRCNN']
|
|
|
|
|
|
test_json_path = 'datasets/mot/annotations/test.json'
|
|
test_img_path = 'datasets/mot/test/'
|
|
test_show_video_names = ['MOT17-01-FRCNN',
|
|
'MOT17-03-FRCNN',
|
|
'MOT17-06-FRCNN',
|
|
'MOT17-07-FRCNN',
|
|
'MOT17-08-FRCNN',
|
|
'MOT17-12-FRCNN',
|
|
'MOT17-14-FRCNN']
|
|
if visual_path == "visual_test_predict":
|
|
show_video_names = test_show_video_names
|
|
img_path = test_img_path
|
|
gt_json_path = test_json_path
|
|
for show_video_name in show_video_names:
|
|
img_dict = dict()
|
|
|
|
if visual_path == "visual_val_gt":
|
|
txt_path = 'datasets/mot/train/' + show_video_name + '/gt/gt_val_half.txt'
|
|
elif visual_path == "visual_yolox_x":
|
|
txt_path = 'YOLOX_outputs/yolox_mot_x_1088/track_results/'+ show_video_name + '.txt'
|
|
elif visual_path == "visual_test_predict":
|
|
txt_path = 'test/tracks/'+ show_video_name + '.txt'
|
|
else:
|
|
raise NotImplementedError
|
|
|
|
with open(gt_json_path, 'r') as f:
|
|
gt_json = json.load(f)
|
|
|
|
for ann in gt_json["images"]:
|
|
file_name = ann['file_name']
|
|
video_name = file_name.split('/')[0]
|
|
if video_name == show_video_name:
|
|
img_dict[ann['frame_id']] = img_path + file_name
|
|
|
|
|
|
txt_dict = dict()
|
|
with open(txt_path, 'r') as f:
|
|
for line in f.readlines():
|
|
linelist = line.split(',')
|
|
|
|
mark = int(float(linelist[6]))
|
|
label = int(float(linelist[7]))
|
|
vis_ratio = float(linelist[8])
|
|
|
|
if visual_path == "visual_val_gt":
|
|
if mark == 0 or label not in valid_labels or label in ignore_labels or vis_ratio <= 0:
|
|
continue
|
|
|
|
img_id = linelist[0]
|
|
obj_id = linelist[1]
|
|
bbox = [float(linelist[2]), float(linelist[3]),
|
|
float(linelist[2]) + float(linelist[4]),
|
|
float(linelist[3]) + float(linelist[5]), int(obj_id)]
|
|
if int(img_id) in txt_dict:
|
|
txt_dict[int(img_id)].append(bbox)
|
|
else:
|
|
txt_dict[int(img_id)] = list()
|
|
txt_dict[int(img_id)].append(bbox)
|
|
|
|
for img_id in sorted(txt_dict.keys()):
|
|
img = cv2.imread(img_dict[img_id])
|
|
for bbox in txt_dict[img_id]:
|
|
cv2.rectangle(img, (int(bbox[0]), int(bbox[1])), (int(bbox[2]), int(bbox[3])), color_list[bbox[4]%79].tolist(), thickness=2)
|
|
cv2.putText(img, "{}".format(int(bbox[4])), (int(bbox[0]), int(bbox[1])), cv2.FONT_HERSHEY_SIMPLEX, 0.8, color_list[bbox[4]%79].tolist(), 2)
|
|
cv2.imwrite(visual_path + "/" + show_video_name + "{:0>6d}.png".format(img_id), img)
|
|
print(show_video_name, "Done")
|
|
print("txt2img Done")
|
|
|
|
|
|
def img2video(visual_path="visual_val_gt"):
|
|
print("Starting img2video")
|
|
|
|
img_paths = gb.glob(visual_path + "/*.png")
|
|
fps = 16
|
|
size = (1920,1080)
|
|
videowriter = cv2.VideoWriter(visual_path + "_video.avi",cv2.VideoWriter_fourcc('M','J','P','G'), fps, size)
|
|
|
|
for img_path in sorted(img_paths):
|
|
img = cv2.imread(img_path)
|
|
img = cv2.resize(img, size)
|
|
videowriter.write(img)
|
|
|
|
videowriter.release()
|
|
print("img2video Done")
|
|
|
|
|
|
if __name__ == '__main__':
|
|
visual_path="visual_yolox_x"
|
|
if len(sys.argv) > 1:
|
|
visual_path =sys.argv[1]
|
|
txt2img(visual_path)
|
|
#img2video(visual_path)
|