| import os |
| import json |
| from PIL import Image, ImageDraw, ImageFont |
|
|
| def draw_box_desc_on_blank(obboxes, prompt, image_size=(512, 512)): |
| color_list = ['red', 'blue', 'yellow', 'purple', 'green', |
| 'black', 'brown', 'orange', 'white', 'gray'] |
|
|
| width, height = image_size |
| pil_img = Image.new("RGB", image_size, "white") |
| draw = ImageDraw.Draw(pil_img) |
|
|
| try: |
| font = ImageFont.truetype('../../fonts/GILI____.TTF', 56) |
| except: |
| font = ImageFont.load_default() |
|
|
| for obj_box, text_desc in zip(obboxes, prompt): |
| if not any(obj_box): |
| continue |
|
|
| fill_color = next((color for color in text_desc.split(' ') if color in color_list), 'black') |
| text = text_desc.split(',')[0] |
|
|
| polygon_points = [(x * width, y * height) for x, y in zip(obj_box[::2], obj_box[1::2])] |
| draw.polygon(polygon_points, outline=fill_color, width=3) |
|
|
| x_min, y_min = polygon_points[0] |
| draw.text((int(x_min), int(y_min)), text, fill=fill_color, font=font) |
|
|
| return pil_img |
|
|
|
|
| def process_jsonl(jsonl_paths, output_dir, image_size=(512, 512)): |
| os.makedirs(output_dir, exist_ok=True) |
|
|
| for jsonl_path in jsonl_paths: |
| with open(jsonl_path, "r", encoding="utf-8") as f: |
| for i, line in enumerate(f): |
| data = json.loads(line.strip()) |
| obboxes = data.get("obboxes", []) |
| captions = data.get("captions", []) |
|
|
| img = draw_box_desc_on_blank(obboxes, captions[1:], image_size=image_size) |
|
|
| file_name = os.path.basename(data["file_name"]) |
| save_path = os.path.join(output_dir, file_name) |
| img.save(save_path) |
| print(f"Saved {save_path}") |
|
|
|
|
| PROJECT_DIR = os.getenv('DSP_PROJECT_DIR', '/path/to/DSP_PROJECT_DIR') |
|
|
| if __name__ == "__main__": |
| jsonl_paths = [ |
| os.path.join(PROJECT_DIR, 'data/EXDARK/metadatas/data_setting1/val_novel_bus.jsonl'), |
| os.path.join(PROJECT_DIR, 'data/EXDARK/metadatas/data_setting1/val_novel_dog.jsonl'), |
| os.path.join(PROJECT_DIR, 'data/EXDARK/metadatas/data_setting1/val_novel_motorbike.jsonl'), |
| os.path.join(PROJECT_DIR, 'data/EXDARK/metadatas/data_setting1/val_novel_table.jsonl'), |
| os.path.join(PROJECT_DIR, 'data/EXDARK/metadatas/data_setting1/test_novel_bus.jsonl'), |
| os.path.join(PROJECT_DIR, 'data/EXDARK/metadatas/data_setting1/test_novel_dog.jsonl'), |
| os.path.join(PROJECT_DIR, 'data/EXDARK/metadatas/data_setting1/test_novel_motorbike.jsonl'), |
| os.path.join(PROJECT_DIR, 'data/EXDARK/metadatas/data_setting1/test_novel_table.jsonl'), |
| ] |
| output_dir = os.path.join(PROJECT_DIR, "data/EXDARK/bboxes") |
| process_jsonl(jsonl_paths, output_dir, image_size=(512, 512)) |