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