| from PIL import Image, ImageDraw, ImageFont |
| import os |
| from pathlib import Path |
|
|
|
|
| def draw(images_path, labels_path): |
| pa = Path.cwd() / 'video-test' / 'dt-tomato' |
| pal = Path(pa / labels_path) |
| dir_list = sorted(pal.glob('*')) |
| for each in dir_list: |
| draw_labels_on_image( |
| pa, images_path, pal, os.path.splitext(os.path.split(each)[1])[0] |
| ) |
|
|
|
|
| def draw_labels_on_image(path, images_path, labels_path, file_name) -> None: |
| """Draws labels on an image using the provided labels file.""" |
| image = Image.open(f'{path}/{images_path}/{file_name}.jpg') |
| width, height = image.size |
|
|
| with open(labels_path / f"{file_name}.txt") as file: |
| for line in file: |
| class_id, x_center, y_center, width_factor, height_factor = line.split() |
| x = float(x_center) * width |
| y = float(y_center) * height |
| width_factor = int(float(width_factor) * width) |
| height_factor = int(float(height_factor) * height) |
|
|
| font = ImageFont.truetype("arial.ttf", 15) |
| draw = ImageDraw.Draw(image) |
| draw.text((x, y), class_id, font=font, fill=(255, 0, 0)) |
| draw.rectangle( |
| ( |
| (x - width_factor // 2), |
| (y - height_factor // 2), |
| (x + width_factor // 2), |
| (y + height_factor // 2), |
| ), |
| outline=(255, 255, 255), |
| width=2, |
| ) |
|
|
| image.save(f'{path}/t{file_name}.jpg', quality=95) |
|
|
|
|
| if __name__ == '__main__': |
| draw('images', 'lables') |
|
|
| |
| |
|
|
| |
| |
|
|
| |
| |
|
|