in scripts/data_prepare.py [0:0]
def prepare_visdrone():
name_dict = {'0': 'ignored regions', '1': 'pedestrian', '2': 'people',
'3': 'bicycle', '4': 'car', '5': 'van', '6': 'truck',
'7': 'tricycle', '8': 'awning-tricycle', '9': 'bus',
'10': 'motor', '11': 'others'}
split_dict = {'test-dev': 'test-dev.txt', 'val': 'val.txt', 'train': 'train.txt'}
root = opt.dataset
os.makedirs(join(root, 'split'), exist_ok=True)
for sub_dir in glob(join(root, 'VisDrone2019-DET-*')):
os.makedirs(join(sub_dir, 'labels'), exist_ok=True)
images = sorted(glob(join(sub_dir, 'images', '*.jpg')))
if 'test-challenge' in sub_dir:
with open(join(root, 'split', 'test-challenge.txt'), 'w+') as f:
f.writelines([line + '\n' for line in images])
continue
data_paths = []
for image_path in tqdm(images):
image = cv2.imread(image_path)
height, width, _ = image.shape
label_path = image_path.replace('images', 'annotations').replace('.jpg', '.txt')
# if "masked" in label_path: # avoid repeated processing
# continue
assert exists(label_path)
label_lines = []
masked = False
# <bbox_left>,<bbox_top>,<bbox_width>,<bbox_height>,<score>,<object_category>,<truncation>,<occlusion>
for line in _readlines(label_path):
if line[-1] == ',':
line = line[:-1]
x1, y1, w, h, score, cls, truncation, occlusion = list(map(int, line.split(',')))
if cls in [0, 11]:
image[y1:y1 + h, x1:x1 + w, :] = 85
masked = True
elif truncation < 2 and (occlusion < 2 or True):
xc, yc = x1 + w / 2., y1 + h / 2.
label_lines.append(('%d' + ' %.6f' * 4 + '\n') %
(cls - 1, xc / width, yc / height, w / width, h / height))
else:
pass
if masked:
image_path = image_path.replace('.jpg', '_masked.jpg')
cv2.imwrite(image_path, image)
# for consistency
label_path = image_path.replace('images', 'annotations').replace('.jpg', '.txt')
with open(label_path, 'w+') as f:
f.writelines(label_lines)
gen_mask(label_path, image, cls_ratio=True)
data_paths.append(image_path + '\n')
with open(join(root, 'split', split_dict[basename(sub_dir)[17:]]), 'w+') as f:
f.writelines(data_paths)