dsp-repro-bundle / scripts /visualization /blank_bboxes-exdark.py
junwatu's picture
Upload folder using huggingface_hub
c881b77 verified
Raw
History Blame Contribute Delete
2.85 kB
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') # Set this manually if the environment variable is unavailable
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))