import os
from pathlib import Path
from ultralytics.utils.downloads import download
def visdrone2yolo(dir_path):
dir = Path(dir_path)
from PIL import Image
from tqdm import tqdm
def convert_box(size, box):
dw = 1. / size[0]
dh = 1. / size[1]
return (box[0] + box[2] / 2) * dw, (box[1] + box[3] / 2) * dh, box[2] * dw, box[3] * dh
(dir / 'labels').mkdir(parents=True, exist_ok=True)
pbar = tqdm((dir / 'annotations').glob('*.txt'), desc=f'Converting {dir}')
for f in pbar:
img_size = Image.open((dir / 'images' / f.name).with_suffix('.jpg')).size
lines = []
with open(f, 'r') as file:
for row in [x.split(',') for x in file.read().strip().splitlines()]:
if row[4] == '0':
continue
cls = int(row[5]) - 1
box = convert_box(img_size, tuple(map(int, row[:4])))
lines.append(f"{cls} {' '.join(f'{x:.6f}' for x in box)}\n")
with open(str(f).replace(f'{os.sep}annotations{os.sep}', f'{os.sep}labels{os.sep}'), 'w') as fl:
fl.writelines(lines)
visdrone2yolo('G:\YVisDrone\VisDrone\VisDrone2019-DET-test-dev')