[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 = {}
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:

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

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

@ -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)
if osp.isfile(image_path):
return lazy_image(image_path)
return None

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

@ -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 = ''

Loading…
Cancel
Save