Spaces:
Sleeping
Sleeping
import argparse | |
import json | |
import os | |
from PIL import Image, ImageDraw, ImageFont | |
from tqdm import tqdm | |
FOOT = ImageFont.truetype('/usr/share/fonts/dejavu/DejaVuSans-Bold.ttf', 50) | |
def custom_image(img_paths, save_path, image_size=448): | |
captions = ['CAM_FRONT_LEFT', 'CAM_FRONT', 'CAM_FRONT_RIGHT', 'CAM_BACK_LEFT', 'CAM_BACK', 'CAM_BACK_RIGHT'] | |
width = image_size * 2 | |
height = image_size | |
# count = 0 | |
all_images = {} | |
for image_id, image_files in tqdm(img_paths.items()): | |
all_images[image_id] = dict() | |
all_images[image_id]['images_path'] = image_files | |
all_images[image_id]['images_size'] = {k: (0, 0) for k in image_files.keys()} | |
imgs = {} | |
for caption, image_file in image_files.items(): | |
image_path = os.path.join(args.data_root, image_file.replace('../nuscenes/samples/', '/nuscenes/samples/')) | |
img = Image.open(image_path).convert('RGB') | |
old_wide, old_height = img.size | |
all_images[image_id]['images_size'][caption] = (old_wide, old_height) | |
img = img.resize((width, height)) | |
draw = ImageDraw.Draw(img) | |
text = caption | |
draw.text((0, 0), text, fill=(255, 0, 255), font=FOOT) | |
imgs[caption] = img | |
result_width = width * 3 | |
result_height = height * 2 | |
result_img = Image.new('RGB', (result_width, result_height)) | |
imgs = [imgs[caption] for caption in captions] | |
for i in range(len(imgs)): | |
row = i // 3 | |
col = i % 3 | |
left = col * width | |
top = row * height | |
right = left + width | |
bottom = top + height | |
result_img.paste(imgs[i], (left, top)) | |
result_path = os.path.join(save_path, image_id + '.jpg') | |
result_img.save(result_path) | |
def get_images(ann_file): | |
with open(ann_file, 'r') as f: # , \ | |
train_file = json.load(f) | |
images = {} | |
for scene_id in train_file.keys(): | |
scene_data = train_file[scene_id]['key_frames'] | |
for frame_id in scene_data.keys(): | |
image_id = scene_id + '_' + frame_id | |
if image_id not in images: | |
images[image_id] = scene_data[frame_id]['image_paths'] | |
else: | |
print(image_id) | |
return images | |
if __name__ == '__main__': | |
parser = argparse.ArgumentParser() | |
parser.add_argument('--data-root', type=str, default='InternVL-Domain-Adaptation-Data/images/drivelm') | |
parser.add_argument('--ann-file', type=str, default='path/to/v1_1_val_nus_q_only.json') | |
args = parser.parse_args() | |
images = get_images(args.ann_file) | |
save_path = os.path.join(args.data_root, 'stitch') | |
os.makedirs(save_path, exist_ok=True) | |
custom_image(img_paths=images, save_path=save_path) | |