|
|
|
|
@ -13,7 +13,7 @@ import datumaro.components.extractor as datumaro
|
|
|
|
|
from cvat.apps.engine.frame_provider import FrameProvider
|
|
|
|
|
from cvat.apps.engine.models import AttributeType, ShapeType
|
|
|
|
|
from datumaro.util import cast
|
|
|
|
|
from datumaro.util.image import Image
|
|
|
|
|
from datumaro.util.image import ByteImage, Image
|
|
|
|
|
|
|
|
|
|
from .annotation import AnnotationManager, TrackManager
|
|
|
|
|
|
|
|
|
|
@ -457,18 +457,37 @@ class CvatTaskDataExtractor(datumaro.SourceExtractor):
|
|
|
|
|
|
|
|
|
|
dm_items = []
|
|
|
|
|
|
|
|
|
|
is_video = task_data.meta['task']['mode'] == 'interpolation'
|
|
|
|
|
ext = ''
|
|
|
|
|
if is_video:
|
|
|
|
|
ext = FrameProvider.VIDEO_FRAME_EXT
|
|
|
|
|
if include_images:
|
|
|
|
|
frame_provider = FrameProvider(task_data.db_task.data)
|
|
|
|
|
if is_video:
|
|
|
|
|
# optimization for videos: use numpy arrays instead of bytes
|
|
|
|
|
# some formats or transforms can require image data
|
|
|
|
|
def _make_image(i, **kwargs):
|
|
|
|
|
loader = lambda _: frame_provider.get_frame(i,
|
|
|
|
|
quality=frame_provider.Quality.ORIGINAL,
|
|
|
|
|
out_type=frame_provider.Type.NUMPY_ARRAY)[0]
|
|
|
|
|
return Image(loader=loader, **kwargs)
|
|
|
|
|
else:
|
|
|
|
|
# for images use encoded data to avoid recoding
|
|
|
|
|
def _make_image(i, **kwargs):
|
|
|
|
|
loader = lambda _: frame_provider.get_frame(i,
|
|
|
|
|
quality=frame_provider.Quality.ORIGINAL,
|
|
|
|
|
out_type=frame_provider.Type.BUFFER)[0].getvalue()
|
|
|
|
|
return ByteImage(data=loader, **kwargs)
|
|
|
|
|
|
|
|
|
|
for frame_data in task_data.group_by_frame(include_empty=True):
|
|
|
|
|
loader = None
|
|
|
|
|
image_args = {
|
|
|
|
|
'path': frame_data.name + ext,
|
|
|
|
|
'size': (frame_data.height, frame_data.width),
|
|
|
|
|
}
|
|
|
|
|
if include_images:
|
|
|
|
|
loader = lambda p, i=frame_data.idx: frame_provider.get_frame(i,
|
|
|
|
|
quality=frame_provider.Quality.ORIGINAL,
|
|
|
|
|
out_type=frame_provider.Type.NUMPY_ARRAY)[0]
|
|
|
|
|
dm_image = Image(path=frame_data.name, loader=loader,
|
|
|
|
|
size=(frame_data.height, frame_data.width)
|
|
|
|
|
)
|
|
|
|
|
dm_image = _make_image(frame_data.idx, **image_args)
|
|
|
|
|
else:
|
|
|
|
|
dm_image = Image(**image_args)
|
|
|
|
|
dm_anno = self._read_cvat_anno(frame_data, task_data)
|
|
|
|
|
dm_item = datumaro.DatasetItem(id=osp.splitext(frame_data.name)[0],
|
|
|
|
|
annotations=dm_anno, image=dm_image,
|
|
|
|
|
|