You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
3.4 KiB
Python
98 lines
3.4 KiB
Python
|
|
# Copyright (C) 2020 Intel Corporation
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
from datumaro.components.project import Environment
|
|
from cvat.apps.engine.models import DimensionType
|
|
|
|
|
|
dm_env = Environment()
|
|
|
|
class _Format:
|
|
NAME = ''
|
|
EXT = ''
|
|
VERSION = ''
|
|
DISPLAY_NAME = '{NAME} {VERSION}'
|
|
ENABLED = True
|
|
|
|
class Exporter(_Format):
|
|
def __call__(self, dst_file, task_data, **options):
|
|
raise NotImplementedError()
|
|
|
|
class Importer(_Format):
|
|
def __call__(self, src_file, task_data, **options):
|
|
raise NotImplementedError()
|
|
|
|
def _wrap_format(f_or_cls, klass, name, version, ext, display_name, enabled, dimension=DimensionType.DIM_2D):
|
|
import inspect
|
|
assert inspect.isclass(f_or_cls) or inspect.isfunction(f_or_cls)
|
|
if inspect.isclass(f_or_cls):
|
|
assert hasattr(f_or_cls, '__call__')
|
|
target = f_or_cls
|
|
elif inspect.isfunction(f_or_cls):
|
|
class wrapper(klass):
|
|
# pylint: disable=arguments-differ
|
|
def __call__(self, *args, **kwargs):
|
|
f_or_cls(*args, **kwargs)
|
|
|
|
wrapper.__name__ = f_or_cls.__name__
|
|
wrapper.__module__ = f_or_cls.__module__
|
|
target = wrapper
|
|
|
|
target.NAME = name or klass.NAME or f_or_cls.__name__
|
|
target.VERSION = version or klass.VERSION
|
|
target.EXT = ext or klass.EXT
|
|
target.DISPLAY_NAME = (display_name or klass.DISPLAY_NAME).format(
|
|
NAME=name, VERSION=version, EXT=ext)
|
|
assert all([target.NAME, target.VERSION, target.EXT, target.DISPLAY_NAME])
|
|
target.DIMENSION = dimension
|
|
target.ENABLED = enabled
|
|
|
|
return target
|
|
|
|
EXPORT_FORMATS = {}
|
|
def exporter(name, version, ext, display_name=None, enabled=True, dimension=DimensionType.DIM_2D):
|
|
assert name not in EXPORT_FORMATS, "Export format '%s' already registered" % name
|
|
def wrap_with_params(f_or_cls):
|
|
t = _wrap_format(f_or_cls, Exporter,
|
|
name=name, ext=ext, version=version, display_name=display_name,
|
|
enabled=enabled, dimension=dimension)
|
|
key = t.DISPLAY_NAME
|
|
assert key not in EXPORT_FORMATS, "Export format '%s' already registered" % name
|
|
EXPORT_FORMATS[key] = t
|
|
return t
|
|
return wrap_with_params
|
|
|
|
IMPORT_FORMATS = {}
|
|
def importer(name, version, ext, display_name=None, enabled=True, dimension=DimensionType.DIM_2D):
|
|
def wrap_with_params(f_or_cls):
|
|
t = _wrap_format(f_or_cls, Importer,
|
|
name=name, ext=ext, version=version, display_name=display_name,
|
|
enabled=enabled, dimension=dimension)
|
|
key = t.DISPLAY_NAME
|
|
assert key not in IMPORT_FORMATS, "Import format '%s' already registered" % name
|
|
IMPORT_FORMATS[key] = t
|
|
return t
|
|
return wrap_with_params
|
|
|
|
def make_importer(name):
|
|
return IMPORT_FORMATS[name]()
|
|
|
|
def make_exporter(name):
|
|
return EXPORT_FORMATS[name]()
|
|
|
|
# pylint: disable=unused-import
|
|
import cvat.apps.dataset_manager.formats.coco
|
|
import cvat.apps.dataset_manager.formats.cvat
|
|
import cvat.apps.dataset_manager.formats.datumaro
|
|
import cvat.apps.dataset_manager.formats.labelme
|
|
import cvat.apps.dataset_manager.formats.mask
|
|
import cvat.apps.dataset_manager.formats.mot
|
|
import cvat.apps.dataset_manager.formats.mots
|
|
import cvat.apps.dataset_manager.formats.pascal_voc
|
|
import cvat.apps.dataset_manager.formats.tfrecord
|
|
import cvat.apps.dataset_manager.formats.yolo
|
|
import cvat.apps.dataset_manager.formats.imagenet
|
|
import cvat.apps.dataset_manager.formats.camvid
|