Source code for generate_mapping

import os, glob
import json
import argparse


[docs] def public_paths_labeled(root): """Map paths for public datasets as dictionary list""" images_raw = sorted(glob.glob(os.path.join(root, "Public/images/*"))) labels_raw = sorted(glob.glob(os.path.join(root, "Public/labels/*"))) data_dicts = [] for image_path, label_path in zip(images_raw, labels_raw): name1 = image_path.split("/")[-1].split(".")[0] name2 = label_path.split("/")[-1].split("_label")[0] assert name1 == name2 data_item = { "img": image_path.split("MEDIAR/")[-1], "label": label_path.split("MEDIAR/")[-1], } data_dicts.append(data_item) map_dict = {"public": data_dicts} return map_dict
[docs] def official_paths_labeled(root): """Map paths for official labeled datasets as dictionary list""" image_path = os.path.join(root, "Official/Training/images/*") label_path = os.path.join(root, "Official/Training/labels/*") images_raw = sorted(glob.glob(image_path)) labels_raw = sorted(glob.glob(label_path)) data_dicts = [] for image_path, label_path in zip(images_raw, labels_raw): name1 = image_path.split("/")[-1].split(".")[0] name2 = label_path.split("/")[-1].split("_label")[0] assert name1 == name2 data_item = { "img": image_path.split("MEDIAR/")[-1], "label": label_path.split("MEDIAR/")[-1], } data_dicts.append(data_item) map_dict = {"official": data_dicts} return map_dict
[docs] def official_paths_tuning(root): """Map paths for official tuning datasets as dictionary list""" image_path = os.path.join(root, "Official/Tuning/images/*") images_raw = sorted(glob.glob(image_path)) data_dicts = [] for image_path in images_raw: data_item = {"img": image_path.split("MEDIAR/")[-1]} data_dicts.append(data_item) map_dict = {"official": data_dicts} return map_dict
[docs] def add_mapping_to_json(json_file, map_dict): """Save mapped dictionary as a json file""" if not os.path.exists(json_file): with open(json_file, "w") as file: json.dump({}, file) with open(json_file, "r") as file: data = json.load(file) for map_key, map_item in map_dict.items(): if map_key not in data.keys(): data[map_key] = map_item else: print('>>> "{}" already exists in path map keys...'.format(map_key)) with open(json_file, "w") as file: json.dump(data, file)
if __name__ == "__main__": # [!Caution] The paths should be overrided for the local environment!
[docs] parser = argparse.ArgumentParser(description="Mapping files and paths")
parser.add_argument("--root", default=".", type=str) args = parser.parse_args() MAP_DIR = "./train_tools/data_utils/" print("\n----------- Path Mapping for Labeled Data is Started... -----------\n") map_labeled = os.path.join(MAP_DIR, "mapping_labeled.json") map_dict = official_paths_labeled(args.root) add_mapping_to_json(map_labeled, map_dict) print("\n----------- Path Mapping for Tuning Data is Started... -----------\n") map_labeled = os.path.join(MAP_DIR, "mapping_tuning.json") map_dict = official_paths_tuning(args.root) add_mapping_to_json(map_labeled, map_dict) print("\n----------- Path Mapping for Public Data is Started... -----------\n") map_public = os.path.join(MAP_DIR, "mapping_public.json") map_dict = public_paths_labeled(args.root) add_mapping_to_json(map_public, map_dict) print("\n-------------- Path Mapping is Ended !!! ---------------------------\n")