Spaces:
Running
Running
| import json | |
| import os | |
| import cv2 | |
| from tqdm import tqdm | |
| SUBSET_PATH = "data/relationship_dataset/subset.json" | |
| IMAGE_MAP_PATH = "data/relationship_dataset/image_paths.json" | |
| OUTPUT_DIR = "data/relationship_dataset/images" | |
| LABELS_PATH = "data/relationship_dataset/labels.json" | |
| os.makedirs(OUTPUT_DIR, exist_ok=True) | |
| with open(SUBSET_PATH) as f: | |
| subset = json.load(f) | |
| with open(IMAGE_MAP_PATH) as f: | |
| image_map = json.load(f) | |
| labels = [] | |
| idx = 0 | |
| for item in tqdm(subset): | |
| image_id = str(item["image_id"]) | |
| if image_id not in image_map: | |
| continue | |
| img_path = image_map[image_id] | |
| img = cv2.imread(img_path) | |
| if img is None: | |
| continue | |
| h_img, w_img, _ = img.shape | |
| s = item["subject"] | |
| o = item["object"] | |
| x1 = min(s["x"], o["x"]) | |
| y1 = min(s["y"], o["y"]) | |
| x2 = max(s["x"] + s["w"], o["x"] + o["w"]) | |
| y2 = max(s["y"] + s["h"], o["y"] + o["h"]) | |
| x1 = max(0, x1) | |
| y1 = max(0, y1) | |
| x2 = min(w_img, x2) | |
| y2 = min(h_img, y2) | |
| crop = img[y1:y2, x1:x2] | |
| if crop.size == 0: | |
| continue | |
| crop = cv2.resize(crop, (128, 128)) | |
| filename = f"{idx}.jpg" | |
| save_path = os.path.join(OUTPUT_DIR, filename) | |
| cv2.imwrite(save_path, crop) | |
| labels.append({ | |
| "image": filename, | |
| "predicate": item["predicate"] | |
| }) | |
| idx += 1 | |
| with open(LABELS_PATH, "w") as f: | |
| json.dump(labels, f) | |
| print("Total processed:", idx) |