| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- # 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()
|