diff --git a/datumaro/datumaro/cli/contexts/project/__init__.py b/datumaro/datumaro/cli/contexts/project/__init__.py index 4b2ede1c..3d3100ca 100644 --- a/datumaro/datumaro/cli/contexts/project/__init__.py +++ b/datumaro/datumaro/cli/contexts/project/__init__.py @@ -158,7 +158,7 @@ def import_command(args): extra_args = {} try: env = Environment() - importer = env.importers.get(args.format) + importer = env.make_importer(args.format) if hasattr(importer, 'from_cmdline'): extra_args = importer.from_cmdline(args.extra_args) except KeyError: diff --git a/datumaro/datumaro/components/project.py b/datumaro/datumaro/components/project.py index e3289033..f9ee8c31 100644 --- a/datumaro/datumaro/components/project.py +++ b/datumaro/datumaro/components/project.py @@ -674,6 +674,7 @@ class ProjectDataset(Dataset): dst_project = Project(Config(self.config)) dst_project.config.remove('project_dir') dst_project.config.remove('sources') + dst_project.config.project_name = osp.basename(save_dir) dst_dataset = dst_project.make_dataset() dst_dataset.define_categories(extractor.categories()) diff --git a/datumaro/datumaro/plugins/coco_format/converter.py b/datumaro/datumaro/plugins/coco_format/converter.py index 39605aa4..e6895e96 100644 --- a/datumaro/datumaro/plugins/coco_format/converter.py +++ b/datumaro/datumaro/plugins/coco_format/converter.py @@ -609,20 +609,25 @@ class CocoConverter(Converter, CliPlugin): class CocoInstancesConverter(CocoConverter): def __init__(self, **kwargs): - super().__init__(CocoTask.instances, **kwargs) + kwargs['tasks'] = CocoTask.instances + super().__init__(**kwargs) class CocoImageInfoConverter(CocoConverter): def __init__(self, **kwargs): - super().__init__(CocoTask.image_info, **kwargs) + kwargs['tasks'] = CocoTask.image_info + super().__init__(**kwargs) class CocoPersonKeypointsConverter(CocoConverter): def __init__(self, **kwargs): - super().__init__(CocoTask.person_keypoints, **kwargs) + kwargs['tasks'] = CocoTask.person_keypoints + super().__init__(**kwargs) class CocoCaptionsConverter(CocoConverter): def __init__(self, **kwargs): - super().__init__(CocoTask.captions, **kwargs) + kwargs['tasks'] = CocoTask.captions + super().__init__(**kwargs) class CocoLabelsConverter(CocoConverter): def __init__(self, **kwargs): - super().__init__(CocoTask.labels, **kwargs) + kwargs['tasks'] = CocoTask.labels + super().__init__(**kwargs) diff --git a/datumaro/datumaro/plugins/cvat_format/extractor.py b/datumaro/datumaro/plugins/cvat_format/extractor.py index 00b9acb6..2ef8d828 100644 --- a/datumaro/datumaro/plugins/cvat_format/extractor.py +++ b/datumaro/datumaro/plugins/cvat_format/extractor.py @@ -24,8 +24,14 @@ class CvatExtractor(SourceExtractor): super().__init__() assert osp.isfile(path) - rootpath = path.rsplit(CvatPath.ANNOTATIONS_DIR, maxsplit=1)[0] - self._path = rootpath + rootpath = '' + if path.endswith(osp.join(CvatPath.ANNOTATIONS_DIR, osp.basename(path))): + rootpath = path.rsplit(CvatPath.ANNOTATIONS_DIR, maxsplit=1)[0] + images_dir = '' + if rootpath and osp.isdir(osp.join(rootpath, CvatPath.IMAGES_DIR)): + images_dir = osp.join(rootpath, CvatPath.IMAGES_DIR) + self._images_dir = images_dir + self._path = path subset = osp.splitext(osp.basename(path))[0] if subset == DEFAULT_SUBSET_NAME: @@ -275,7 +281,6 @@ class CvatExtractor(SourceExtractor): file_name = item_desc.get('name') if not file_name: file_name = item_id - file_name += CvatPath.IMAGE_EXT image = self._find_image(file_name) parsed[item_id] = DatasetItem(id=item_id, subset=self._subset, @@ -283,11 +288,16 @@ class CvatExtractor(SourceExtractor): return parsed def _find_image(self, file_name): - images_dir = osp.join(self._path, CvatPath.IMAGES_DIR) search_paths = [ - osp.join(images_dir, file_name), - osp.join(images_dir, self._subset or DEFAULT_SUBSET_NAME, file_name), + osp.join(osp.dirname(self._path), file_name) ] + if self._images_dir: + search_paths += [ + osp.join(self._images_dir, file_name), + osp.join(self._images_dir, self._subset or DEFAULT_SUBSET_NAME, + file_name), + ] for image_path in search_paths: - if osp.exists(image_path): - return lazy_image(image_path) \ No newline at end of file + if osp.isfile(image_path): + return lazy_image(image_path) + return None \ No newline at end of file diff --git a/datumaro/datumaro/plugins/voc_format/converter.py b/datumaro/datumaro/plugins/voc_format/converter.py index ccc4fe5b..5de9602f 100644 --- a/datumaro/datumaro/plugins/voc_format/converter.py +++ b/datumaro/datumaro/plugins/voc_format/converter.py @@ -548,20 +548,25 @@ class VocConverter(Converter, CliPlugin): class VocClassificationConverter(VocConverter): def __init__(self, **kwargs): - super().__init__(VocTask.classification, **kwargs) + kwargs['tasks'] = VocTask.classification + super().__init__(**kwargs) class VocDetectionConverter(VocConverter): def __init__(self, **kwargs): - super().__init__(VocTask.detection, **kwargs) + kwargs['tasks'] = VocTask.detection + super().__init__(**kwargs) class VocLayoutConverter(VocConverter): def __init__(self, **kwargs): - super().__init__(VocTask.person_layout, **kwargs) + kwargs['tasks'] = VocTask.person_layout + super().__init__(**kwargs) class VocActionConverter(VocConverter): def __init__(self, **kwargs): - super().__init__(VocTask.action_classification, **kwargs) + kwargs['tasks'] = VocTask.action_classification + super().__init__(**kwargs) class VocSegmentationConverter(VocConverter): def __init__(self, **kwargs): - super().__init__(VocTask.segmentation, **kwargs) + kwargs['tasks'] = VocTask.segmentation + super().__init__(**kwargs) diff --git a/datumaro/datumaro/plugins/voc_format/format.py b/datumaro/datumaro/plugins/voc_format/format.py index 1b5994b7..5af79f2d 100644 --- a/datumaro/datumaro/plugins/voc_format/format.py +++ b/datumaro/datumaro/plugins/voc_format/format.py @@ -142,7 +142,7 @@ def parse_label_map(path): assert len(color) == 3, \ "Label '%s' has wrong color, expected 'r,g,b', got '%s'" % \ (name, color) - color = tuple([int(c) for c in color][::-1]) + color = tuple([int(c) for c in color]) else: color = None @@ -164,7 +164,7 @@ def write_label_map(path, label_map): f.write('# label:color_rgb:parts:actions\n') for label_name, label_desc in label_map.items(): if label_desc[0]: - color_rgb = ','.join(str(c) for c in label_desc[0][::-1]) + color_rgb = ','.join(str(c) for c in label_desc[0]) else: color_rgb = ''