[Datumaro] fixes (#1137)

* Fix import command

* Fix project name for spawned projects

* Fix voc and coco converter parameters

* Fix voc colormap color interpretation

* Change order of image search for cvat extractor

* fix CVAT image search paths
main
zhiltsov-max 6 years ago committed by GitHub
parent 7d8fcfa8b5
commit 985fdd0d70
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -158,7 +158,7 @@ def import_command(args):
extra_args = {} extra_args = {}
try: try:
env = Environment() env = Environment()
importer = env.importers.get(args.format) importer = env.make_importer(args.format)
if hasattr(importer, 'from_cmdline'): if hasattr(importer, 'from_cmdline'):
extra_args = importer.from_cmdline(args.extra_args) extra_args = importer.from_cmdline(args.extra_args)
except KeyError: except KeyError:

@ -674,6 +674,7 @@ class ProjectDataset(Dataset):
dst_project = Project(Config(self.config)) dst_project = Project(Config(self.config))
dst_project.config.remove('project_dir') dst_project.config.remove('project_dir')
dst_project.config.remove('sources') dst_project.config.remove('sources')
dst_project.config.project_name = osp.basename(save_dir)
dst_dataset = dst_project.make_dataset() dst_dataset = dst_project.make_dataset()
dst_dataset.define_categories(extractor.categories()) dst_dataset.define_categories(extractor.categories())

@ -609,20 +609,25 @@ class CocoConverter(Converter, CliPlugin):
class CocoInstancesConverter(CocoConverter): class CocoInstancesConverter(CocoConverter):
def __init__(self, **kwargs): def __init__(self, **kwargs):
super().__init__(CocoTask.instances, **kwargs) kwargs['tasks'] = CocoTask.instances
super().__init__(**kwargs)
class CocoImageInfoConverter(CocoConverter): class CocoImageInfoConverter(CocoConverter):
def __init__(self, **kwargs): def __init__(self, **kwargs):
super().__init__(CocoTask.image_info, **kwargs) kwargs['tasks'] = CocoTask.image_info
super().__init__(**kwargs)
class CocoPersonKeypointsConverter(CocoConverter): class CocoPersonKeypointsConverter(CocoConverter):
def __init__(self, **kwargs): def __init__(self, **kwargs):
super().__init__(CocoTask.person_keypoints, **kwargs) kwargs['tasks'] = CocoTask.person_keypoints
super().__init__(**kwargs)
class CocoCaptionsConverter(CocoConverter): class CocoCaptionsConverter(CocoConverter):
def __init__(self, **kwargs): def __init__(self, **kwargs):
super().__init__(CocoTask.captions, **kwargs) kwargs['tasks'] = CocoTask.captions
super().__init__(**kwargs)
class CocoLabelsConverter(CocoConverter): class CocoLabelsConverter(CocoConverter):
def __init__(self, **kwargs): def __init__(self, **kwargs):
super().__init__(CocoTask.labels, **kwargs) kwargs['tasks'] = CocoTask.labels
super().__init__(**kwargs)

@ -24,8 +24,14 @@ class CvatExtractor(SourceExtractor):
super().__init__() super().__init__()
assert osp.isfile(path) assert osp.isfile(path)
rootpath = path.rsplit(CvatPath.ANNOTATIONS_DIR, maxsplit=1)[0] rootpath = ''
self._path = 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] subset = osp.splitext(osp.basename(path))[0]
if subset == DEFAULT_SUBSET_NAME: if subset == DEFAULT_SUBSET_NAME:
@ -275,7 +281,6 @@ class CvatExtractor(SourceExtractor):
file_name = item_desc.get('name') file_name = item_desc.get('name')
if not file_name: if not file_name:
file_name = item_id file_name = item_id
file_name += CvatPath.IMAGE_EXT
image = self._find_image(file_name) image = self._find_image(file_name)
parsed[item_id] = DatasetItem(id=item_id, subset=self._subset, parsed[item_id] = DatasetItem(id=item_id, subset=self._subset,
@ -283,11 +288,16 @@ class CvatExtractor(SourceExtractor):
return parsed return parsed
def _find_image(self, file_name): def _find_image(self, file_name):
images_dir = osp.join(self._path, CvatPath.IMAGES_DIR)
search_paths = [ search_paths = [
osp.join(images_dir, file_name), osp.join(osp.dirname(self._path), file_name)
osp.join(images_dir, self._subset or DEFAULT_SUBSET_NAME, 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: for image_path in search_paths:
if osp.exists(image_path): if osp.isfile(image_path):
return lazy_image(image_path) return lazy_image(image_path)
return None

@ -548,20 +548,25 @@ class VocConverter(Converter, CliPlugin):
class VocClassificationConverter(VocConverter): class VocClassificationConverter(VocConverter):
def __init__(self, **kwargs): def __init__(self, **kwargs):
super().__init__(VocTask.classification, **kwargs) kwargs['tasks'] = VocTask.classification
super().__init__(**kwargs)
class VocDetectionConverter(VocConverter): class VocDetectionConverter(VocConverter):
def __init__(self, **kwargs): def __init__(self, **kwargs):
super().__init__(VocTask.detection, **kwargs) kwargs['tasks'] = VocTask.detection
super().__init__(**kwargs)
class VocLayoutConverter(VocConverter): class VocLayoutConverter(VocConverter):
def __init__(self, **kwargs): def __init__(self, **kwargs):
super().__init__(VocTask.person_layout, **kwargs) kwargs['tasks'] = VocTask.person_layout
super().__init__(**kwargs)
class VocActionConverter(VocConverter): class VocActionConverter(VocConverter):
def __init__(self, **kwargs): def __init__(self, **kwargs):
super().__init__(VocTask.action_classification, **kwargs) kwargs['tasks'] = VocTask.action_classification
super().__init__(**kwargs)
class VocSegmentationConverter(VocConverter): class VocSegmentationConverter(VocConverter):
def __init__(self, **kwargs): def __init__(self, **kwargs):
super().__init__(VocTask.segmentation, **kwargs) kwargs['tasks'] = VocTask.segmentation
super().__init__(**kwargs)

@ -142,7 +142,7 @@ def parse_label_map(path):
assert len(color) == 3, \ assert len(color) == 3, \
"Label '%s' has wrong color, expected 'r,g,b', got '%s'" % \ "Label '%s' has wrong color, expected 'r,g,b', got '%s'" % \
(name, color) (name, color)
color = tuple([int(c) for c in color][::-1]) color = tuple([int(c) for c in color])
else: else:
color = None color = None
@ -164,7 +164,7 @@ def write_label_map(path, label_map):
f.write('# label:color_rgb:parts:actions\n') f.write('# label:color_rgb:parts:actions\n')
for label_name, label_desc in label_map.items(): for label_name, label_desc in label_map.items():
if label_desc[0]: 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: else:
color_rgb = '' color_rgb = ''

Loading…
Cancel
Save