| import os, sys |
| ROOT_DIR = os.path.dirname(os.path.abspath(__file__)) |
| sys.path.append(ROOT_DIR) |
| import json |
|
|
| |
| |
| CORRECT_DATA_PATH = '/home/dn-zhen2/rds/rds-airr-p51-TWhPgQVLKbA/Data/Omini3D' |
|
|
|
|
| def traverse_and_print(data, path=()): |
| for key, value in data.items(): |
| current_path = path + (key,) |
|
|
| if isinstance(key, str) and 'DATASETS' in key: |
| print(f"KEY (str): {key}") |
|
|
| if isinstance(value, str) and 'DATASETS' in value: |
| print(f" VALUE (str): {value}") |
| elif isinstance(value, dict): |
| traverse_and_print(value, current_path) |
|
|
| def traverse_and_check(data, path=()): |
| failed_files = [] |
| for key, value in data.items(): |
| current_path = path + (key,) |
|
|
| if isinstance(key, str) and 'DATASETS_processed' in key: |
| if os.path.isfile(key): |
| print(f'\rCheck pass: {key}', end='') |
| else: |
| print(f'\rCheck fail ! : {key}') |
| failed_files.append(key) |
|
|
| if isinstance(value, str) and 'DATASETS_processed' in value: |
| if os.path.isfile(value): |
| print(f'\rCheck pass: {value}', end='') |
| else: |
| print(f'\rCheck fail ! : {value}') |
| failed_files.append(value) |
| elif isinstance(value, dict): |
| traverse_and_check(value, current_path) |
| |
| if failed_files != []: |
| print(f'\nCheck finished. Failed files: {failed_files}') |
| return False |
| else: |
| print('\nAll files check passed!') |
| return True |
|
|
| def traverse_and_revise(data, path=()): |
| what_need_change = [ |
| '/home/jachin/data/Github/data/data_gen_def', |
| '/home/data/Github/data/data_gen_def', |
| ] |
| for key, value in list(data.items()): |
| current_path = path + (key,) |
|
|
| new_key = key |
| if isinstance(key, str) and 'data_gen_def' in key: |
| for wnc in what_need_change: |
| if wnc in key: |
| new_key = key.replace(wnc, CORRECT_DATA_PATH) |
| |
| |
| data[new_key] = data.pop(key) |
| value = data[new_key] |
| current_path = path + (new_key,) |
|
|
| if isinstance(value, str) and 'data_gen_def' in value: |
| for wnc in what_need_change: |
| if wnc in value: |
| data[new_key] = value.replace(wnc, CORRECT_DATA_PATH) |
|
|
| elif isinstance(value, dict): |
| traverse_and_revise(value, current_path) |
| |
| return data |
|
|
| def traverse_and_rename_label(data, old_label, new_label, task_keys=("segmentation", "registration")): |
| """Rename a label key inside Label_path -> segmentation/registration for every entry. |
| |
| Example: rename "brain" -> "brain_tumour" to fix the BraTS mislabel. |
| """ |
| count = 0 |
| for key, value in data.items(): |
| if not isinstance(value, dict): |
| continue |
| label_path = value.get("Label_path") |
| if isinstance(label_path, dict): |
| for tk in task_keys: |
| task_dict = label_path.get(tk) |
| if isinstance(task_dict, dict) and old_label in task_dict: |
| task_dict[new_label] = task_dict.pop(old_label) |
| count += 1 |
| else: |
| |
| count += traverse_and_rename_label(value, old_label, new_label, task_keys) |
| return count |
|
|
|
|
| mapping_files = { |
| 'MSD': 'nifty_mappings/MSD_mappings.json', |
| 'TotalSegmentor': 'nifty_mappings/TotalSegmentorCT_MRI_mappings.json', |
| 'Kaggle_osic': 'nifty_mappings/Kaggle_osic_mappings.json', |
| 'CancerImageArchive': 'nifty_mappings/CIA_mappings.json', |
| 'MnMs': 'nifty_mappings/MnMs_mappings.json', |
| 'Brats2019': 'nifty_mappings/Brats2019_mappings.json', |
| 'Brats2020': 'nifty_mappings/Brats2020_mappings.json', |
| 'Brats2021': 'nifty_mappings/Brats2021_mappings.json', |
| 'OASIS_1': 'nifty_mappings/OASIS_1_mappings.json', |
| 'OASIS_2': 'nifty_mappings/OASIS_2_mappings.json', |
| 'PSMA-FDG-PET-CT-LESION':'nifty_mappings/PSMA-FDG-PET-CT-LESION_mappings.json', |
| 'PSMA-CT':'nifty_mappings/PSMA-CT-Longitud_mappings.json', |
| 'AbdomenAtlas':'nifty_mappings/AbdomenAtlas_mappings.json', |
| 'AbdomenCT1k':'nifty_mappings/AbdomenCT1k_mappings.json', |
| } |
| for k,v in mapping_files.items(): |
| mapping_files[k] = os.path.join(ROOT_DIR, v) |
|
|
|
|
| if __name__ == "__main__": |
| |
| rename_datasets = ['Brats2019', 'Brats2020', 'Brats2021', 'MSD'] |
| for ds_name in rename_datasets: |
| if ds_name not in mapping_files: |
| continue |
| v = mapping_files[ds_name] |
| with open(v, 'r') as f: |
| mappings_tmp = json.load(f) |
| n = traverse_and_rename_label(mappings_tmp, 'brain', 'brain_tumour') |
| if n > 0: |
| with open(v, 'w') as f: |
| json.dump(mappings_tmp, f, indent=4) |
| print(f'[{ds_name}] Renamed "brain" -> "brain_tumour" in {n} entries, saved to {v}') |
| else: |
| print(f'[{ds_name}] No "brain" labels found (already renamed?)') |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |