[Datumaro] Fix image merging (#1301)

* Always merge images for own dataset

* Fix codacy
main
zhiltsov-max 6 years ago committed by GitHub
parent 4f20f46cf4
commit 03817f050b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -167,6 +167,7 @@ def import_command(args):
env = Environment()
log.info("Importing project from '%s'" % args.source)
extra_args = {}
if not args.format:
if args.extra_args:
raise CliException("Extra args can not be used without format")
@ -210,7 +211,7 @@ def import_command(args):
log.info("Importing project as '%s'" % args.format)
source = osp.abspath(args.source)
project = importer(source, **locals().get('extra_args', {}))
project = importer(source, **extra_args)
project.config.project_name = project_name
project.config.project_dir = project_dir

@ -411,6 +411,13 @@ class Dataset(Extractor):
@classmethod
def _merge_items(cls, existing_item, current_item, path=None):
return existing_item.wrap(path=path,
image=cls._merge_images(existing_item, current_item),
annotations=cls._merge_anno(
existing_item.annotations, current_item.annotations))
@staticmethod
def _merge_images(existing_item, current_item):
image = None
if existing_item.has_image and current_item.has_image:
if existing_item.image.has_data:
@ -433,9 +440,7 @@ class Dataset(Extractor):
else:
image = current_item.image
return existing_item.wrap(path=path,
image=image, annotations=cls._merge_anno(
existing_item.annotations, current_item.annotations))
return image
@staticmethod
def _merge_anno(a, b):
@ -527,15 +532,11 @@ class ProjectDataset(Dataset):
if own_source is not None:
log.debug("Loading own dataset...")
for item in own_source:
if not item.has_image:
existing_item = subsets[item.subset].items.get(item.id)
if existing_item is not None:
image = None
if existing_item.has_image:
# TODO: think of image comparison
image = self._lazy_image(existing_item)
item = item.wrap(path=None,
annotations=item.annotations, image=image)
existing_item = subsets[item.subset].items.get(item.id)
if existing_item is not None:
item = item.wrap(path=None,
image=self._merge_images(existing_item, item),
annotations=item.annotations)
subsets[item.subset].items[item.id] = item

Loading…
Cancel
Save