Spaces:
Runtime error
Runtime error
| # Copyright (c) OpenMMLab. All rights reserved. | |
| import argparse | |
| import os.path as osp | |
| import shutil | |
| import tempfile | |
| import zipfile | |
| from mmengine.utils import mkdir_or_exist | |
| def parse_args(): | |
| parser = argparse.ArgumentParser( | |
| description='Convert NYU Depth dataset to mmsegmentation format') | |
| parser.add_argument('raw_data', help='the path of raw data') | |
| parser.add_argument( | |
| '-o', '--out_dir', help='output path', default='./data/nyu') | |
| args = parser.parse_args() | |
| return args | |
| def reorganize(raw_data_dir: str, out_dir: str): | |
| """Reorganize NYU Depth dataset files into the required directory | |
| structure. | |
| Args: | |
| raw_data_dir (str): Path to the raw data directory. | |
| out_dir (str): Output directory for the organized dataset. | |
| """ | |
| def move_data(data_list, dst_prefix, fname_func): | |
| """Move data files from source to destination directory. | |
| Args: | |
| data_list (list): List of data file paths. | |
| dst_prefix (str): Prefix to be added to destination paths. | |
| fname_func (callable): Function to process file names | |
| """ | |
| for data_item in data_list: | |
| data_item = data_item.strip().strip('/') | |
| new_item = fname_func(data_item) | |
| shutil.move( | |
| osp.join(raw_data_dir, data_item), | |
| osp.join(out_dir, dst_prefix, new_item)) | |
| def process_phase(phase): | |
| """Process a dataset phase (e.g., 'train' or 'test').""" | |
| with open(osp.join(raw_data_dir, f'nyu_{phase}.txt')) as f: | |
| data = filter(lambda x: len(x.strip()) > 0, f.readlines()) | |
| data = map(lambda x: x.split()[:2], data) | |
| images, annos = zip(*data) | |
| move_data(images, f'images/{phase}', | |
| lambda x: x.replace('/rgb', '')) | |
| move_data(annos, f'annotations/{phase}', | |
| lambda x: x.replace('/sync_depth', '')) | |
| process_phase('train') | |
| process_phase('test') | |
| def main(): | |
| args = parse_args() | |
| print('Making directories...') | |
| mkdir_or_exist(args.out_dir) | |
| for subdir in [ | |
| 'images/train', 'images/test', 'annotations/train', | |
| 'annotations/test' | |
| ]: | |
| mkdir_or_exist(osp.join(args.out_dir, subdir)) | |
| print('Generating images and annotations...') | |
| if args.raw_data.endswith('.zip'): | |
| with tempfile.TemporaryDirectory() as tmp_dir: | |
| zip_file = zipfile.ZipFile(args.raw_data) | |
| zip_file.extractall(tmp_dir) | |
| reorganize(osp.join(tmp_dir, 'nyu'), args.out_dir) | |
| else: | |
| assert osp.isdir( | |
| args.raw_data | |
| ), 'the argument --raw-data should be either a zip file or directory.' | |
| reorganize(args.raw_data, args.out_dir) | |
| print('Done!') | |
| if __name__ == '__main__': | |
| main() | |