From 39c03becd6d76955fc24818cfac67fe7a2dd630a Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Wed, 24 Aug 2022 15:54:18 +0300 Subject: [PATCH 01/34] Added changes to CvatExtractor --- cvat/apps/dataset_manager/formats/cvat.py | 96 ++++++++++++++++++++--- cvat/requirements/base.txt | 2 +- 2 files changed, 86 insertions(+), 12 deletions(-) diff --git a/cvat/apps/dataset_manager/formats/cvat.py b/cvat/apps/dataset_manager/formats/cvat.py index 97bd98a31325..4161a3b41bfb 100644 --- a/cvat/apps/dataset_manager/formats/cvat.py +++ b/cvat/apps/dataset_manager/formats/cvat.py @@ -119,8 +119,10 @@ def _parse(cls, path): track = None shape = None + shape_element = None tag = None attributes = None + element_attributes = None image = None subset = None for ev, el in context: @@ -144,16 +146,25 @@ def _parse(cls, path): } subset = el.attrib.get('subset') elif el.tag in cls._SUPPORTED_SHAPES and (track or image): - attributes = {} - shape = { - 'type': None, - 'attributes': attributes, - } - if track: - shape.update(track) - shape['track_id'] = int(track['id']) - if image: - shape.update(image) + if shape and shape['type'] == 'skeleton': + attributes = {} + shape_element = { + 'type': None, + 'attributes': element_attributes, + } + shape_element.update(image) + else: + attributes = {} + shape = { + 'type': None, + 'attributes': attributes, + } + if track: + shape.update(track) + shape['track_id'] = int(track['id']) + if image: + shape['elements'] = [] + shape.update(image) elif el.tag == 'tag' and image: attributes = {} tag = { @@ -164,7 +175,19 @@ def _parse(cls, path): } subset = el.attrib.get('subset') elif ev == 'end': - if el.tag == 'attribute' and attributes is not None: + if el.tag == 'attribute' and element_attributes is not None and shape_element is not None: + attr_value = el.text or '' + attr_type = attribute_types.get(el.attrib['name']) + if el.text in ['true', 'false']: + attr_value = attr_value == 'true' + elif attr_type is not None and attr_type != 'text': + try: + attr_value = float(attr_value) + except ValueError: + pass + element_attributes[el.attrib['name']] = attr_value + + if el.tag == 'attribute' and attributes is not None and shape_element is None: attr_value = el.text or '' attr_type = attribute_types.get(el.attrib['name']) if el.text in ['true', 'false']: @@ -175,6 +198,57 @@ def _parse(cls, path): except ValueError: pass attributes[el.attrib['name']] = attr_value + + elif el.tag in cls._SUPPORTED_SHAPES and shape["type"] == "skeleton" and el.tag != "skeleton": + shape_element['label'] = el.attrib.get('label') + shape_element['group'] = int(el.attrib.get('group_id', 0)) + + shape_element['type'] = el.tag + shape_element['occluded'] = (el.attrib.get('occluded') == '1') + shape_element['z_order'] = int(el.attrib.get('z_order', 0)) + + if el.tag == 'box': + shape_element['points'] = list(map(float, [ + el.attrib['xtl'], el.attrib['ytl'], + el.attrib['xbr'], el.attrib['ybr'], + ])) + else: + shape_element['points'] = [] + for pair in el.attrib['points'].split(';'): + shape_element['points'].extend(map(float, pair.split(','))) + + shape['elements'].append(shape_element) + shape_element = None + + elif el.tag in cls._SUPPORTED_SHAPES and : + if track is not None: + shape['frame'] = el.attrib['frame'] + shape['outside'] = (el.attrib.get('outside') == '1') + shape['keyframe'] = (el.attrib.get('keyframe') == '1') + if image is not None: + shape['label'] = el.attrib.get('label') + shape['group'] = int(el.attrib.get('group_id', 0)) + + shape['type'] = el.tag + shape['occluded'] = (el.attrib.get('occluded') == '1') + shape['z_order'] = int(el.attrib.get('z_order', 0)) + + if el.tag == 'box': + shape['points'] = list(map(float, [ + el.attrib['xtl'], el.attrib['ytl'], + el.attrib['xbr'], el.attrib['ybr'], + ])) + else: + shape['points'] = [] + for pair in el.attrib['points'].split(';'): + shape['points'].extend(map(float, pair.split(','))) + + frame_desc = items.get((subset, shape['frame']), {'annotations': []}) + frame_desc['annotations'].append( + cls._parse_shape_ann(shape, categories)) + items[(subset, shape['frame'])] = frame_desc + shape = None + elif el.tag in cls._SUPPORTED_SHAPES: if track is not None: shape['frame'] = el.attrib['frame'] diff --git a/cvat/requirements/base.txt b/cvat/requirements/base.txt index 54178cc96e07..f97055dae7a7 100644 --- a/cvat/requirements/base.txt +++ b/cvat/requirements/base.txt @@ -47,7 +47,7 @@ azure-storage-blob==12.13.0 google-cloud-storage==1.42.0 # --no-binary=datumaro: workaround for pip to install # opencv-headless instead of regular opencv, to actually run setup script -datumaro==0.2.0 --no-binary=datumaro +git+https://github.com/cvat-ai/datumaro@ay/skeletons urllib3>=1.26.5 # not directly required, pinned by Snyk to avoid a vulnerability natsort==8.0.0 mistune>=2.0.1 # not directly required, pinned by Snyk to avoid a vulnerability From 4355f43e053883fae20eda8fc4e80fef2946db35 Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Fri, 26 Aug 2022 16:19:06 +0300 Subject: [PATCH 02/34] Added Skeleton annotation type --- cvat/apps/dataset_manager/bindings.py | 89 +++++++++++++++++--- cvat/apps/dataset_manager/formats/cvat.py | 98 ++++++++++++----------- 2 files changed, 129 insertions(+), 58 deletions(-) diff --git a/cvat/apps/dataset_manager/bindings.py b/cvat/apps/dataset_manager/bindings.py index fcefc12f2b53..a244ef7c6e3c 100644 --- a/cvat/apps/dataset_manager/bindings.py +++ b/cvat/apps/dataset_manager/bindings.py @@ -5,6 +5,7 @@ import sys import rq +import re import os.path as osp from attr import attrib, attrs from collections import namedtuple @@ -1056,14 +1057,24 @@ def _load_categories(labels: list): datum_annotation.Categories] = {} label_categories = datum_annotation.LabelCategories(attributes=['occluded']) + point_categories = datum_annotation.PointsCategories() for _, label in labels: - label_categories.add(label['name']) + label_id = label_categories.add(label['name']) for _, attr in label['attributes']: label_categories.attributes.add(attr['name']) + if label['type'] == str(LabelType.SKELETON): + labels_from = list(map(int, re.findall(r'data-node-from="(\d+)"', label['svg']))) + labels_to = list(map(int, re.findall(r'data-node-to="(\d+)"', label['svg']))) + sublabels = re.findall(r'data-label-name="(\w+)"', label['svg']) + joints = zip(labels_from, labels_to) + + point_categories.add(label_id, sublabels, joints) + categories[datum_annotation.AnnotationType.label] = label_categories + categories[datum_annotation.AnnotationType.points] = point_categories return categories @@ -1481,7 +1492,8 @@ def import_dm_annotations(dm_dataset: Dataset, instance_data: Union[TaskData, Pr datum_annotation.AnnotationType.polygon: ShapeType.POLYGON, datum_annotation.AnnotationType.polyline: ShapeType.POLYLINE, datum_annotation.AnnotationType.points: ShapeType.POINTS, - datum_annotation.AnnotationType.cuboid_3d: ShapeType.CUBOID + datum_annotation.AnnotationType.cuboid_3d: ShapeType.CUBOID, + datum_annotation.AnnotationType.skeleton: ShapeType.SKELETON } label_cat = dm_dataset.categories()[datum_annotation.AnnotationType.label] @@ -1541,39 +1553,94 @@ def import_dm_annotations(dm_dataset: Dataset, instance_data: Union[TaskData, Pr if ann.attributes.get('source', '').lower() in {'auto', 'manual'} else 'manual' if track_id is None or dm_dataset.format != 'cvat' : + elements = [] + if ann.type == datum_annotation.AnnotationType.skeleton: + for element in ann.elements: + element_attributes = [ + instance_data.Attribute(name=n, value=str(v)) + for n, v in element.attributes.items() + ] + element_occluded = cast(element.attributes.pop('occluded', None), bool) is True + element_outside = cast(element.attributes.pop('outside', None), bool) is True + element_source = element.attributes.pop('source').lower() \ + if element.attributes.get('source', '').lower() in {'auto', 'manual'} else 'manual' + elements.append(instance_data.LabeledShape( + type=shapes[element.type], + frame=frame_number, + points=element.points, + label=label_cat.items[element.label].name, + occluded=element_occluded, + z_order=ann.z_order, + group=group_map.get(ann.group, 0), + source=element_source, + attributes=element_attributes, + elements=[], + outside=element_outside, + )) instance_data.add_shape(instance_data.LabeledShape( type=shapes[ann.type], frame=frame_number, - points=ann.points, + points=ann.points if ann.type is not datum_annotation.AnnotationType.skeleton else [], label=label_cat.items[ann.label].name, occluded=occluded, z_order=ann.z_order, group=group_map.get(ann.group, 0), source=source, attributes=attributes, + elements=elements, )) continue if keyframe or outside: + if track_id not in tracks: + tracks[track_id] = instance_data.Track( + label=label_cat.items[ann.label].name, + group=group_map.get(ann.group, 0), + source=source, + shapes=[], + elements=[], + ) + track = instance_data.TrackedShape( type=shapes[ann.type], frame=frame_number, occluded=occluded, outside=outside, keyframe=keyframe, - points=ann.points, + points=ann.points if ann.type is not datum_annotation.AnnotationType.skeleton else [], z_order=ann.z_order, source=source, attributes=attributes, ) - if track_id not in tracks: - tracks[track_id] = instance_data.Track( - label=label_cat.items[ann.label].name, - group=group_map.get(ann.group, 0), - source=source, - shapes=[], - ) + if ann.type == datum_annotation.AnnotationType.skeleton: + for element in ann.elements: + if element.label not in tracks[track_id].elements: + tracks[track_id].elements[element.label] = instance_data.Track( + label=label_cat.items[element.label].name, + group=0, + source=source, + shapes=[], + ) + element_attributes = [ + instance_data.Attribute(name=n, value=str(v)) + for n, v in element.attributes.items() + ] + element_occluded = cast(element.attributes.pop('occluded', None), bool) is True + element_outside = cast(element.attributes.pop('outside', None), bool) is True + element_source = element.attributes.pop('source').lower() \ + if element.attributes.get('source', '').lower() in {'auto', 'manual'} else 'manual' + tracks[track_id].elements[element.label].shapes.append(instance_data.TrackedShape( + type=shapes[ann.type], + frame=frame_number, + occluded=element_occluded, + outside=element_outside, + keyframe=keyframe, + points=element.points, + z_order=element.z_order, + source=element_source, + attributes=element_attributes, + )) tracks[track_id].shapes.append(track) diff --git a/cvat/apps/dataset_manager/formats/cvat.py b/cvat/apps/dataset_manager/formats/cvat.py index 4161a3b41bfb..cd84363062ce 100644 --- a/cvat/apps/dataset_manager/formats/cvat.py +++ b/cvat/apps/dataset_manager/formats/cvat.py @@ -13,7 +13,7 @@ from datumaro.components.annotation import (AnnotationType, Bbox, Label, LabelCategories, Points, Polygon, - PolyLine) + PolyLine, Skeleton) from datumaro.components.dataset import Dataset, DatasetItem from datumaro.components.extractor import (DEFAULT_SUBSET_NAME, Extractor, Importer) @@ -118,6 +118,8 @@ def _parse(cls, path): items = OrderedDict() track = None + track_element = None + track_shapes = None shape = None shape_element = None tag = None @@ -128,15 +130,22 @@ def _parse(cls, path): for ev, el in context: if ev == 'start': if el.tag == 'track': - frame_size = tasks_info[int(el.attrib.get('task_id'))]['frame_size'] if el.attrib.get('task_id') else tuple(tasks_info.values())[0]['frame_size'] - track = { - 'id': el.attrib['id'], - 'label': el.attrib.get('label'), - 'group': int(el.attrib.get('group_id', 0)), - 'height': frame_size[0], - 'width': frame_size[1], - } - subset = el.attrib.get('subset') + if track: + track_element = { + 'id': el.attrib['id'], + 'label': el.attrib.get('label'), + } + else: + frame_size = tasks_info[int(el.attrib.get('task_id'))]['frame_size'] if el.attrib.get('task_id') else tuple(tasks_info.values())[0]['frame_size'] + track = { + 'id': el.attrib['id'], + 'label': el.attrib.get('label'), + 'group': int(el.attrib.get('group_id', 0)), + 'height': frame_size[0], + 'width': frame_size[1], + } + subset = el.attrib.get('subset') + track_shapes = {} elif el.tag == 'image': image = { 'name': el.attrib.get('name'), @@ -159,11 +168,14 @@ def _parse(cls, path): 'type': None, 'attributes': attributes, } - if track: + shape['elements'] = [] + if track_element: + shape.update(track_element) + shape['track_id'] = int(track_element['id']) + elif track: shape.update(track) shape['track_id'] = int(track['id']) if image: - shape['elements'] = [] shape.update(image) elif el.tag == 'tag' and image: attributes = {} @@ -220,35 +232,6 @@ def _parse(cls, path): shape['elements'].append(shape_element) shape_element = None - elif el.tag in cls._SUPPORTED_SHAPES and : - if track is not None: - shape['frame'] = el.attrib['frame'] - shape['outside'] = (el.attrib.get('outside') == '1') - shape['keyframe'] = (el.attrib.get('keyframe') == '1') - if image is not None: - shape['label'] = el.attrib.get('label') - shape['group'] = int(el.attrib.get('group_id', 0)) - - shape['type'] = el.tag - shape['occluded'] = (el.attrib.get('occluded') == '1') - shape['z_order'] = int(el.attrib.get('z_order', 0)) - - if el.tag == 'box': - shape['points'] = list(map(float, [ - el.attrib['xtl'], el.attrib['ytl'], - el.attrib['xbr'], el.attrib['ybr'], - ])) - else: - shape['points'] = [] - for pair in el.attrib['points'].split(';'): - shape['points'].extend(map(float, pair.split(','))) - - frame_desc = items.get((subset, shape['frame']), {'annotations': []}) - frame_desc['annotations'].append( - cls._parse_shape_ann(shape, categories)) - items[(subset, shape['frame'])] = frame_desc - shape = None - elif el.tag in cls._SUPPORTED_SHAPES: if track is not None: shape['frame'] = el.attrib['frame'] @@ -271,11 +254,16 @@ def _parse(cls, path): shape['points'] = [] for pair in el.attrib['points'].split(';'): shape['points'].extend(map(float, pair.split(','))) + if track_element: + track_shapes[shape['frame']]['elements'].append(shape) + elif track: + track_shapes[shape['frame']] = shape + else: + frame_desc = items.get((subset, shape['frame']), {'annotations': []}) + frame_desc['annotations'].append( + cls._parse_shape_ann(shape, categories)) + items[(subset, shape['frame'])] = frame_desc - frame_desc = items.get((subset, shape['frame']), {'annotations': []}) - frame_desc['annotations'].append( - cls._parse_shape_ann(shape, categories)) - items[(subset, shape['frame'])] = frame_desc shape = None elif el.tag == 'tag': @@ -285,7 +273,15 @@ def _parse(cls, path): items[(subset, tag['frame'])] = frame_desc tag = None elif el.tag == 'track': - track = None + if track_element: + track_element = None + else: + for shape in track_shapes.values(): + frame_desc = items.get((subset, shape['frame']), {'annotations': []}) + frame_desc['annotations'].append( + cls._parse_shape_ann(shape, categories)) + items[(subset, shape['frame'])] = frame_desc + track = None elif el.tag == 'image': frame_desc = items.get((subset, image['frame']), {'annotations': []}) frame_desc.update({ @@ -459,6 +455,14 @@ def _parse_shape_ann(cls, ann, categories): return Bbox(x, y, w, h, label=label_id, z_order=z_order, id=ann_id, attributes=attributes, group=group) + elif ann_type == 'skeleton': + elements = [] + for element in ann.get('elements', []): + elements.append(cls._parse_shape_ann(element, categories)) + + return Skeleton(elements, label=label_id, z_order=z_order, + id=ann_id, attributes=attributes, group=group) + else: raise NotImplementedError("Unknown annotation type '%s'" % ann_type) @@ -483,7 +487,7 @@ def _load_items(self, parsed, image_items): di.subset = subset or DEFAULT_SUBSET_NAME di.annotations = item_desc.get('annotations') di.attributes = {'frame': int(frame_id)} - di.image = image if isinstance(image, Image) else di.image + di.media = image if isinstance(image, Image) else di.media image_items[(subset, osp.splitext(name)[0])] = di return image_items From 8496436d3a9bc46c4801feba2523d64621f03132 Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Tue, 30 Aug 2022 16:20:57 +0300 Subject: [PATCH 03/34] Some fixes --- cvat/apps/dataset_manager/bindings.py | 28 +++++----- cvat/apps/engine/views.py | 75 +++++++++++++-------------- 2 files changed, 50 insertions(+), 53 deletions(-) diff --git a/cvat/apps/dataset_manager/bindings.py b/cvat/apps/dataset_manager/bindings.py index a244ef7c6e3c..ce2aa6e0cefb 100644 --- a/cvat/apps/dataset_manager/bindings.py +++ b/cvat/apps/dataset_manager/bindings.py @@ -1593,13 +1593,13 @@ def import_dm_annotations(dm_dataset: Dataset, instance_data: Union[TaskData, Pr if keyframe or outside: if track_id not in tracks: - tracks[track_id] = instance_data.Track( - label=label_cat.items[ann.label].name, - group=group_map.get(ann.group, 0), - source=source, - shapes=[], - elements=[], - ) + tracks[track_id] = { + 'label': label_cat.items[ann.label].name, + 'group': group_map.get(ann.group, 0), + 'source': source, + 'shapes': [], + 'elements':{}, + } track = instance_data.TrackedShape( type=shapes[ann.type], @@ -1612,11 +1612,12 @@ def import_dm_annotations(dm_dataset: Dataset, instance_data: Union[TaskData, Pr source=source, attributes=attributes, ) + tracks[track_id]['shapes'].append(track) if ann.type == datum_annotation.AnnotationType.skeleton: for element in ann.elements: - if element.label not in tracks[track_id].elements: - tracks[track_id].elements[element.label] = instance_data.Track( + if element.label not in tracks[track_id]['elements']: + tracks[track_id]['elements'][element.label] = instance_data.Track( label=label_cat.items[element.label].name, group=0, source=source, @@ -1630,8 +1631,8 @@ def import_dm_annotations(dm_dataset: Dataset, instance_data: Union[TaskData, Pr element_outside = cast(element.attributes.pop('outside', None), bool) is True element_source = element.attributes.pop('source').lower() \ if element.attributes.get('source', '').lower() in {'auto', 'manual'} else 'manual' - tracks[track_id].elements[element.label].shapes.append(instance_data.TrackedShape( - type=shapes[ann.type], + tracks[track_id]['elements'][element.label].shapes.append(instance_data.TrackedShape( + type=shapes[element.type], frame=frame_number, occluded=element_occluded, outside=element_outside, @@ -1642,8 +1643,6 @@ def import_dm_annotations(dm_dataset: Dataset, instance_data: Union[TaskData, Pr attributes=element_attributes, )) - tracks[track_id].shapes.append(track) - elif ann.type == datum_annotation.AnnotationType.label: instance_data.add_tag(instance_data.Tag( frame=frame_number, @@ -1657,7 +1656,8 @@ def import_dm_annotations(dm_dataset: Dataset, instance_data: Union[TaskData, Pr "#{} ({}): {}".format(item.id, idx, ann.type.name, e)) from e for track in tracks.values(): - instance_data.add_track(track) + track['elements'] = list(track['elements'].values()) + instance_data.add_track(instance_data.Track(**track)) def import_labels_to_project(project_annotation, dataset: Dataset): diff --git a/cvat/apps/engine/views.py b/cvat/apps/engine/views.py index 2fa21a349b57..db61956a022a 100644 --- a/cvat/apps/engine/views.py +++ b/cvat/apps/engine/views.py @@ -2255,46 +2255,43 @@ def _import_project_dataset(request, rq_id, rq_func, pk, format_name, filename=N queue = django_rq.get_queue("default") rq_job = queue.fetch_job(rq_id) - if not rq_job: - fd = None - location = location_conf.get('location') if location_conf else None - if not filename and location != Location.CLOUD_STORAGE: - serializer = DatasetFileSerializer(data=request.data) - if serializer.is_valid(raise_exception=True): - dataset_file = serializer.validated_data['dataset_file'] - fd, filename = mkstemp(prefix='cvat_{}'.format(pk), dir=settings.TMP_FILES_ROOT) - with open(filename, 'wb+') as f: - for chunk in dataset_file.chunks(): - f.write(chunk) - elif location == Location.CLOUD_STORAGE: - assert filename - - # download project file from cloud storage - try: - storage_id = location_conf['storage_id'] - except KeyError: - raise serializers.ValidationError( - 'Cloud storage location was selected for destination' - ' but cloud storage id was not specified') - db_storage = get_object_or_404(CloudStorageModel, pk=storage_id) - storage = db_storage_to_storage_instance(db_storage) - - data = _import_from_cloud_storage(storage, filename) - - fd, filename = mkstemp(prefix='cvat_', dir=settings.TMP_FILES_ROOT) + fd = None + location = location_conf.get('location') if location_conf else None + if not filename and location != Location.CLOUD_STORAGE: + serializer = DatasetFileSerializer(data=request.data) + if serializer.is_valid(raise_exception=True): + dataset_file = serializer.validated_data['dataset_file'] + fd, filename = mkstemp(prefix='cvat_{}'.format(pk), dir=settings.TMP_FILES_ROOT) with open(filename, 'wb+') as f: - f.write(data.getbuffer()) + for chunk in dataset_file.chunks(): + f.write(chunk) + elif location == Location.CLOUD_STORAGE: + assert filename - rq_job = queue.enqueue_call( - func=rq_func, - args=(pk, filename, format_name), - job_id=rq_id, - meta={ - 'tmp_file': filename, - 'tmp_file_descriptor': fd, - }, - ) - else: - return Response(status=status.HTTP_409_CONFLICT, data='Import job already exists') + # download project file from cloud storage + try: + storage_id = location_conf['storage_id'] + except KeyError: + raise serializers.ValidationError( + 'Cloud storage location was selected for destination' + ' but cloud storage id was not specified') + db_storage = get_object_or_404(CloudStorageModel, pk=storage_id) + storage = db_storage_to_storage_instance(db_storage) + + data = _import_from_cloud_storage(storage, filename) + + fd, filename = mkstemp(prefix='cvat_', dir=settings.TMP_FILES_ROOT) + with open(filename, 'wb+') as f: + f.write(data.getbuffer()) + + rq_job = queue.enqueue_call( + func=rq_func, + args=(pk, filename, format_name), + job_id=rq_id, + meta={ + 'tmp_file': filename, + 'tmp_file_descriptor': fd, + }, + ) return Response(status=status.HTTP_202_ACCEPTED) From 12208be205f9c11599bd7b3cef504f462bd48281 Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Tue, 13 Sep 2022 10:25:34 +0300 Subject: [PATCH 04/34] Fix an issue with backups --- cvat/apps/engine/backup.py | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/cvat/apps/engine/backup.py b/cvat/apps/engine/backup.py index 9441ad623d11..430a4cfcab85 100644 --- a/cvat/apps/engine/backup.py +++ b/cvat/apps/engine/backup.py @@ -172,37 +172,37 @@ def _update_attribute(attribute, label): source, dest = attribute.pop('spec_id'), 'name' attribute[dest] = label_mapping[label]['attributes'][source] - def _update_label(shape): + def _update_label(shape, parent_label=""): if 'label_id' in shape: source, dest = shape.pop('label_id'), 'label' elif 'label' in shape: source, dest = shape.pop('label'), 'label_id' - shape[dest] = label_mapping[source]['value'] + shape[dest] = label_mapping[parent_label + source]['value'] return source - def _prepare_shapes(shapes): + def _prepare_shapes(shapes, parent_label=""): for shape in shapes: - label = _update_label(shape) + label = _update_label(shape, parent_label) for attr in shape['attributes']: - _update_attribute(attr, label) + _update_attribute(attr, parent_label + label) - _prepare_shapes(shape.get('elements', [])) + _prepare_shapes(shape.get('elements', []), label) self._prepare_meta(allowed_fields, shape) - def _prepare_tracks(tracks): + def _prepare_tracks(tracks, parent_label=""): for track in tracks: - label = _update_label(track) + label = _update_label(track, parent_label) for shape in track['shapes']: for attr in shape['attributes']: - _update_attribute(attr, label) + _update_attribute(attr, parent_label + label) self._prepare_meta(allowed_fields, shape) - _prepare_tracks(track.get('elements', [])) + _prepare_tracks(track.get('elements', []), label) for attr in track['attributes']: - _update_attribute(attr, label) + _update_attribute(attr, parent_label + label) self._prepare_meta(allowed_fields, track) for tag in annotations['tags']: @@ -426,10 +426,16 @@ def _create_labels(self, labels, db_task=None, db_project=None, parent_label=Non sublabels = label.pop('sublabels', []) db_label = models.Label.objects.create(**label_relation, parent=parent_label, **label) - label_mapping[label_name] = { - 'value': db_label.id, - 'attributes': {}, - } + if parent_label: + label_mapping[parent_label.name + label_name] = { + 'value': db_label.id, + 'attributes': {}, + } + else: + label_mapping[label_name] = { + 'value': db_label.id, + 'attributes': {}, + } label_mapping.update(self._create_labels(sublabels, db_task, db_project, db_label)) From 2c0eeaeece4189763460c0d03358b1a691df34f7 Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Tue, 13 Sep 2022 16:30:26 +0300 Subject: [PATCH 05/34] Fixes --- cvat/apps/dataset_manager/bindings.py | 29 +++-------------------- cvat/apps/dataset_manager/formats/cvat.py | 28 +++++++++++++++------- 2 files changed, 23 insertions(+), 34 deletions(-) diff --git a/cvat/apps/dataset_manager/bindings.py b/cvat/apps/dataset_manager/bindings.py index 4bf5df5d4618..b14dba03a03a 100644 --- a/cvat/apps/dataset_manager/bindings.py +++ b/cvat/apps/dataset_manager/bindings.py @@ -526,9 +526,7 @@ def _import_track(self, track, parent_label_id=None): ] shape['attributes'] = [self._import_attribute(label_id, attrib, mutable=True) for attrib in shape['attributes'] - if self._get_mutable_attribute_id(label_id, attrib.name) or ( - self.soft_attribute_import and attrib.name not in CVAT_INTERNAL_ATTRIBUTES - ) + if self._get_mutable_attribute_id(label_id, attrib.name) ] shape['points'] = list(map(float, shape['points'])) @@ -1532,7 +1530,6 @@ def import_dm_annotations(dm_dataset: Dataset, instance_data: Union[TaskData, Pr } label_cat = dm_dataset.categories()[datum_annotation.AnnotationType.label] - point_cat = dm_dataset.categories().get(datum_annotation.AnnotationType.points) root_hint = find_dataset_root(dm_dataset, instance_data) @@ -1589,26 +1586,6 @@ def import_dm_annotations(dm_dataset: Dataset, instance_data: Union[TaskData, Pr if ann.attributes.get('source', '').lower() in {'auto', 'manual'} else 'manual' shape_type = shapes[ann.type] - elements = [] - if point_cat and shape_type == ShapeType.POINTS: - labels = point_cat.items[ann.label].labels - shape_type = ShapeType.SKELETON - for i in range(len(ann.points) // 2): - label = None - if i < len(labels): - label = labels[i] - elements.append(instance_data.LabeledShape( - type=ShapeType.POINTS, - frame=frame_number, - points=ann.points[2 * i : 2 * i + 2], - label=label, - occluded=ann.visibility[i] == datum_annotation.Points.Visibility.hidden, - source=source, - attributes=[], - outside=ann.visibility[i] == datum_annotation.Points.Visibility.absent, - )) - - if track_id is None or dm_dataset.format != 'cvat' : elements = [] if ann.type == datum_annotation.AnnotationType.skeleton: @@ -1617,8 +1594,8 @@ def import_dm_annotations(dm_dataset: Dataset, instance_data: Union[TaskData, Pr instance_data.Attribute(name=n, value=str(v)) for n, v in element.attributes.items() ] - element_occluded = cast(element.attributes.pop('occluded', None), bool) is True - element_outside = cast(element.attributes.pop('outside', None), bool) is True + element_occluded = element.visibility[0] == datum_annotation.Points.Visibility.hidden + element_outside = element.visibility[0] == datum_annotation.Points.Visibility.absent element_source = element.attributes.pop('source').lower() \ if element.attributes.get('source', '').lower() in {'auto', 'manual'} else 'manual' elements.append(instance_data.LabeledShape( diff --git a/cvat/apps/dataset_manager/formats/cvat.py b/cvat/apps/dataset_manager/formats/cvat.py index cd84363062ce..e7f8c0b7b699 100644 --- a/cvat/apps/dataset_manager/formats/cvat.py +++ b/cvat/apps/dataset_manager/formats/cvat.py @@ -158,14 +158,14 @@ def _parse(cls, path): if shape and shape['type'] == 'skeleton': attributes = {} shape_element = { - 'type': None, + 'type': 'rectangle' if el.tag == 'box' else el.tag, 'attributes': element_attributes, } shape_element.update(image) else: attributes = {} shape = { - 'type': None, + 'type': 'rectangle' if el.tag == 'box' else el.tag, 'attributes': attributes, } shape['elements'] = [] @@ -216,7 +216,6 @@ def _parse(cls, path): shape_element['group'] = int(el.attrib.get('group_id', 0)) shape_element['type'] = el.tag - shape_element['occluded'] = (el.attrib.get('occluded') == '1') shape_element['z_order'] = int(el.attrib.get('z_order', 0)) if el.tag == 'box': @@ -229,6 +228,16 @@ def _parse(cls, path): for pair in el.attrib['points'].split(';'): shape_element['points'].extend(map(float, pair.split(','))) + if el.tag == 'points' and el.attrib.get('occluded') == '1': + shape_element['visibility'] = [Points.Visibility.hidden] * (len(shape_element['points']) // 2) + else: + shape_element['occluded'] = (el.attrib.get('occluded') == '1') + + if el.tag == 'points' and el.attrib.get('outside') == '1': + shape_element['visibility'] = [Points.Visibility.absent] * (len(shape_element['points']) // 2) + else: + shape_element['outside'] = (el.attrib.get('outside') == '1') + shape['elements'].append(shape_element) shape_element = None @@ -250,6 +259,8 @@ def _parse(cls, path): el.attrib['xtl'], el.attrib['ytl'], el.attrib['xbr'], el.attrib['ybr'], ])) + elif el.tag == 'skeleton': + shape['points'] = [] else: shape['points'] = [] for pair in el.attrib['points'].split(';'): @@ -276,11 +287,11 @@ def _parse(cls, path): if track_element: track_element = None else: - for shape in track_shapes.values(): - frame_desc = items.get((subset, shape['frame']), {'annotations': []}) + for track_shape in track_shapes.values(): + frame_desc = items.get((subset, track_shape['frame']), {'annotations': []}) frame_desc['annotations'].append( - cls._parse_shape_ann(shape, categories)) - items[(subset, shape['frame'])] = frame_desc + cls._parse_shape_ann(track_shape, categories)) + items[(subset, track_shape['frame'])] = frame_desc track = None elif el.tag == 'image': frame_desc = items.get((subset, image['frame']), {'annotations': []}) @@ -446,7 +457,8 @@ def _parse_shape_ann(cls, ann, categories): id=ann_id, attributes=attributes, group=group) elif ann_type == 'points': - return Points(points, label=label_id, z_order=z_order, + visibility = ann.get('visibility', None) + return Points(points, visibility, label=label_id, z_order=z_order, id=ann_id, attributes=attributes, group=group) elif ann_type == 'box': From c57d6bc943a8dc394a9d7b8b6b49e4c634ae7463 Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Tue, 13 Sep 2022 20:15:05 +0300 Subject: [PATCH 06/34] Update Datumaro version --- cvat/requirements/base.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cvat/requirements/base.txt b/cvat/requirements/base.txt index f97055dae7a7..4daff9515470 100644 --- a/cvat/requirements/base.txt +++ b/cvat/requirements/base.txt @@ -47,7 +47,7 @@ azure-storage-blob==12.13.0 google-cloud-storage==1.42.0 # --no-binary=datumaro: workaround for pip to install # opencv-headless instead of regular opencv, to actually run setup script -git+https://github.com/cvat-ai/datumaro@ay/skeletons +git+https://github.com/cvat-ai/datumaro@ay/labels_extension urllib3>=1.26.5 # not directly required, pinned by Snyk to avoid a vulnerability natsort==8.0.0 mistune>=2.0.1 # not directly required, pinned by Snyk to avoid a vulnerability From ca4def99c963c542be54e5e4f62a3c29bc5d47e8 Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Thu, 15 Sep 2022 10:57:52 +0300 Subject: [PATCH 07/34] Fix an issue with backups --- cvat/apps/dataset_manager/bindings.py | 6 ++--- cvat/apps/engine/backup.py | 35 ++++++++++++--------------- 2 files changed, 17 insertions(+), 24 deletions(-) diff --git a/cvat/apps/dataset_manager/bindings.py b/cvat/apps/dataset_manager/bindings.py index b14dba03a03a..c48f57747529 100644 --- a/cvat/apps/dataset_manager/bindings.py +++ b/cvat/apps/dataset_manager/bindings.py @@ -1199,7 +1199,7 @@ def _make_image(i, **kwargs): def _read_cvat_anno(self, cvat_frame_anno: TaskData.Frame, labels: list): categories = self.categories() label_cat = categories[datum_annotation.AnnotationType.label] - def map_label(name, parent=None): return label_cat.find((parent if parent else "") + name)[0] + def map_label(name, parent=""): return label_cat.find(name, parent)[0] label_attrs = { label.get("parent", "") + label['name']: label['attributes'] for _, label in labels @@ -1448,8 +1448,6 @@ def convert_attrs(label, cvat_attrs): else: continue elif shape_obj.type == ShapeType.SKELETON: - # points = [] - # vis = [] elements = [] for element in shape_obj.elements: element_attr = convert_attrs(shape_obj.label + element.label, element.attributes) @@ -1463,7 +1461,7 @@ def convert_attrs(label, cvat_attrs): elif element.occluded: element_vis = datum_annotation.Points.Visibility.hidden elements.append(datum_annotation.Points(element.points, [element_vis], - label=map_label(shape_obj.label + element.label), attributes=element_attr)) + label=map_label(element.label, shape_obj.label), attributes=element_attr)) anno = datum_annotation.Skeleton(elements, label=anno_label, attributes=anno_attr, group=anno_group, z_order=shape_obj.z_order) diff --git a/cvat/apps/engine/backup.py b/cvat/apps/engine/backup.py index c3e109143eef..b7661d8cdd0f 100644 --- a/cvat/apps/engine/backup.py +++ b/cvat/apps/engine/backup.py @@ -173,37 +173,38 @@ def _update_attribute(attribute, label): source, dest = attribute.pop('spec_id'), 'name' attribute[dest] = label_mapping[label]['attributes'][source] - def _update_label(shape, parent_label=""): + def _update_label(shape, parent_label=''): if 'label_id' in shape: - source, dest = shape.pop('label_id'), 'label' + source = shape.pop('label_id') + shape['label'] = label_mapping[source]['value'] elif 'label' in shape: - source, dest = shape.pop('label'), 'label_id' - shape[dest] = label_mapping[parent_label + source]['value'] + source = parent_label + shape.pop('label') + shape['label_id'] = label_mapping[source]['value'] return source - def _prepare_shapes(shapes, parent_label=""): + def _prepare_shapes(shapes, parent_label=''): for shape in shapes: label = _update_label(shape, parent_label) for attr in shape['attributes']: - _update_attribute(attr, parent_label + label) + _update_attribute(attr, label) _prepare_shapes(shape.get('elements', []), label) self._prepare_meta(allowed_fields, shape) - def _prepare_tracks(tracks, parent_label=""): + def _prepare_tracks(tracks, parent_label=''): for track in tracks: label = _update_label(track, parent_label) for shape in track['shapes']: for attr in shape['attributes']: - _update_attribute(attr, parent_label + label) + _update_attribute(attr, label) self._prepare_meta(allowed_fields, shape) _prepare_tracks(track.get('elements', []), label) for attr in track['attributes']: - _update_attribute(attr, parent_label + label) + _update_attribute(attr, label) self._prepare_meta(allowed_fields, track) for tag in annotations['tags']: @@ -427,16 +428,10 @@ def _create_labels(self, labels, db_task=None, db_project=None, parent_label=Non sublabels = label.pop('sublabels', []) db_label = models.Label.objects.create(**label_relation, parent=parent_label, **label) - if parent_label: - label_mapping[parent_label.name + label_name] = { - 'value': db_label.id, - 'attributes': {}, - } - else: - label_mapping[label_name] = { - 'value': db_label.id, - 'attributes': {}, - } + label_mapping[(parent_label.name if parent_label else '') + label_name] = { + 'value': db_label.id, + 'attributes': {}, + } label_mapping.update(self._create_labels(sublabels, db_task, db_project, db_label)) @@ -450,7 +445,7 @@ def _create_labels(self, labels, db_task=None, db_project=None, parent_label=Non attribute_serializer = AttributeSerializer(data=attribute) attribute_serializer.is_valid(raise_exception=True) db_attribute = attribute_serializer.save(label=db_label) - label_mapping[label_name]['attributes'][attribute_name] = db_attribute.id + label_mapping[(parent_label.name if parent_label else '') + label_name]['attributes'][attribute_name] = db_attribute.id return label_mapping From bcd7b0036b3b012a1127914a1154b9d3927807f8 Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Mon, 19 Sep 2022 11:49:21 +0300 Subject: [PATCH 08/34] Fix tests --- cvat/apps/dataset_manager/bindings.py | 35 ++++++++++--------- cvat/apps/dataset_manager/formats/icdar.py | 6 ++-- .../dataset_manager/formats/market1501.py | 4 +-- cvat/apps/dataset_manager/formats/vggface2.py | 2 +- .../tests/assets/annotations.json | 10 +----- .../dataset_manager/tests/assets/tasks.json | 18 +++++----- .../dataset_manager/tests/test_formats.py | 13 ++++++- cvat/apps/engine/tests/test_rest_api_3D.py | 4 +-- 8 files changed, 48 insertions(+), 44 deletions(-) diff --git a/cvat/apps/dataset_manager/bindings.py b/cvat/apps/dataset_manager/bindings.py index c48f57747529..e9fc3fb6ff7d 100644 --- a/cvat/apps/dataset_manager/bindings.py +++ b/cvat/apps/dataset_manager/bindings.py @@ -18,7 +18,7 @@ from attr import attrib, attrs from datumaro.components.dataset import Dataset from datumaro.util import cast -from datumaro.util.image import ByteImage, Image +from datumaro.components.media import ByteImage, Image, PointCloud from django.utils import timezone from cvat.apps.dataset_manager.formats.utils import get_label_color @@ -1113,7 +1113,9 @@ def map_label(name): return label_cat.find(name)[0] class CvatTaskDataExtractor(datum_extractor.SourceExtractor, CVATDataExtractorMixin): def __init__(self, task_data, include_images=False, format_type=None, dimension=DimensionType.DIM_2D): - super().__init__() + super().__init__(media_type=Image if dimension == DimensionType.DIM_2D else PointCloud) + if dimension == DimensionType.DIM_3D: + a = 6 self._categories = self._load_categories(task_data.meta['task']['labels']) self._user = self._load_user_info(task_data.meta['task']) if dimension == DimensionType.DIM_3D else {} self._dimension = dimension @@ -1146,7 +1148,7 @@ 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) + return Image(data=loader, **kwargs) else: # for images use encoded data to avoid recoding def _make_image(i, **kwargs): @@ -1172,7 +1174,7 @@ def _make_image(i, **kwargs): if dimension == DimensionType.DIM_2D: dm_item = datum_extractor.DatasetItem( id=osp.splitext(frame_data.name)[0], - annotations=dm_anno, image=dm_image, + annotations=dm_anno, media=dm_image, attributes={'frame': frame_data.frame }) elif dimension == DimensionType.DIM_3D: @@ -1188,7 +1190,7 @@ def _make_image(i, **kwargs): dm_item = datum_extractor.DatasetItem( id=osp.splitext(osp.split(frame_data.name)[-1])[0], - annotations=dm_anno, point_cloud=dm_image[0], related_images=dm_image[1], + annotations=dm_anno, media=PointCloud(dm_image[0]), related_images=dm_image[1], attributes=attributes ) @@ -1249,7 +1251,7 @@ 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) + return Image(data=loader, **kwargs) return _make_image else: # for images use encoded data to avoid recoding @@ -1278,7 +1280,7 @@ def _make_image(i, **kwargs): if self._dimension == DimensionType.DIM_2D: dm_item = datum_extractor.DatasetItem( id=osp.splitext(frame_data.name)[0], - annotations=dm_anno, image=dm_image, + annotations=dm_anno, media=dm_image, subset=frame_data.subset, attributes={'frame': frame_data.frame} ) @@ -1295,7 +1297,7 @@ def _make_image(i, **kwargs): dm_item = datum_extractor.DatasetItem( id=osp.splitext(osp.split(frame_data.name)[-1])[0], - annotations=dm_anno, point_cloud=dm_image[0], related_images=dm_image[1], + annotations=dm_anno, media=PointCloud(dm_image[0]), related_images=dm_image[1], attributes=attributes, subset=frame_data.subset ) dm_items.append(dm_item) @@ -1563,13 +1565,12 @@ def import_dm_annotations(dm_dataset: Dataset, instance_data: Union[TaskData, Pr for n, v in ann.attributes.items() ] + points = [] if ann.type in shapes: if ann.type == datum_annotation.AnnotationType.cuboid_3d: - try: - ann.points = [*ann.position,*ann.rotation,*ann.scale,0,0,0,0,0,0,0] - except Exception: - ann.points = ann.points - ann.z_order = 0 + points = [*ann.position, *ann.rotation, *ann.scale, 0, 0, 0, 0, 0, 0, 0] + elif ann.type != datum_annotation.AnnotationType.skeleton: + points = ann.points # Use safe casting to bool instead of plain reading # because in some formats return type can be different @@ -1612,10 +1613,10 @@ def import_dm_annotations(dm_dataset: Dataset, instance_data: Union[TaskData, Pr instance_data.add_shape(instance_data.LabeledShape( type=shape_type, frame=frame_number, - points=ann.points if ann.type is not datum_annotation.AnnotationType.skeleton else [], + points=points, label=label_cat.items[ann.label].name, occluded=occluded, - z_order=ann.z_order, + z_order=ann.z_order if ann.type != datum_annotation.AnnotationType.cuboid_3d else 0, group=group_map.get(ann.group, 0), source=source, attributes=attributes, @@ -1639,8 +1640,8 @@ def import_dm_annotations(dm_dataset: Dataset, instance_data: Union[TaskData, Pr occluded=occluded, outside=outside, keyframe=keyframe, - points=ann.points if ann.type is not datum_annotation.AnnotationType.skeleton else [], - z_order=ann.z_order, + points=points, + z_order=ann.z_order if ann.type != datum_annotation.AnnotationType.cuboid_3d else 0, source=source, attributes=attributes, ) diff --git a/cvat/apps/dataset_manager/formats/icdar.py b/cvat/apps/dataset_manager/formats/icdar.py index a46173f4c871..9545248fd7f3 100644 --- a/cvat/apps/dataset_manager/formats/icdar.py +++ b/cvat/apps/dataset_manager/formats/icdar.py @@ -90,7 +90,7 @@ def _import(src_file, instance_data, load_data_callback=None): with TemporaryDirectory() as tmp_dir: zipfile.ZipFile(src_file).extractall(tmp_dir) dataset = Dataset.import_from(tmp_dir, 'icdar_word_recognition', env=dm_env) - dataset.transform(CaptionToLabel, 'icdar') + dataset.transform(CaptionToLabel, label='icdar') if load_data_callback is not None: load_data_callback(dataset, instance_data) import_dm_annotations(dataset, instance_data) @@ -110,7 +110,7 @@ def _import(src_file, instance_data, load_data_callback=None): zipfile.ZipFile(src_file).extractall(tmp_dir) dataset = Dataset.import_from(tmp_dir, 'icdar_text_localization', env=dm_env) - dataset.transform(AddLabelToAnns, 'icdar') + dataset.transform(AddLabelToAnns, label='icdar') if load_data_callback is not None: load_data_callback(dataset, instance_data) import_dm_annotations(dataset, instance_data) @@ -133,7 +133,7 @@ def _import(src_file, instance_data, load_data_callback=None): with TemporaryDirectory() as tmp_dir: zipfile.ZipFile(src_file).extractall(tmp_dir) dataset = Dataset.import_from(tmp_dir, 'icdar_text_segmentation', env=dm_env) - dataset.transform(AddLabelToAnns, 'icdar') + dataset.transform(AddLabelToAnns, label='icdar') dataset.transform('masks_to_polygons') if load_data_callback is not None: load_data_callback(dataset, instance_data) diff --git a/cvat/apps/dataset_manager/formats/market1501.py b/cvat/apps/dataset_manager/formats/market1501.py index f4c305d31811..a1f3b256ebf9 100644 --- a/cvat/apps/dataset_manager/formats/market1501.py +++ b/cvat/apps/dataset_manager/formats/market1501.py @@ -65,7 +65,7 @@ def _export(dst_file, instance_data, save_images=False): dataset = Dataset.from_extractors(GetCVATDataExtractor( instance_data, include_images=save_images), env=dm_env) with TemporaryDirectory() as temp_dir: - dataset.transform(LabelAttrToAttr, 'market-1501') + dataset.transform(LabelAttrToAttr, label='market-1501') dataset.export(temp_dir, 'market1501', save_images=save_images) make_zip_archive(temp_dir, dst_file) @@ -75,7 +75,7 @@ def _import(src_file, instance_data, load_data_callback=None): zipfile.ZipFile(src_file).extractall(tmp_dir) dataset = Dataset.import_from(tmp_dir, 'market1501', env=dm_env) - dataset.transform(AttrToLabelAttr, 'market-1501') + dataset.transform(AttrToLabelAttr, label='market-1501') if load_data_callback is not None: load_data_callback(dataset, instance_data) import_dm_annotations(dataset, instance_data) diff --git a/cvat/apps/dataset_manager/formats/vggface2.py b/cvat/apps/dataset_manager/formats/vggface2.py index fc699050caf9..5b5d27cd7bf7 100644 --- a/cvat/apps/dataset_manager/formats/vggface2.py +++ b/cvat/apps/dataset_manager/formats/vggface2.py @@ -29,7 +29,7 @@ def _import(src_file, instance_data, load_data_callback=None): zipfile.ZipFile(src_file).extractall(tmp_dir) dataset = Dataset.import_from(tmp_dir, 'vgg_face2', env=dm_env) - dataset.transform('rename', r"|([^/]+/)?(.+)|\2|") + dataset.transform('rename', regex=r"|([^/]+/)?(.+)|\2|") if load_data_callback is not None: load_data_callback(dataset, instance_data) import_dm_annotations(dataset, instance_data) diff --git a/cvat/apps/dataset_manager/tests/assets/annotations.json b/cvat/apps/dataset_manager/tests/assets/annotations.json index 4ec55a94cd7d..cdd9f9836bef 100644 --- a/cvat/apps/dataset_manager/tests/assets/annotations.json +++ b/cvat/apps/dataset_manager/tests/assets/annotations.json @@ -533,15 +533,7 @@ }, "Market-1501 1.0": { "version": 0, - "tags": [ - { - "frame": 1, - "label_id": null, - "group": 0, - "source": "manual", - "attributes": [] - } - ], + "tags": [], "shapes": [], "tracks": [] }, diff --git a/cvat/apps/dataset_manager/tests/assets/tasks.json b/cvat/apps/dataset_manager/tests/assets/tasks.json index e301c54a2237..e5c4e140ecb7 100644 --- a/cvat/apps/dataset_manager/tests/assets/tasks.json +++ b/cvat/apps/dataset_manager/tests/assets/tasks.json @@ -336,7 +336,14 @@ "name": "skeleton", "color": "#2080c0", "type": "skeleton", - "attributes": [], + "attributes": [ + { + "name": "attr", + "mutable": false, + "input_type": "select", + "values": ["0", "1", "2"] + } + ], "sublabels": [ { "name": "1", @@ -353,14 +360,7 @@ { "name": "3", "color": "#479ffe", - "attributes": [ - { - "name": "attr", - "mutable": false, - "input_type": "select", - "values": ["0", "1", "2"] - } - ], + "attributes": [], "type": "points" } ], diff --git a/cvat/apps/dataset_manager/tests/test_formats.py b/cvat/apps/dataset_manager/tests/test_formats.py index 326a104b04e0..7d51a009367b 100644 --- a/cvat/apps/dataset_manager/tests/test_formats.py +++ b/cvat/apps/dataset_manager/tests/test_formats.py @@ -617,6 +617,14 @@ def _generate_task_images(self, count, name="image", **image_params): images["image_quality"] = 75 return images + def _generate_task_images_by_names(self, names, **image_params): + images = { + f"client_files[{i}]": generate_image_file(f"{name}.jpg", **image_params) + for i, name in enumerate(names) + } + images["image_quality"] = 75 + return images + def _generate_task(self, images, annotation_format, **overrides): labels = [] if annotation_format in ["ICDAR Recognition 1.0", @@ -911,7 +919,10 @@ def test_can_import_annotations_for_image_with_dots_in_filename(self): for f in dm.views.get_import_formats(): format_name = f.DISPLAY_NAME - images = self._generate_task_images(3, "img0.0.0") + if format_name == "Market-1501 1.0": + images = self._generate_task_images_by_names(["img0.0.0_0", "1.0_c3s1_000000_00", "img0.0.0_1"]) + else: + images = self._generate_task_images(3, "img0.0.0") task = self._generate_task(images, format_name) self._generate_annotations(task, format_name) diff --git a/cvat/apps/engine/tests/test_rest_api_3D.py b/cvat/apps/engine/tests/test_rest_api_3D.py index 92e158301a01..35fe7bf2d4f2 100644 --- a/cvat/apps/engine/tests/test_rest_api_3D.py +++ b/cvat/apps/engine/tests/test_rest_api_3D.py @@ -748,6 +748,6 @@ def test_api_v2_export_dataset(self): content = io.BytesIO(b"".join(response.streaming_content)) with open(file_name, "wb") as f: f.write(content.getvalue()) - self.assertEqual(osp.exists(file_name), edata['file_exists']) - self._check_dump_content(content, task_ann_prev.data, format_name,related_files=False) + self.assertEqual(osp.exists(file_name), edata['file_exists']) + self._check_dump_content(content, task_ann_prev.data, format_name,related_files=False) From 2a565ed300c29670525f7ab0277eabff00b6f1ca Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Mon, 19 Sep 2022 11:55:51 +0300 Subject: [PATCH 09/34] Fix Pylint --- cvat/apps/dataset_manager/bindings.py | 2 - .../tests/assets/annotations.json | 74 ------------------- 2 files changed, 76 deletions(-) diff --git a/cvat/apps/dataset_manager/bindings.py b/cvat/apps/dataset_manager/bindings.py index e9fc3fb6ff7d..da4c234625b6 100644 --- a/cvat/apps/dataset_manager/bindings.py +++ b/cvat/apps/dataset_manager/bindings.py @@ -1114,8 +1114,6 @@ def map_label(name): return label_cat.find(name)[0] class CvatTaskDataExtractor(datum_extractor.SourceExtractor, CVATDataExtractorMixin): def __init__(self, task_data, include_images=False, format_type=None, dimension=DimensionType.DIM_2D): super().__init__(media_type=Image if dimension == DimensionType.DIM_2D else PointCloud) - if dimension == DimensionType.DIM_3D: - a = 6 self._categories = self._load_categories(task_data.meta['task']['labels']) self._user = self._load_user_info(task_data.meta['task']) if dimension == DimensionType.DIM_3D else {} self._dimension = dimension diff --git a/cvat/apps/dataset_manager/tests/assets/annotations.json b/cvat/apps/dataset_manager/tests/assets/annotations.json index cdd9f9836bef..512c5421eec5 100644 --- a/cvat/apps/dataset_manager/tests/assets/annotations.json +++ b/cvat/apps/dataset_manager/tests/assets/annotations.json @@ -1085,7 +1085,6 @@ "points": [66.45, 147.08, 182.16, 204.56], "frame": 0, "outside": false, - "outside": true, "attributes": [] }, { @@ -1215,50 +1214,6 @@ } ] }, - "CVAT for video 1.1 polygon": { - "version": 0, - "tags": [], - "shapes": [], - "tracks": [ - { - "frame": 0, - "label_id": null, - "group": 1, - "source": "manual", - "shapes": [ - { - "type": "polygon", - "occluded": false, - "z_order": 0, - "points": [24.62, 13.01, 34.88, 20.03, 18.14, 18.08], - "frame": 0, - "outside": false, - "attributes": [] - }, - { - "type": "polygon", - "occluded": false, - "z_order": 0, - "points": [24.62, 13.01, 34.88, 20.03, 18.14, 18.08], - "frame": 1, - "outside": true, - "attributes": [] - }, - { - "type": "polygon", - "occluded": false, - "z_order": 0, - "points": [24.62, 13.01, 34.88, 20.03, 18.14, 18.08], - "frame": 2, - "outside": false, - "keyframe": true, - "attributes": [] - } - ], - "attributes": [] - } - ] - }, "CVAT for video 1.1 attributes in tracks": { "version": 0, "tags": [], @@ -1294,35 +1249,6 @@ } ] }, - "WiderFace 1.0": { - "version": 0, - "tags": [], - "shapes": [ - { - "type": "rectangle", - "occluded": false, - "z_order": 0, - "points": [7.55, 9.75, 16.44, 15.85], - "frame": 0, - "label_id": null, - "group": 0, - "source": "manual", - "attributes": [] - }, - { - "type": "rectangle", - "occluded": true, - "z_order": 0, - "points": [3.55, 27.75, 11.33, 33.71], - "frame": 1, - "label_id": null, - "group": 0, - "source": "manual", - "attributes": [] - } - ], - "tracks": [] - }, "KITTI 1.0": { "version": 0, "tags": [], From 1fc4d420ee55dc95aaaecbc1f0b48b8b4360020d Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Mon, 19 Sep 2022 12:09:32 +0300 Subject: [PATCH 10/34] Small fix --- .../tests/assets/annotations.json | 66 ++++++++----------- 1 file changed, 29 insertions(+), 37 deletions(-) diff --git a/cvat/apps/dataset_manager/tests/assets/annotations.json b/cvat/apps/dataset_manager/tests/assets/annotations.json index 512c5421eec5..e92ed404d6a8 100644 --- a/cvat/apps/dataset_manager/tests/assets/annotations.json +++ b/cvat/apps/dataset_manager/tests/assets/annotations.json @@ -708,43 +708,6 @@ ], "tracks": [] }, - "WiderFace 1.0": { - "version": 0, - "tags": [ - { - "frame": 0, - "label_id": null, - "group": 0, - "source": "manual", - "attributes": [] - } - ], - "shapes": [ - { - "type": "rectangle", - "occluded": false, - "z_order": 0, - "points": [7.55, 9.75, 16.44, 15.85], - "frame": 0, - "label_id": null, - "group": 0, - "source": "manual", - "attributes": [] - }, - { - "type": "rectangle", - "occluded": true, - "z_order": 0, - "points": [3.55, 27.75, 11.33, 33.71], - "frame": 0, - "label_id": null, - "group": 0, - "source": "manual", - "attributes": [] - } - ], - "tracks": [] - }, "VGGFace2 1.0": { "version": 0, "tags": [], @@ -1249,6 +1212,35 @@ } ] }, + "WiderFace 1.0": { + "version": 0, + "tags": [], + "shapes": [ + { + "type": "rectangle", + "occluded": false, + "z_order": 0, + "points": [7.55, 9.75, 16.44, 15.85], + "frame": 0, + "label_id": null, + "group": 0, + "source": "manual", + "attributes": [] + }, + { + "type": "rectangle", + "occluded": true, + "z_order": 0, + "points": [3.55, 27.75, 11.33, 33.71], + "frame": 1, + "label_id": null, + "group": 0, + "source": "manual", + "attributes": [] + } + ], + "tracks": [] + }, "KITTI 1.0": { "version": 0, "tags": [], From cc72a507b02773d093c73d515130bf6fe7761c85 Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Mon, 19 Sep 2022 12:17:49 +0300 Subject: [PATCH 11/34] Fix test --- cvat/apps/dataset_manager/bindings.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cvat/apps/dataset_manager/bindings.py b/cvat/apps/dataset_manager/bindings.py index da4c234625b6..0d5dbb39fb09 100644 --- a/cvat/apps/dataset_manager/bindings.py +++ b/cvat/apps/dataset_manager/bindings.py @@ -17,8 +17,8 @@ import rq from attr import attrib, attrs from datumaro.components.dataset import Dataset -from datumaro.util import cast from datumaro.components.media import ByteImage, Image, PointCloud +from datumaro.util import cast from django.utils import timezone from cvat.apps.dataset_manager.formats.utils import get_label_color @@ -1058,7 +1058,7 @@ def add_task(self, task, files): self._project_annotation.add_task(task, files, self) class CVATDataExtractorMixin: - def __init__(self): + def __init__(self, media_type=Image): super().__init__() def categories(self) -> dict: From 07e1e5f846463150342982912098c3a55318d14f Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Mon, 19 Sep 2022 15:33:12 +0300 Subject: [PATCH 12/34] Small fix --- cvat/apps/dataset_manager/bindings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cvat/apps/dataset_manager/bindings.py b/cvat/apps/dataset_manager/bindings.py index 0d5dbb39fb09..c31bd84f9cfc 100644 --- a/cvat/apps/dataset_manager/bindings.py +++ b/cvat/apps/dataset_manager/bindings.py @@ -1209,7 +1209,7 @@ def map_label(name, parent=""): return label_cat.find(name, parent)[0] class CVATProjectDataExtractor(datum_extractor.Extractor, CVATDataExtractorMixin): def __init__(self, project_data: ProjectData, include_images: bool = False, format_type: str = None, dimension: DimensionType = DimensionType.DIM_2D): - super().__init__() + super().__init__(media_type=Image if dimension == DimensionType.DIM_2D else PointCloud) self._categories = self._load_categories(project_data.meta['project']['labels']) self._user = self._load_user_info(project_data.meta['project']) if dimension == DimensionType.DIM_3D else {} self._dimension = dimension From 3a36bbe87a715677933926218c7f29a448ee80c2 Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Tue, 20 Sep 2022 10:06:36 +0300 Subject: [PATCH 13/34] Add a test to create a task --- tests/python/rest_api/test_tasks.py | 62 +++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/tests/python/rest_api/test_tasks.py b/tests/python/rest_api/test_tasks.py index d4da5fca760a..4bd1142532e5 100644 --- a/tests/python/rest_api/test_tasks.py +++ b/tests/python/rest_api/test_tasks.py @@ -157,6 +157,68 @@ def test_worker_cannot_create_task_in_project_without_ownership(self, org, proje users = find_users(org=org['id'], role=role) self._test_users_to_create_task_in_project(project_id, users, is_staff, is_allow, is_project_staff, org=org['slug']) + def test_can_create_task_with_skeleton(self): + username = "admin1" + + spec = { + "name": f'test admin1 to create a task with skeleton', + "labels": [ + { + "name": "s1", + "color": "#5c5eba", + "attributes": [ + { + "name": "color", + "mutable": False, + "input_type": "select", + "default_value": "white", + "values": [ + "white", + "black" + ] + } + ], + "type": "skeleton", + "sublabels": [ + { + "name": "1", + "color": "#d53957", + "attributes": [ + { + "id": 23, + "name": "attr", + "mutable": False, + "input_type": "select", + "default_value": "val1", + "values": [ + "val1", + "val2" + ] + } + ], + "type": "points" + }, + { + "name": "2", + "color": "#4925ec", + "attributes": [], + "type": "points" + }, + { + "name": "3", + "color": "#59a8fe", + "attributes": [], + "type": "points" + } + ], + "svg": "" + } + ] + } + + self._test_create_task_201(username, spec) + + @pytest.mark.usefixtures('dontchangedb') class TestGetData: _USERNAME = 'user1' From b1c41a52c17241cafab8be5394ae0ac02942bc5d Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Wed, 21 Sep 2022 12:27:46 +0300 Subject: [PATCH 14/34] Add tests --- tests/python/rest_api/test_projects.py | 48 +- tests/python/shared/assets/annotations.json | 12 + .../shared/assets/cvat_db/cvat_data.tar.bz2 | Bin 54868 -> 58479 bytes tests/python/shared/assets/cvat_db/data.json | 569 +++++++++++++++++- tests/python/shared/assets/jobs.json | 199 +++++- tests/python/shared/assets/projects.json | 214 ++++++- tests/python/shared/assets/tasks.json | 237 +++++++- tests/python/shared/assets/users.json | 2 +- 8 files changed, 1248 insertions(+), 33 deletions(-) diff --git a/tests/python/rest_api/test_projects.py b/tests/python/rest_api/test_projects.py index ab26029535c6..7f9c0b8254be 100644 --- a/tests/python/rest_api/test_projects.py +++ b/tests/python/rest_api/test_projects.py @@ -13,7 +13,7 @@ from copy import deepcopy from deepdiff import DeepDiff -from shared.utils.config import get_method, patch_method, make_api_client +from shared.utils.config import get_method, patch_method, make_api_client, post_files_method, post_method from .utils import export_dataset @@ -349,6 +349,52 @@ def test_can_import_dataset_in_org(self, admin_user): self._test_import_project(admin_user, project_id, 'CVAT 1.1', import_data) + def test_can_export_and_import_dataset_with_skeletons(self, admin_user): + project_id = 5 + + export_formats = ["COCO Keypoints 1.0", "CVAT for images 1.1", "CVAT for video 1.1"] + import_formats = ["COCO Keypoints 1.0", "CVAT 1.1", "CVAT 1.1"] + + for export_format, import_format in zip(export_formats, import_formats): + response = self._test_export_project(admin_user, project_id, export_format) + + tmp_file = io.BytesIO(response.data) + tmp_file.name = 'dataset.zip' + + import_data = { + 'dataset_file': tmp_file, + } + + self._test_import_project(admin_user, project_id, import_format, import_data) + + def _test_can_get_project_backup(self, username, pid, **kwargs): + for _ in range(30): + response = get_method(username, f"projects/{pid}/backup", **kwargs) + response.raise_for_status() + if response.status_code == HTTPStatus.CREATED: + break + sleep(1) + response = get_method(username, f"projects/{pid}/backup", action="download", **kwargs) + assert response.status_code == HTTPStatus.OK + return response + + def test_admin_can_get_project_backup_and_create_project_by_backup(self, admin_user): + project_id = 5 + response = self._test_can_get_project_backup(admin_user, project_id) + + tmp_file = io.BytesIO(response.content) + tmp_file.name = 'dataset.zip' + + import_data = { + 'project_file': tmp_file, + } + + with make_api_client(admin_user) as api_client: + (_, response) = api_client.projects_api.create_backup( + backup_write_request=deepcopy(import_data), + _content_type="multipart/form-data") + assert response.status == HTTPStatus.ACCEPTED + @pytest.mark.usefixtures('changedb') class TestPatchProjectLabel: def test_admin_can_delete_label(self, projects): diff --git a/tests/python/shared/assets/annotations.json b/tests/python/shared/assets/annotations.json index 837f107f1028..6bff9afa7a3f 100644 --- a/tests/python/shared/assets/annotations.json +++ b/tests/python/shared/assets/annotations.json @@ -364,6 +364,12 @@ "tags": [], "tracks": [], "version": 0 + }, + "18": { + "shapes": [], + "tags": [], + "tracks": [], + "version": 0 } }, "task": { @@ -719,6 +725,12 @@ "tags": [], "tracks": [], "version": 0 + }, + "14": { + "shapes": [], + "tags": [], + "tracks": [], + "version": 0 } } } \ No newline at end of file diff --git a/tests/python/shared/assets/cvat_db/cvat_data.tar.bz2 b/tests/python/shared/assets/cvat_db/cvat_data.tar.bz2 index 5736377960d58cdf054ddad7d4fbce05fb519181..996ce6f554d83830b7744a535dca6a66f372061c 100644 GIT binary patch literal 58479 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�E@B}19;xKQKq5*itAc!DeCx2))E57)>G1-Er-H$#pmBYFS2I$+Qx#bo`1NMXA z(-k(_bI01Bo35p-*HhemR_LK_@|^dOO*!nW{!D+zC5v_7(ca_i<9>V*gCk+WYX>@Z zHx_>baFB$SWEen_6!Y!=dLF?_0Pm;S)E|HDHxYvJe^`8e>%Fv@ zA|CT`SSj~_EJEu2>8w1mbIN|GC4{uvkb{7Ej(ntG|8An~!zcY?YsKXM+ZyZzDtFtL zGR<-DSxNNRq`S}mwL?PXD`5ms`%&)Z16;v^jrTNZ-V8K=C=Vr*L&-m>e9+JF=iWP3 zBECJnx0|pn?v<;)ZFW$z{8R-KD`|Kn|E&F{0Gx+d`c&;iIbN~1bKj{*5=qLyFJ^2@*cS=kHy1TwXs<;`iL=+?K;j9lXg^s zZgc{iZ!x=C$wW`<2%-Hqp8s&Ih~vH)xp>yzcOXw<*ZS4T!Li~$>CCMI-H`;KB#s5G zVGG~ayGtx6HQ6`XW$h;MCUHgyXR5zjR!gR!8O}oTTC8yC`Eij z*$pD1V!=*9@<)WH6_fy$jpGW0gcL3f_X+?dvij1{kw2rGvFPrC6r~=5af%7?re#Ux zQ1w}D6icx$cAd^Kyc?VaIpaIu#Blk8p=!iq#0On?ugzgLIl35o9(M;dUFYxaR&H%L zAm~6qL?O8pS=u-G9c4Bx^pzM6kY`OST~)5n#hmtHE|IwUt#HEazPte-_j8?IsHJ0d zI6N;cNo>32W7pcqp&JBp941hdJT0<`p3(z`vvXNzd4sK1G}BDBT>js& z#+(1K67bi7wENoDQia{kbO?<6!{5viQW6k^P6Po3s1P8B-s9i$*@>&~^#V!qB7?cL zdO}3uoK?E;HK*Nm*vaiKKZ13bPRcqb7&HAmTmI%j=+@YztJoh8!FoIw=ALMtSg$(T z_fQfV-S>B$!1@a-W?VvZn^G>!n>acM0WWRTD#VkPs=JWbJ>B{7s6ZZ*;l4STKMU1- zFu<$S=0Q%71u;SZZrCbw7d|2&CmqCR#E}pJ3)PCWR6)t;LP!x{j{WCNE~}$B79Gk8998v;~~LR3OXcJ}S2kkANh5QbIUXr@c3d_+9`(%NJMdWAxyK z-qh%2dA+Ap>-~xJ-@Wr)&jsVgdk3*{K@dPe34fQGa(QdQN6Q}N) z+hwhME>(I$#1R$s!UROtz^DetOY(9D4{OruGhUBgAZqGk_ZeNRO|OqT^MC5v`!Ues z=rBKn*l)8G8s17t)#N}4Xs7r}rqbmzw6U1b5LaWb)fmei$@;IAqJ3_W+)=)nfjjl= z-!0C!|E9fK%(Pr}qA#<`^)$26ba{*dp3>|Y+qItmBKe%6?ml%s4fbQ1rEZ~5rN0H| zo&pch2rvNxPx;71B1XhT97Xd*df#iO Vj${e7BMp!L7ji{7P>?LO>9ReMONsyh diff --git a/tests/python/shared/assets/cvat_db/data.json b/tests/python/shared/assets/cvat_db/data.json index 635db39f6586..22c2ff972ce0 100644 --- a/tests/python/shared/assets/cvat_db/data.json +++ b/tests/python/shared/assets/cvat_db/data.json @@ -36,7 +36,7 @@ "pk": 1, "fields": { "password": "pbkdf2_sha256$260000$DevmxlmLwciP1P6sZs2Qag$U9DFtjTWx96Sk95qY6UXVcvpdQEP2LcoFBftk5D2RKY=", - "last_login": "2022-07-19T14:27:42.006Z", + "last_login": "2022-09-21T07:30:11.348Z", "is_superuser": true, "username": "admin1", "first_name": "Admin", @@ -455,6 +455,14 @@ "user_permissions": [] } }, +{ + "model": "sessions.session", + "pk": "367mioixw2ryaso0wmfsv8k3ftscaeqi", + "fields": { + "session_data": ".eJxVjDkOwjAUBe_iGll4w_mU9JzB-ptwADlSnFSIu0OkFNC-mXkvU3Bdalm7zmUUczbOHH43Qn5o24Dcsd0my1Nb5pHsptiddnudRJ-X3f07qNjrtwbvY-YkzJEhBMCMoOQzHl1UIRlAQT2QyzESJ3eSkBNBUICMaUDz_gDnlzft:1oauBP:YfAF6bOrO0vcPuTZJquSvHif0yb3o-eTj4BraKGeHcY", + "expire_date": "2022-10-05T07:30:11.361Z" + } +}, { "model": "sessions.session", "pk": "5x9v6r58e4l9if78anupog0ittsq2w3j", @@ -1065,6 +1073,25 @@ "deleted_frames": "[]" } }, +{ + "model": "engine.data", + "pk": 13, + "fields": { + "chunk_size": 72, + "size": 9, + "image_quality": 70, + "start_frame": 0, + "stop_frame": 8, + "frame_filter": "", + "compressed_chunk_type": "imageset", + "original_chunk_type": "imageset", + "storage_method": "cache", + "storage": "local", + "cloud_storage": null, + "sorting_method": "lexicographical", + "deleted_frames": "[]" + } +}, { "model": "engine.video", "pk": 1, @@ -2010,6 +2037,105 @@ "height": 483 } }, +{ + "model": "engine.image", + "pk": 433, + "fields": { + "data": 13, + "path": "1.png", + "frame": 0, + "width": 783, + "height": 760 + } +}, +{ + "model": "engine.image", + "pk": 434, + "fields": { + "data": 13, + "path": "2.png", + "frame": 1, + "width": 528, + "height": 458 + } +}, +{ + "model": "engine.image", + "pk": 435, + "fields": { + "data": 13, + "path": "3.png", + "frame": 2, + "width": 520, + "height": 350 + } +}, +{ + "model": "engine.image", + "pk": 436, + "fields": { + "data": 13, + "path": "4.png", + "frame": 3, + "width": 569, + "height": 483 + } +}, +{ + "model": "engine.image", + "pk": 437, + "fields": { + "data": 13, + "path": "5.png", + "frame": 4, + "width": 514, + "height": 935 + } +}, +{ + "model": "engine.image", + "pk": 438, + "fields": { + "data": 13, + "path": "6.png", + "frame": 5, + "width": 502, + "height": 705 + } +}, +{ + "model": "engine.image", + "pk": 439, + "fields": { + "data": 13, + "path": "7.png", + "frame": 6, + "width": 541, + "height": 825 + } +}, +{ + "model": "engine.image", + "pk": 440, + "fields": { + "data": 13, + "path": "8.png", + "frame": 7, + "width": 883, + "height": 208 + } +}, +{ + "model": "engine.image", + "pk": 441, + "fields": { + "data": 13, + "path": "9.png", + "frame": 8, + "width": 617, + "height": 167 + } +}, { "model": "engine.project", "pk": 1, @@ -2088,6 +2214,24 @@ "target_storage": null } }, +{ + "model": "engine.project", + "pk": 5, + "fields": { + "name": "project5", + "owner": [ + "admin1" + ], + "assignee": null, + "bug_tracker": "", + "created_date": "2022-09-21T07:30:22.607Z", + "updated_date": "2022-09-21T07:31:55.223Z", + "status": "annotation", + "organization": null, + "source_storage": 5, + "target_storage": 6 + } +}, { "model": "engine.task", "pk": 2, @@ -2325,6 +2469,31 @@ "target_storage": null } }, +{ + "model": "engine.task", + "pk": 14, + "fields": { + "project": 5, + "name": "task1 in project5", + "mode": "annotation", + "owner": [ + "admin1" + ], + "assignee": null, + "bug_tracker": "", + "created_date": "2022-09-21T07:30:41.530Z", + "updated_date": "2022-09-21T07:30:41.758Z", + "overlap": 0, + "segment_size": 9, + "status": "annotation", + "data": 13, + "dimension": "2d", + "subset": "", + "organization": null, + "source_storage": 7, + "target_storage": 8 + } +}, { "model": "engine.clientfile", "pk": 131, @@ -3013,6 +3182,78 @@ "file": "/home/django/data/data/12/raw/2.png" } }, +{ + "model": "engine.clientfile", + "pk": 434, + "fields": { + "data": 13, + "file": "/home/django/data/data/13/raw/6.png" + } +}, +{ + "model": "engine.clientfile", + "pk": 435, + "fields": { + "data": 13, + "file": "/home/django/data/data/13/raw/4.png" + } +}, +{ + "model": "engine.clientfile", + "pk": 436, + "fields": { + "data": 13, + "file": "/home/django/data/data/13/raw/9.png" + } +}, +{ + "model": "engine.clientfile", + "pk": 437, + "fields": { + "data": 13, + "file": "/home/django/data/data/13/raw/7.png" + } +}, +{ + "model": "engine.clientfile", + "pk": 438, + "fields": { + "data": 13, + "file": "/home/django/data/data/13/raw/1.png" + } +}, +{ + "model": "engine.clientfile", + "pk": 439, + "fields": { + "data": 13, + "file": "/home/django/data/data/13/raw/3.png" + } +}, +{ + "model": "engine.clientfile", + "pk": 440, + "fields": { + "data": 13, + "file": "/home/django/data/data/13/raw/8.png" + } +}, +{ + "model": "engine.clientfile", + "pk": 441, + "fields": { + "data": 13, + "file": "/home/django/data/data/13/raw/5.png" + } +}, +{ + "model": "engine.clientfile", + "pk": 442, + "fields": { + "data": 13, + "file": "/home/django/data/data/13/raw/2.png" + } +}, { "model": "engine.relatedfile", "pk": 1, @@ -3121,6 +3362,15 @@ "stop_frame": 4 } }, +{ + "model": "engine.segment", + "pk": 18, + "fields": { + "task": 14, + "start_frame": 0, + "stop_frame": 8 + } +}, { "model": "engine.job", "pk": 2, @@ -3263,6 +3513,18 @@ "state": "in progress" } }, +{ + "model": "engine.job", + "pk": 18, + "fields": { + "segment": 18, + "assignee": null, + "updated_date": "2022-09-21T07:30:41.741Z", + "status": "annotation", + "stage": "annotation", + "state": "new" + } +}, { "model": "engine.label", "pk": 3, @@ -3270,7 +3532,9 @@ "task": 2, "project": null, "name": "car", - "color": "#2080c0" + "color": "#2080c0", + "type": "any", + "parent": null } }, { @@ -3280,7 +3544,9 @@ "task": 2, "project": null, "name": "person", - "color": "#c06060" + "color": "#c06060", + "type": "any", + "parent": null } }, { @@ -3290,7 +3556,9 @@ "task": null, "project": 1, "name": "car", - "color": "#2080c0" + "color": "#2080c0", + "type": "any", + "parent": null } }, { @@ -3300,7 +3568,9 @@ "task": null, "project": 1, "name": "person", - "color": "#c06060" + "color": "#c06060", + "type": "any", + "parent": null } }, { @@ -3310,7 +3580,9 @@ "task": null, "project": 2, "name": "cat", - "color": "#6080c0" + "color": "#6080c0", + "type": "any", + "parent": null } }, { @@ -3320,7 +3592,9 @@ "task": null, "project": 2, "name": "dog", - "color": "#406040" + "color": "#406040", + "type": "any", + "parent": null } }, { @@ -3330,7 +3604,9 @@ "task": 5, "project": null, "name": "car", - "color": "#2080c0" + "color": "#2080c0", + "type": "any", + "parent": null } }, { @@ -3340,7 +3616,9 @@ "task": 6, "project": null, "name": "car", - "color": "#2080c0" + "color": "#2080c0", + "type": "any", + "parent": null } }, { @@ -3350,7 +3628,9 @@ "task": 7, "project": null, "name": "cat", - "color": "#6080c0" + "color": "#6080c0", + "type": "any", + "parent": null } }, { @@ -3360,7 +3640,9 @@ "task": 7, "project": null, "name": "dog", - "color": "#406040" + "color": "#406040", + "type": "any", + "parent": null } }, { @@ -3370,7 +3652,9 @@ "task": 8, "project": null, "name": "cat", - "color": "#6080c0" + "color": "#6080c0", + "type": "any", + "parent": null } }, { @@ -3380,7 +3664,9 @@ "task": 8, "project": null, "name": "dog", - "color": "#406040" + "color": "#406040", + "type": "any", + "parent": null } }, { @@ -3390,7 +3676,9 @@ "task": 12, "project": null, "name": "Car", - "color": "#2080c0" + "color": "#2080c0", + "type": "any", + "parent": null } }, { @@ -3400,7 +3688,9 @@ "task": null, "project": 4, "name": "cat", - "color": "#6080c0" + "color": "#6080c0", + "type": "any", + "parent": null } }, { @@ -3410,7 +3700,133 @@ "task": null, "project": 4, "name": "dog", - "color": "#406040" + "color": "#406040", + "type": "any", + "parent": null + } +}, +{ + "model": "engine.label", + "pk": 18, + "fields": { + "task": null, + "project": 5, + "name": "s1", + "color": "#5c5eba", + "type": "skeleton", + "parent": null + } +}, +{ + "model": "engine.label", + "pk": 19, + "fields": { + "task": null, + "project": 5, + "name": "1", + "color": "#d12345", + "type": "points", + "parent": 18 + } +}, +{ + "model": "engine.label", + "pk": 20, + "fields": { + "task": null, + "project": 5, + "name": "2", + "color": "#350dea", + "type": "points", + "parent": 18 + } +}, +{ + "model": "engine.label", + "pk": 21, + "fields": { + "task": null, + "project": 5, + "name": "3", + "color": "#479ffe", + "type": "points", + "parent": 18 + } +}, +{ + "model": "engine.label", + "pk": 22, + "fields": { + "task": null, + "project": 5, + "name": "s2", + "color": "#0c81b5", + "type": "skeleton", + "parent": null + } +}, +{ + "model": "engine.label", + "pk": 23, + "fields": { + "task": null, + "project": 5, + "name": "1", + "color": "#d53957", + "type": "points", + "parent": 22 + } +}, +{ + "model": "engine.label", + "pk": 24, + "fields": { + "task": null, + "project": 5, + "name": "2", + "color": "#4925ec", + "type": "points", + "parent": 22 + } +}, +{ + "model": "engine.label", + "pk": 25, + "fields": { + "task": null, + "project": 5, + "name": "3", + "color": "#59a8fe", + "type": "points", + "parent": 22 + } +}, +{ + "model": "engine.label", + "pk": 26, + "fields": { + "task": null, + "project": 5, + "name": "4", + "color": "#4a649f", + "type": "points", + "parent": 22 + } +}, +{ + "model": "engine.skeleton", + "pk": 1, + "fields": { + "root": 18, + "svg": "" + } +}, +{ + "model": "engine.skeleton", + "pk": 2, + "fields": { + "root": 22, + "svg": "" } }, { @@ -3425,6 +3841,30 @@ "values": "mazda\nvolvo\nbmw" } }, +{ + "model": "engine.attributespec", + "pk": 2, + "fields": { + "label": 22, + "name": "color", + "mutable": false, + "input_type": "select", + "default_value": "white", + "values": "white\nblack" + } +}, +{ + "model": "engine.attributespec", + "pk": 3, + "fields": { + "label": 25, + "name": "attr", + "mutable": false, + "input_type": "select", + "default_value": "val1", + "values": "val1\nval2" + } +}, { "model": "engine.jobcommit", "pk": 1, @@ -4095,6 +4535,23 @@ "job": 17 } }, +{ + "model": "engine.jobcommit", + "pk": 67, + "fields": { + "scope": "create", + "owner": [ + "admin1" + ], + "timestamp": "2022-09-21T07:30:41.744Z", + "data": { + "stage": "annotation", + "state": "new", + "assignee": null + }, + "job": 18 + } +}, { "model": "engine.labeledshape", "pk": 1, @@ -4106,9 +4563,11 @@ "source": "manual", "type": "rectangle", "occluded": false, + "outside": false, "z_order": 0, "points": "[223.39453125, 226.0751953125, 513.7663269042969, 377.9619903564453]", - "rotation": 0.0 + "rotation": 0.0, + "parent": null } }, { @@ -4122,9 +4581,11 @@ "source": "manual", "type": "polygon", "occluded": false, + "outside": false, "z_order": 0, "points": "[63.0791015625, 139.75390625, 132.19337349397574, 112.3867469879533, 189.71144578313397, 159.23614457831354, 191.1030120481937, 246.9048192771097, 86.73554216867524, 335.5012048192784, 32.00060240964012, 250.15180722891637]", - "rotation": 0.0 + "rotation": 0.0, + "parent": null } }, { @@ -4138,9 +4599,11 @@ "source": "manual", "type": "polygon", "occluded": false, + "outside": false, "z_order": 0, "points": "[83.0244140625, 216.75390625, 112.24759036144678, 162.48313253012202, 167.44638554216908, 183.35662650602535, 149.35602409638705, 252.0072289156633, 84.41626506024113, 292.8265060240974, 72.81987951807241, 258.9650602409638]", - "rotation": 0.0 + "rotation": 0.0, + "parent": null } }, { @@ -4154,9 +4617,11 @@ "source": "manual", "type": "polyline", "occluded": false, + "outside": false, "z_order": 0, "points": "[24.443359375, 107.2275390625, 84.91109877913368, 61.125083240844106, 169.4316315205324, 75.1561598224198, 226.5581576026634, 113.90865704772477, 240.5892341842391, 205.77880133185317, 210.52264150943483, 270.9230854605994]", - "rotation": 0.0 + "rotation": 0.0, + "parent": null } }, { @@ -4170,9 +4635,11 @@ "source": "manual", "type": "points", "occluded": false, + "outside": false, "z_order": 0, "points": "[148.94921875, 285.6865234375, 313.515094339622, 400.32830188679145, 217.36415094339463, 585.2339622641503, 64.81698113207494, 499.25283018867776]", - "rotation": 0.0 + "rotation": 0.0, + "parent": null } }, { @@ -4186,9 +4653,11 @@ "source": "manual", "type": "polygon", "occluded": false, + "outside": false, "z_order": 0, "points": "[448.3779296875, 356.4892578125, 438.2558352402775, 761.3861556064112, 744.1780320366161, 319.37356979405195, 446.1288329519466, 163.03832951945333]", - "rotation": 0.0 + "rotation": 0.0, + "parent": null } }, { @@ -4202,9 +4671,11 @@ "source": "manual", "type": "polygon", "occluded": false, + "outside": false, "z_order": 0, "points": "[364.0361328125, 528.87890625, 609.5286041189956, 586.544622425632, 835.2494279176244, 360.0000000000018, 543.6247139588122, 175.4691075514893, 326.9656750572103, 192.76887871853796, 244.58581235698148, 319.63386727689067]", - "rotation": 0.0 + "rotation": 0.0, + "parent": null } }, { @@ -4218,9 +4689,11 @@ "source": "manual", "type": "polygon", "occluded": false, + "outside": false, "z_order": 0, "points": "[440.0439453125, 84.0791015625, 71.83311938382576, 249.81514762516053, 380.4441591784325, 526.585365853658, 677.6251604621302, 260.42875481386363, 629.4557124518615, 127.35044929396645]", - "rotation": 0.0 + "rotation": 0.0, + "parent": null } }, { @@ -4234,9 +4707,11 @@ "source": "manual", "type": "rectangle", "occluded": false, + "outside": false, "z_order": 0, "points": "[65.6189987163034, 100.96585365853753, 142.12734274711147, 362.6243902439037]", - "rotation": 0.0 + "rotation": 0.0, + "parent": null } }, { @@ -4250,9 +4725,11 @@ "source": "manual", "type": "polyline", "occluded": false, + "outside": false, "z_order": 0, "points": "[100.14453125, 246.03515625, 408.8692551505537, 327.5483359746413, 588.5839936608554, 289.0380348652925, 623.8851030110927, 183.77654516640177, 329.2812995245622, 71.45483359746322]", - "rotation": 0.0 + "rotation": 0.0, + "parent": null } }, { @@ -4266,9 +4743,11 @@ "source": "manual", "type": "rectangle", "occluded": false, + "outside": false, "z_order": 0, "points": "[106.36066411239153, 85.1515964240134, 240.08352490421748, 241.26526181354166]", - "rotation": 0.0 + "rotation": 0.0, + "parent": null } }, { @@ -4282,9 +4761,11 @@ "source": "manual", "type": "rectangle", "occluded": false, + "outside": false, "z_order": 0, "points": "[414.29522752496996, 124.8035516093205, 522.2641509433943, 286.75693673695605]", - "rotation": 0.0 + "rotation": 0.0, + "parent": null } }, { @@ -4758,6 +5239,38 @@ "cloud_storage_id": 2 } }, +{ + "model": "engine.storage", + "pk": 5, + "fields": { + "location": "local", + "cloud_storage_id": null + } +}, +{ + "model": "engine.storage", + "pk": 6, + "fields": { + "location": "local", + "cloud_storage_id": null + } +}, +{ + "model": "engine.storage", + "pk": 7, + "fields": { + "location": "local", + "cloud_storage_id": null + } +}, +{ + "model": "engine.storage", + "pk": 8, + "fields": { + "location": "local", + "cloud_storage_id": null + } +}, { "model": "admin.logentry", "pk": 1, diff --git a/tests/python/shared/assets/jobs.json b/tests/python/shared/assets/jobs.json index bbe10473e3e2..c6e54f4f2b39 100644 --- a/tests/python/shared/assets/jobs.json +++ b/tests/python/shared/assets/jobs.json @@ -1,8 +1,205 @@ { - "count": 11, + "count": 12, "next": null, "previous": null, "results": [ + { + "assignee": null, + "bug_tracker": "", + "data_chunk_size": 72, + "data_compressed_chunk_type": "imageset", + "dimension": "2d", + "id": 18, + "labels": [ + { + "attributes": [], + "color": "#4a649f", + "has_parent": true, + "id": 26, + "name": "4", + "sublabels": [], + "type": "points" + }, + { + "attributes": [ + { + "default_value": "val1", + "id": 3, + "input_type": "select", + "mutable": false, + "name": "attr", + "values": [ + "val1", + "val2" + ] + } + ], + "color": "#59a8fe", + "has_parent": true, + "id": 25, + "name": "3", + "sublabels": [], + "type": "points" + }, + { + "attributes": [], + "color": "#4925ec", + "has_parent": true, + "id": 24, + "name": "2", + "sublabels": [], + "type": "points" + }, + { + "attributes": [], + "color": "#d53957", + "has_parent": true, + "id": 23, + "name": "1", + "sublabels": [], + "type": "points" + }, + { + "attributes": [ + { + "default_value": "white", + "id": 2, + "input_type": "select", + "mutable": false, + "name": "color", + "values": [ + "white", + "black" + ] + } + ], + "color": "#0c81b5", + "has_parent": false, + "id": 22, + "name": "s2", + "sublabels": [ + { + "attributes": [], + "color": "#4a649f", + "has_parent": true, + "id": 26, + "name": "4", + "type": "points" + }, + { + "attributes": [ + { + "default_value": "val1", + "id": 3, + "input_type": "select", + "mutable": false, + "name": "attr", + "values": [ + "val1", + "val2" + ] + } + ], + "color": "#59a8fe", + "has_parent": true, + "id": 25, + "name": "3", + "type": "points" + }, + { + "attributes": [], + "color": "#4925ec", + "has_parent": true, + "id": 24, + "name": "2", + "type": "points" + }, + { + "attributes": [], + "color": "#d53957", + "has_parent": true, + "id": 23, + "name": "1", + "type": "points" + } + ], + "svg": "", + "type": "skeleton" + }, + { + "attributes": [], + "color": "#479ffe", + "has_parent": true, + "id": 21, + "name": "3", + "sublabels": [], + "type": "points" + }, + { + "attributes": [], + "color": "#350dea", + "has_parent": true, + "id": 20, + "name": "2", + "sublabels": [], + "type": "points" + }, + { + "attributes": [], + "color": "#d12345", + "has_parent": true, + "id": 19, + "name": "1", + "sublabels": [], + "type": "points" + }, + { + "attributes": [], + "color": "#5c5eba", + "has_parent": false, + "id": 18, + "name": "s1", + "sublabels": [ + { + "attributes": [], + "color": "#479ffe", + "has_parent": true, + "id": 21, + "name": "3", + "type": "points" + }, + { + "attributes": [], + "color": "#350dea", + "has_parent": true, + "id": 20, + "name": "2", + "type": "points" + }, + { + "attributes": [], + "color": "#d12345", + "has_parent": true, + "id": 19, + "name": "1", + "type": "points" + } + ], + "svg": "", + "type": "skeleton" + } + ], + "mode": "annotation", + "project_id": 5, + "stage": "annotation", + "start_frame": 0, + "state": "new", + "status": "annotation", + "stop_frame": 8, + "task_id": 14, + "updated_date": "2022-09-21T07:30:41.741000Z", + "url": "http://localhost:8080/api/jobs/18" + }, { "assignee": null, "bug_tracker": "", diff --git a/tests/python/shared/assets/projects.json b/tests/python/shared/assets/projects.json index a97b3c0246d4..aa994fe9fe8d 100644 --- a/tests/python/shared/assets/projects.json +++ b/tests/python/shared/assets/projects.json @@ -1,8 +1,220 @@ { - "count": 4, + "count": 5, "next": null, "previous": null, "results": [ + { + "assignee": null, + "bug_tracker": "", + "created_date": "2022-09-21T07:30:22.607000Z", + "dimension": "2d", + "id": 5, + "labels": [ + { + "attributes": [], + "color": "#5c5eba", + "has_parent": false, + "id": 18, + "name": "s1", + "sublabels": [ + { + "attributes": [], + "color": "#479ffe", + "has_parent": true, + "id": 21, + "name": "3", + "type": "points" + }, + { + "attributes": [], + "color": "#350dea", + "has_parent": true, + "id": 20, + "name": "2", + "type": "points" + }, + { + "attributes": [], + "color": "#d12345", + "has_parent": true, + "id": 19, + "name": "1", + "type": "points" + } + ], + "svg": "", + "type": "skeleton" + }, + { + "attributes": [], + "color": "#d12345", + "has_parent": true, + "id": 19, + "name": "1", + "sublabels": [], + "type": "points" + }, + { + "attributes": [], + "color": "#350dea", + "has_parent": true, + "id": 20, + "name": "2", + "sublabels": [], + "type": "points" + }, + { + "attributes": [], + "color": "#479ffe", + "has_parent": true, + "id": 21, + "name": "3", + "sublabels": [], + "type": "points" + }, + { + "attributes": [ + { + "default_value": "white", + "id": 2, + "input_type": "select", + "mutable": false, + "name": "color", + "values": [ + "white", + "black" + ] + } + ], + "color": "#0c81b5", + "has_parent": false, + "id": 22, + "name": "s2", + "sublabels": [ + { + "attributes": [], + "color": "#4a649f", + "has_parent": true, + "id": 26, + "name": "4", + "type": "points" + }, + { + "attributes": [ + { + "default_value": "val1", + "id": 3, + "input_type": "select", + "mutable": false, + "name": "attr", + "values": [ + "val1", + "val2" + ] + } + ], + "color": "#59a8fe", + "has_parent": true, + "id": 25, + "name": "3", + "type": "points" + }, + { + "attributes": [], + "color": "#4925ec", + "has_parent": true, + "id": 24, + "name": "2", + "type": "points" + }, + { + "attributes": [], + "color": "#d53957", + "has_parent": true, + "id": 23, + "name": "1", + "type": "points" + } + ], + "svg": "", + "type": "skeleton" + }, + { + "attributes": [], + "color": "#d53957", + "has_parent": true, + "id": 23, + "name": "1", + "sublabels": [], + "type": "points" + }, + { + "attributes": [], + "color": "#4925ec", + "has_parent": true, + "id": 24, + "name": "2", + "sublabels": [], + "type": "points" + }, + { + "attributes": [ + { + "default_value": "val1", + "id": 3, + "input_type": "select", + "mutable": false, + "name": "attr", + "values": [ + "val1", + "val2" + ] + } + ], + "color": "#59a8fe", + "has_parent": true, + "id": 25, + "name": "3", + "sublabels": [], + "type": "points" + }, + { + "attributes": [], + "color": "#4a649f", + "has_parent": true, + "id": 26, + "name": "4", + "sublabels": [], + "type": "points" + } + ], + "name": "project5", + "organization": null, + "owner": { + "first_name": "Admin", + "id": 1, + "last_name": "First", + "url": "http://localhost:8080/api/users/1", + "username": "admin1" + }, + "source_storage": { + "cloud_storage_id": null, + "id": 5, + "location": "local" + }, + "status": "annotation", + "target_storage": { + "cloud_storage_id": null, + "id": 6, + "location": "local" + }, + "task_subsets": [], + "tasks": [ + 14 + ], + "updated_date": "2022-09-21T07:31:55.223000Z", + "url": "http://localhost:8080/api/projects/5" + }, { "assignee": null, "bug_tracker": "", diff --git a/tests/python/shared/assets/tasks.json b/tests/python/shared/assets/tasks.json index d5663e25e6d1..945a5d941865 100644 --- a/tests/python/shared/assets/tasks.json +++ b/tests/python/shared/assets/tasks.json @@ -1,8 +1,243 @@ { - "count": 9, + "count": 10, "next": null, "previous": null, "results": [ + { + "assignee": null, + "bug_tracker": "", + "created_date": "2022-09-21T07:30:41.530000Z", + "data": 13, + "data_chunk_size": 72, + "data_compressed_chunk_type": "imageset", + "data_original_chunk_type": "imageset", + "dimension": "2d", + "id": 14, + "image_quality": 70, + "labels": [ + { + "attributes": [], + "color": "#4a649f", + "has_parent": true, + "id": 26, + "name": "4", + "sublabels": [], + "type": "points" + }, + { + "attributes": [ + { + "default_value": "val1", + "id": 3, + "input_type": "select", + "mutable": false, + "name": "attr", + "values": [ + "val1", + "val2" + ] + } + ], + "color": "#59a8fe", + "has_parent": true, + "id": 25, + "name": "3", + "sublabels": [], + "type": "points" + }, + { + "attributes": [], + "color": "#4925ec", + "has_parent": true, + "id": 24, + "name": "2", + "sublabels": [], + "type": "points" + }, + { + "attributes": [], + "color": "#d53957", + "has_parent": true, + "id": 23, + "name": "1", + "sublabels": [], + "type": "points" + }, + { + "attributes": [ + { + "default_value": "white", + "id": 2, + "input_type": "select", + "mutable": false, + "name": "color", + "values": [ + "white", + "black" + ] + } + ], + "color": "#0c81b5", + "has_parent": false, + "id": 22, + "name": "s2", + "sublabels": [ + { + "attributes": [], + "color": "#4a649f", + "has_parent": true, + "id": 26, + "name": "4", + "type": "points" + }, + { + "attributes": [ + { + "default_value": "val1", + "id": 3, + "input_type": "select", + "mutable": false, + "name": "attr", + "values": [ + "val1", + "val2" + ] + } + ], + "color": "#59a8fe", + "has_parent": true, + "id": 25, + "name": "3", + "type": "points" + }, + { + "attributes": [], + "color": "#4925ec", + "has_parent": true, + "id": 24, + "name": "2", + "type": "points" + }, + { + "attributes": [], + "color": "#d53957", + "has_parent": true, + "id": 23, + "name": "1", + "type": "points" + } + ], + "svg": "", + "type": "skeleton" + }, + { + "attributes": [], + "color": "#479ffe", + "has_parent": true, + "id": 21, + "name": "3", + "sublabels": [], + "type": "points" + }, + { + "attributes": [], + "color": "#350dea", + "has_parent": true, + "id": 20, + "name": "2", + "sublabels": [], + "type": "points" + }, + { + "attributes": [], + "color": "#d12345", + "has_parent": true, + "id": 19, + "name": "1", + "sublabels": [], + "type": "points" + }, + { + "attributes": [], + "color": "#5c5eba", + "has_parent": false, + "id": 18, + "name": "s1", + "sublabels": [ + { + "attributes": [], + "color": "#479ffe", + "has_parent": true, + "id": 21, + "name": "3", + "type": "points" + }, + { + "attributes": [], + "color": "#350dea", + "has_parent": true, + "id": 20, + "name": "2", + "type": "points" + }, + { + "attributes": [], + "color": "#d12345", + "has_parent": true, + "id": 19, + "name": "1", + "type": "points" + } + ], + "svg": "", + "type": "skeleton" + } + ], + "mode": "annotation", + "name": "task1 in project5", + "organization": null, + "overlap": 0, + "owner": { + "first_name": "Admin", + "id": 1, + "last_name": "First", + "url": "http://localhost:8080/api/users/1", + "username": "admin1" + }, + "project_id": 5, + "segment_size": 9, + "segments": [ + { + "jobs": [ + { + "assignee": null, + "id": 18, + "stage": "annotation", + "state": "new", + "status": "annotation", + "url": "http://localhost:8080/api/jobs/18" + } + ], + "start_frame": 0, + "stop_frame": 8 + } + ], + "size": 9, + "source_storage": { + "cloud_storage_id": null, + "id": 7, + "location": "local" + }, + "status": "annotation", + "subset": "", + "target_storage": { + "cloud_storage_id": null, + "id": 8, + "location": "local" + }, + "updated_date": "2022-09-21T07:30:41.758000Z", + "url": "http://localhost:8080/api/tasks/14" + }, { "assignee": null, "bug_tracker": "", diff --git a/tests/python/shared/assets/users.json b/tests/python/shared/assets/users.json index ba514e91bd96..53648d7814cd 100644 --- a/tests/python/shared/assets/users.json +++ b/tests/python/shared/assets/users.json @@ -310,7 +310,7 @@ "is_active": true, "is_staff": true, "is_superuser": true, - "last_login": "2022-07-19T14:27:42.006000Z", + "last_login": "2022-09-21T07:30:11.348024Z", "last_name": "First", "url": "http://localhost:8080/api/users/1", "username": "admin1" From 3beb2f284085d311ee0df0cf5fb09a32b911dcd9 Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Wed, 21 Sep 2022 19:06:46 +0300 Subject: [PATCH 15/34] Update Datumaro version --- cvat/apps/dataset_manager/bindings.py | 176 +++++++++++------- cvat/apps/dataset_manager/formats/cvat.py | 2 +- cvat/apps/dataset_manager/formats/icdar.py | 6 +- .../dataset_manager/formats/market1501.py | 4 +- cvat/apps/dataset_manager/formats/vggface2.py | 2 +- .../tests/assets/annotations.json | 10 +- .../dataset_manager/tests/assets/tasks.json | 18 +- .../dataset_manager/tests/test_formats.py | 13 +- cvat/requirements/base.txt | 4 +- 9 files changed, 136 insertions(+), 99 deletions(-) diff --git a/cvat/apps/dataset_manager/bindings.py b/cvat/apps/dataset_manager/bindings.py index b416bcae85c8..23979754831f 100644 --- a/cvat/apps/dataset_manager/bindings.py +++ b/cvat/apps/dataset_manager/bindings.py @@ -17,8 +17,8 @@ import rq from attr import attrib, attrs from datumaro.components.dataset import Dataset +from datumaro.components.media import ByteImage, Image, PointCloud from datumaro.util import cast -from datumaro.util.image import ByteImage, Image from django.utils import timezone from cvat.apps.dataset_manager.formats.utils import get_label_color @@ -1060,7 +1060,7 @@ def add_task(self, task, files): self._project_annotation.add_task(task, files, self) class CVATDataExtractorMixin: - def __init__(self): + def __init__(self, media_type=Image): super().__init__() def categories(self) -> dict: @@ -1075,18 +1075,17 @@ def _load_categories(labels: list): point_categories = datum_annotation.PointsCategories() for _, label in labels: - if label.get('parent') is None: - label_id = label_categories.add(label['name']) - for _, attr in label['attributes']: - label_categories.attributes.add(attr['name']) + label_id = label_categories.add(label['name'], label.get('parent')) + for _, attr in label['attributes']: + label_categories.attributes.add(attr['name']) - if label['type'] == str(LabelType.SKELETON): - labels_from = list(map(int, re.findall(r'data-node-from="(\d+)"', label['svg']))) - labels_to = list(map(int, re.findall(r'data-node-to="(\d+)"', label['svg']))) - sublabels = re.findall(r'data-label-name="(\w+)"', label['svg']) - joints = zip(labels_from, labels_to) + if label['type'] == str(LabelType.SKELETON): + labels_from = list(map(int, re.findall(r'data-node-from="(\d+)"', label['svg']))) + labels_to = list(map(int, re.findall(r'data-node-to="(\d+)"', label['svg']))) + sublabels = re.findall(r'data-label-name="(\w+)"', label['svg']) + joints = zip(labels_from, labels_to) - point_categories.add(label_id, sublabels, joints) + point_categories.add(label_id, sublabels, joints) categories[datum_annotation.AnnotationType.label] = label_categories categories[datum_annotation.AnnotationType.points] = point_categories @@ -1115,7 +1114,7 @@ def map_label(name): return label_cat.find(name)[0] class CvatTaskDataExtractor(datum_extractor.SourceExtractor, CVATDataExtractorMixin): def __init__(self, task_data, include_images=False, format_type=None, dimension=DimensionType.DIM_2D): - super().__init__() + super().__init__(media_type=Image if dimension == DimensionType.DIM_2D else PointCloud) self._categories = self._load_categories(task_data.meta['task']['labels']) self._user = self._load_user_info(task_data.meta['task']) if dimension == DimensionType.DIM_3D else {} self._dimension = dimension @@ -1148,7 +1147,7 @@ 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) + return Image(data=loader, **kwargs) else: # for images use encoded data to avoid recoding def _make_image(i, **kwargs): @@ -1174,7 +1173,7 @@ def _make_image(i, **kwargs): if dimension == DimensionType.DIM_2D: dm_item = datum_extractor.DatasetItem( id=osp.splitext(frame_data.name)[0], - annotations=dm_anno, image=dm_image, + annotations=dm_anno, media=dm_image, attributes={'frame': frame_data.frame }) elif dimension == DimensionType.DIM_3D: @@ -1190,7 +1189,7 @@ def _make_image(i, **kwargs): dm_item = datum_extractor.DatasetItem( id=osp.splitext(osp.split(frame_data.name)[-1])[0], - annotations=dm_anno, point_cloud=dm_image[0], related_images=dm_image[1], + annotations=dm_anno, media=PointCloud(dm_image[0]), related_images=dm_image[1], attributes=attributes ) @@ -1201,9 +1200,9 @@ def _make_image(i, **kwargs): def _read_cvat_anno(self, cvat_frame_anno: TaskData.Frame, labels: list): categories = self.categories() label_cat = categories[datum_annotation.AnnotationType.label] - def map_label(name): return label_cat.find(name)[0] + def map_label(name, parent=""): return label_cat.find(name, parent)[0] label_attrs = { - label['name']: label['attributes'] + label.get("parent", "") + label['name']: label['attributes'] for _, label in labels } @@ -1211,7 +1210,7 @@ def map_label(name): return label_cat.find(name)[0] class CVATProjectDataExtractor(datum_extractor.Extractor, CVATDataExtractorMixin): def __init__(self, project_data: ProjectData, include_images: bool = False, format_type: str = None, dimension: DimensionType = DimensionType.DIM_2D): - super().__init__() + super().__init__(media_type=Image if dimension == DimensionType.DIM_2D else PointCloud) self._categories = self._load_categories(project_data.meta['project']['labels']) self._user = self._load_user_info(project_data.meta['project']) if dimension == DimensionType.DIM_3D else {} self._dimension = dimension @@ -1251,7 +1250,7 @@ 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) + return Image(data=loader, **kwargs) return _make_image else: # for images use encoded data to avoid recoding @@ -1280,7 +1279,7 @@ def _make_image(i, **kwargs): if self._dimension == DimensionType.DIM_2D: dm_item = datum_extractor.DatasetItem( id=osp.splitext(frame_data.name)[0], - annotations=dm_anno, image=dm_image, + annotations=dm_anno, media=dm_image, subset=frame_data.subset, attributes={'frame': frame_data.frame} ) @@ -1297,7 +1296,7 @@ def _make_image(i, **kwargs): dm_item = datum_extractor.DatasetItem( id=osp.splitext(osp.split(frame_data.name)[-1])[0], - annotations=dm_anno, point_cloud=dm_image[0], related_images=dm_image[1], + annotations=dm_anno, media=PointCloud(dm_image[0]), related_images=dm_image[1], attributes=attributes, subset=frame_data.subset ) dm_items.append(dm_item) @@ -1450,20 +1449,23 @@ def convert_attrs(label, cvat_attrs): else: continue elif shape_obj.type == ShapeType.SKELETON: - points = [] - vis = [] + elements = [] for element in shape_obj.elements: - points.extend(element.points) + element_attr = convert_attrs(shape_obj.label + element.label, element.attributes) + + if hasattr(element, 'track_id'): + element_attr['track_id'] = element.track_id + element_attr['keyframe'] = element.keyframe element_vis = datum_annotation.Points.Visibility.visible if element.outside: element_vis = datum_annotation.Points.Visibility.absent elif element.occluded: element_vis = datum_annotation.Points.Visibility.hidden - vis.append(element_vis) + elements.append(datum_annotation.Points(element.points, [element_vis], + label=map_label(element.label, shape_obj.label), attributes=element_attr)) - anno = datum_annotation.Points(points, vis, - label=anno_label, attributes=anno_attr, group=anno_group, - z_order=shape_obj.z_order) + anno = datum_annotation.Skeleton(elements, label=anno_label, + attributes=anno_attr, group=anno_group, z_order=shape_obj.z_order) else: raise Exception("Unknown shape type '%s'" % shape_obj.type) @@ -1522,11 +1524,11 @@ def import_dm_annotations(dm_dataset: Dataset, instance_data: Union[TaskData, Pr datum_annotation.AnnotationType.polygon: ShapeType.POLYGON, datum_annotation.AnnotationType.polyline: ShapeType.POLYLINE, datum_annotation.AnnotationType.points: ShapeType.POINTS, - datum_annotation.AnnotationType.cuboid_3d: ShapeType.CUBOID + datum_annotation.AnnotationType.cuboid_3d: ShapeType.CUBOID, + datum_annotation.AnnotationType.skeleton: ShapeType.SKELETON } label_cat = dm_dataset.categories()[datum_annotation.AnnotationType.label] - point_cat = dm_dataset.categories().get(datum_annotation.AnnotationType.points) root_hint = find_dataset_root(dm_dataset, instance_data) @@ -1563,12 +1565,11 @@ def import_dm_annotations(dm_dataset: Dataset, instance_data: Union[TaskData, Pr ] if ann.type in shapes: + points = [] if ann.type == datum_annotation.AnnotationType.cuboid_3d: - try: - ann.points = [*ann.position,*ann.rotation,*ann.scale,0,0,0,0,0,0,0] - except Exception: - ann.points = ann.points - ann.z_order = 0 + points = [*ann.position, *ann.rotation, *ann.scale, 0, 0, 0, 0, 0, 0, 0] + elif ann.type != datum_annotation.AnnotationType.skeleton: + points = ann.points # Use safe casting to bool instead of plain reading # because in some formats return type can be different @@ -1583,34 +1584,38 @@ def import_dm_annotations(dm_dataset: Dataset, instance_data: Union[TaskData, Pr if ann.attributes.get('source', '').lower() in {'auto', 'manual'} else 'manual' shape_type = shapes[ann.type] - elements = [] - if point_cat and shape_type == ShapeType.POINTS: - labels = point_cat.items[ann.label].labels - shape_type = ShapeType.SKELETON - for i in range(len(ann.points) // 2): - label = None - if i < len(labels): - label = labels[i] - elements.append(instance_data.LabeledShape( - type=ShapeType.POINTS, - frame=frame_number, - points=ann.points[2 * i : 2 * i + 2], - label=label, - occluded=ann.visibility[i] == datum_annotation.Points.Visibility.hidden, - source=source, - attributes=[], - outside=ann.visibility[i] == datum_annotation.Points.Visibility.absent, - )) - - if track_id is None or dm_dataset.format != 'cvat' : + elements = [] + if ann.type == datum_annotation.AnnotationType.skeleton: + for element in ann.elements: + element_attributes = [ + instance_data.Attribute(name=n, value=str(v)) + for n, v in element.attributes.items() + ] + element_occluded = element.visibility[0] == datum_annotation.Points.Visibility.hidden + element_outside = element.visibility[0] == datum_annotation.Points.Visibility.absent + element_source = element.attributes.pop('source').lower() \ + if element.attributes.get('source', '').lower() in {'auto', 'manual'} else 'manual' + elements.append(instance_data.LabeledShape( + type=shapes[element.type], + frame=frame_number, + points=element.points, + label=label_cat.items[element.label].name, + occluded=element_occluded, + z_order=ann.z_order, + group=group_map.get(ann.group, 0), + source=element_source, + attributes=element_attributes, + elements=[], + outside=element_outside, + )) instance_data.add_shape(instance_data.LabeledShape( type=shape_type, frame=frame_number, - points=ann.points, + points=points, label=label_cat.items[ann.label].name, occluded=occluded, - z_order=ann.z_order, + z_order=ann.z_order if ann.type != datum_annotation.AnnotationType.cuboid_3d else 0, group=group_map.get(ann.group, 0), source=source, attributes=attributes, @@ -1619,27 +1624,57 @@ def import_dm_annotations(dm_dataset: Dataset, instance_data: Union[TaskData, Pr continue if keyframe or outside: + if track_id not in tracks: + tracks[track_id] = { + 'label': label_cat.items[ann.label].name, + 'group': group_map.get(ann.group, 0), + 'source': source, + 'shapes': [], + 'elements':{}, + } + track = instance_data.TrackedShape( type=shapes[ann.type], frame=frame_number, occluded=occluded, outside=outside, keyframe=keyframe, - points=ann.points, - z_order=ann.z_order, + points=points, + z_order=ann.z_order if ann.type != datum_annotation.AnnotationType.cuboid_3d else 0, source=source, attributes=attributes, ) - if track_id not in tracks: - tracks[track_id] = instance_data.Track( - label=label_cat.items[ann.label].name, - group=group_map.get(ann.group, 0), - source=source, - shapes=[], - ) - - tracks[track_id].shapes.append(track) + tracks[track_id]['shapes'].append(track) + + if ann.type == datum_annotation.AnnotationType.skeleton: + for element in ann.elements: + if element.label not in tracks[track_id]['elements']: + tracks[track_id]['elements'][element.label] = instance_data.Track( + label=label_cat.items[element.label].name, + group=0, + source=source, + shapes=[], + ) + element_attributes = [ + instance_data.Attribute(name=n, value=str(v)) + for n, v in element.attributes.items() + ] + element_occluded = cast(element.attributes.pop('occluded', None), bool) is True + element_outside = cast(element.attributes.pop('outside', None), bool) is True + element_source = element.attributes.pop('source').lower() \ + if element.attributes.get('source', '').lower() in {'auto', 'manual'} else 'manual' + tracks[track_id]['elements'][element.label].shapes.append(instance_data.TrackedShape( + type=shapes[element.type], + frame=frame_number, + occluded=element_occluded, + outside=element_outside, + keyframe=keyframe, + points=element.points, + z_order=element.z_order, + source=element_source, + attributes=element_attributes, + )) elif ann.type == datum_annotation.AnnotationType.label: instance_data.add_tag(instance_data.Tag( @@ -1654,7 +1689,8 @@ def import_dm_annotations(dm_dataset: Dataset, instance_data: Union[TaskData, Pr "#{} ({}): {}".format(item.id, idx, ann.type.name, e)) from e for track in tracks.values(): - instance_data.add_track(track) + track['elements'] = list(track['elements'].values()) + instance_data.add_track(instance_data.Track(**track)) def import_labels_to_project(project_annotation, dataset: Dataset): diff --git a/cvat/apps/dataset_manager/formats/cvat.py b/cvat/apps/dataset_manager/formats/cvat.py index 97bd98a31325..250cd2544c7e 100644 --- a/cvat/apps/dataset_manager/formats/cvat.py +++ b/cvat/apps/dataset_manager/formats/cvat.py @@ -409,7 +409,7 @@ def _load_items(self, parsed, image_items): di.subset = subset or DEFAULT_SUBSET_NAME di.annotations = item_desc.get('annotations') di.attributes = {'frame': int(frame_id)} - di.image = image if isinstance(image, Image) else di.image + di.media = image if isinstance(image, Image) else di.media image_items[(subset, osp.splitext(name)[0])] = di return image_items diff --git a/cvat/apps/dataset_manager/formats/icdar.py b/cvat/apps/dataset_manager/formats/icdar.py index a46173f4c871..9545248fd7f3 100644 --- a/cvat/apps/dataset_manager/formats/icdar.py +++ b/cvat/apps/dataset_manager/formats/icdar.py @@ -90,7 +90,7 @@ def _import(src_file, instance_data, load_data_callback=None): with TemporaryDirectory() as tmp_dir: zipfile.ZipFile(src_file).extractall(tmp_dir) dataset = Dataset.import_from(tmp_dir, 'icdar_word_recognition', env=dm_env) - dataset.transform(CaptionToLabel, 'icdar') + dataset.transform(CaptionToLabel, label='icdar') if load_data_callback is not None: load_data_callback(dataset, instance_data) import_dm_annotations(dataset, instance_data) @@ -110,7 +110,7 @@ def _import(src_file, instance_data, load_data_callback=None): zipfile.ZipFile(src_file).extractall(tmp_dir) dataset = Dataset.import_from(tmp_dir, 'icdar_text_localization', env=dm_env) - dataset.transform(AddLabelToAnns, 'icdar') + dataset.transform(AddLabelToAnns, label='icdar') if load_data_callback is not None: load_data_callback(dataset, instance_data) import_dm_annotations(dataset, instance_data) @@ -133,7 +133,7 @@ def _import(src_file, instance_data, load_data_callback=None): with TemporaryDirectory() as tmp_dir: zipfile.ZipFile(src_file).extractall(tmp_dir) dataset = Dataset.import_from(tmp_dir, 'icdar_text_segmentation', env=dm_env) - dataset.transform(AddLabelToAnns, 'icdar') + dataset.transform(AddLabelToAnns, label='icdar') dataset.transform('masks_to_polygons') if load_data_callback is not None: load_data_callback(dataset, instance_data) diff --git a/cvat/apps/dataset_manager/formats/market1501.py b/cvat/apps/dataset_manager/formats/market1501.py index f4c305d31811..a1f3b256ebf9 100644 --- a/cvat/apps/dataset_manager/formats/market1501.py +++ b/cvat/apps/dataset_manager/formats/market1501.py @@ -65,7 +65,7 @@ def _export(dst_file, instance_data, save_images=False): dataset = Dataset.from_extractors(GetCVATDataExtractor( instance_data, include_images=save_images), env=dm_env) with TemporaryDirectory() as temp_dir: - dataset.transform(LabelAttrToAttr, 'market-1501') + dataset.transform(LabelAttrToAttr, label='market-1501') dataset.export(temp_dir, 'market1501', save_images=save_images) make_zip_archive(temp_dir, dst_file) @@ -75,7 +75,7 @@ def _import(src_file, instance_data, load_data_callback=None): zipfile.ZipFile(src_file).extractall(tmp_dir) dataset = Dataset.import_from(tmp_dir, 'market1501', env=dm_env) - dataset.transform(AttrToLabelAttr, 'market-1501') + dataset.transform(AttrToLabelAttr, label='market-1501') if load_data_callback is not None: load_data_callback(dataset, instance_data) import_dm_annotations(dataset, instance_data) diff --git a/cvat/apps/dataset_manager/formats/vggface2.py b/cvat/apps/dataset_manager/formats/vggface2.py index fc699050caf9..5b5d27cd7bf7 100644 --- a/cvat/apps/dataset_manager/formats/vggface2.py +++ b/cvat/apps/dataset_manager/formats/vggface2.py @@ -29,7 +29,7 @@ def _import(src_file, instance_data, load_data_callback=None): zipfile.ZipFile(src_file).extractall(tmp_dir) dataset = Dataset.import_from(tmp_dir, 'vgg_face2', env=dm_env) - dataset.transform('rename', r"|([^/]+/)?(.+)|\2|") + dataset.transform('rename', regex=r"|([^/]+/)?(.+)|\2|") if load_data_callback is not None: load_data_callback(dataset, instance_data) import_dm_annotations(dataset, instance_data) diff --git a/cvat/apps/dataset_manager/tests/assets/annotations.json b/cvat/apps/dataset_manager/tests/assets/annotations.json index 4ec55a94cd7d..cdd9f9836bef 100644 --- a/cvat/apps/dataset_manager/tests/assets/annotations.json +++ b/cvat/apps/dataset_manager/tests/assets/annotations.json @@ -533,15 +533,7 @@ }, "Market-1501 1.0": { "version": 0, - "tags": [ - { - "frame": 1, - "label_id": null, - "group": 0, - "source": "manual", - "attributes": [] - } - ], + "tags": [], "shapes": [], "tracks": [] }, diff --git a/cvat/apps/dataset_manager/tests/assets/tasks.json b/cvat/apps/dataset_manager/tests/assets/tasks.json index e301c54a2237..e5c4e140ecb7 100644 --- a/cvat/apps/dataset_manager/tests/assets/tasks.json +++ b/cvat/apps/dataset_manager/tests/assets/tasks.json @@ -336,7 +336,14 @@ "name": "skeleton", "color": "#2080c0", "type": "skeleton", - "attributes": [], + "attributes": [ + { + "name": "attr", + "mutable": false, + "input_type": "select", + "values": ["0", "1", "2"] + } + ], "sublabels": [ { "name": "1", @@ -353,14 +360,7 @@ { "name": "3", "color": "#479ffe", - "attributes": [ - { - "name": "attr", - "mutable": false, - "input_type": "select", - "values": ["0", "1", "2"] - } - ], + "attributes": [], "type": "points" } ], diff --git a/cvat/apps/dataset_manager/tests/test_formats.py b/cvat/apps/dataset_manager/tests/test_formats.py index 326a104b04e0..7d51a009367b 100644 --- a/cvat/apps/dataset_manager/tests/test_formats.py +++ b/cvat/apps/dataset_manager/tests/test_formats.py @@ -617,6 +617,14 @@ def _generate_task_images(self, count, name="image", **image_params): images["image_quality"] = 75 return images + def _generate_task_images_by_names(self, names, **image_params): + images = { + f"client_files[{i}]": generate_image_file(f"{name}.jpg", **image_params) + for i, name in enumerate(names) + } + images["image_quality"] = 75 + return images + def _generate_task(self, images, annotation_format, **overrides): labels = [] if annotation_format in ["ICDAR Recognition 1.0", @@ -911,7 +919,10 @@ def test_can_import_annotations_for_image_with_dots_in_filename(self): for f in dm.views.get_import_formats(): format_name = f.DISPLAY_NAME - images = self._generate_task_images(3, "img0.0.0") + if format_name == "Market-1501 1.0": + images = self._generate_task_images_by_names(["img0.0.0_0", "1.0_c3s1_000000_00", "img0.0.0_1"]) + else: + images = self._generate_task_images(3, "img0.0.0") task = self._generate_task(images, format_name) self._generate_annotations(task, format_name) diff --git a/cvat/requirements/base.txt b/cvat/requirements/base.txt index 54178cc96e07..3abc8be888e7 100644 --- a/cvat/requirements/base.txt +++ b/cvat/requirements/base.txt @@ -45,9 +45,7 @@ diskcache==5.0.2 boto3==1.17.61 azure-storage-blob==12.13.0 google-cloud-storage==1.42.0 -# --no-binary=datumaro: workaround for pip to install -# opencv-headless instead of regular opencv, to actually run setup script -datumaro==0.2.0 --no-binary=datumaro +git+https://github.com/cvat-ai/datumaro urllib3>=1.26.5 # not directly required, pinned by Snyk to avoid a vulnerability natsort==8.0.0 mistune>=2.0.1 # not directly required, pinned by Snyk to avoid a vulnerability From 5f99f37eed70bd5d22cd5553ed5262f0d8838bb9 Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Thu, 22 Sep 2022 07:09:13 +0300 Subject: [PATCH 16/34] Update Changelog --- CHANGELOG.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2305f17cfe50..ccb7951f8cce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - `api/docs`, `api/swagger`, `api/schema` endpoints now allow unauthorized access () +- Datumaro version () ### Deprecated - TDB @@ -20,9 +21,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - TDB ### Fixed -- Removed a possibly duplicated encodeURI() calls in `server-proxy.ts` to prevent doubly encoding +- Removed a possibly duplicated encodeURI() calls in `server-proxy.ts` to prevent doubly encoding non-ascii paths while adding files from "Connected file share" (issue #4428) -- Removed unnecessary volumes defined in docker-compose.serverless.yml +- Removed unnecessary volumes defined in docker-compose.serverless.yml () ### Security From fbfadf203fc010b788c307445356f8634f30916c Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Fri, 23 Sep 2022 11:43:57 +0300 Subject: [PATCH 17/34] Fix assets --- tests/python/rest_api/test_projects.py | 2 +- tests/python/rest_api/test_tasks.py | 2 +- .../shared/assets/cvat_db/cvat_data.tar.bz2 | Bin 58479 -> 59265 bytes tests/python/shared/assets/cvat_db/data.json | 75 +++++++----------- tests/python/shared/assets/jobs.json | 8 +- tests/python/shared/assets/projects.json | 10 +-- tests/python/shared/assets/tasks.json | 16 ++-- tests/python/shared/assets/users.json | 2 +- tests/python/shared/fixtures/data.py | 4 +- 9 files changed, 51 insertions(+), 68 deletions(-) diff --git a/tests/python/rest_api/test_projects.py b/tests/python/rest_api/test_projects.py index 7f9c0b8254be..bc60def8bc14 100644 --- a/tests/python/rest_api/test_projects.py +++ b/tests/python/rest_api/test_projects.py @@ -398,7 +398,7 @@ def test_admin_can_get_project_backup_and_create_project_by_backup(self, admin_u @pytest.mark.usefixtures('changedb') class TestPatchProjectLabel: def test_admin_can_delete_label(self, projects): - project = deepcopy(list(projects)[0]) + project = deepcopy(list(projects)[1]) labels = project['labels'][0] labels.update({'deleted': True}) response = patch_method('admin1', f'/projects/{project["id"]}', {'labels': [labels]}) diff --git a/tests/python/rest_api/test_tasks.py b/tests/python/rest_api/test_tasks.py index 4bd1142532e5..7421fe71717d 100644 --- a/tests/python/rest_api/test_tasks.py +++ b/tests/python/rest_api/test_tasks.py @@ -288,7 +288,7 @@ def test_member_update_task_annotation(self, org, role, task_staff, is_allow, find_task_staff_user, find_users, tasks_by_org, request_data): users = find_users(role=role, org=org) tasks = tasks_by_org[org] - username, tid = find_task_staff_user(tasks, users, task_staff) + username, tid = find_task_staff_user(tasks, users, task_staff, [14]) data = request_data(tid) with make_api_client(username) as api_client: diff --git a/tests/python/shared/assets/cvat_db/cvat_data.tar.bz2 b/tests/python/shared/assets/cvat_db/cvat_data.tar.bz2 index 996ce6f554d83830b7744a535dca6a66f372061c..7469d3a20ed757d7a56c19a12e546b5e7a5580b8 100644 GIT binary patch literal 59265 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 Zj3P#E3J z#}@p6)CH6f?kv65$W6KcaUQXW4^;&A#%HZv?RP|enuJuTY)veYq7e)r%U7x)p?}rj z`D^ikLuj;nftXlWte#-ZOS{Rf&jZ!Jqs+8*`gPyHuy{cL>0hw~1A9VCB9$XNBFre% z2&&{q0xg3zYRq7udA525Bt=o2nHWjpFkAD303+45xG;+dMrs(n`c;!h2Uvx9;tlM8xF>_DXpVh^nv}eq0;abe6GlPUk64LMO4`Eh1Pnc8(X)1 zDd1N)6K0`NGhJ_>!4sfU$&pHD3(;(SNg8ity^%8OuB;rV>)Oc9-PUE zeOt7{dsIL(-)Mz5Wu;AQtgF0^x$mDecai;%y|6b9#8``%_*(YK!q-yV#>|fR;b2>M zq>&Rzh0T~(4Qkz3RmGpfnf5aA*J^aUM|~pM4?z=yRDbYe zqnKEAAM=W(`lL=foc%F3Nine5>{&7hKaA#Az4Y@^)FkDn5*f$m$e_kZZH>o{e2=CS zyN&4i=n>z~2Jv#`ef+*N4(_`b5Z^2Z)>nV*ytIfN`8orN3kc972yl1=QpxDdZnFu| zo&6#w0lQtB?X4W7EN0oRLSOQA z=gB4(`GpAbW$GcTFhZMkUi_33SO zIP2Y;5ZB40-P@vPTaC7MHpTO2g`oyRcIRRO3w#-&Gt_%F zfgPtJS$}Th*O2dVwD;l>Ba5d=lNMVky+7|{S9mQ9DscK^EF6_#YV7DB0D1pBuh#H zfM^=>5J`8YCpjdE;FEoTy6Rl71`kzWMxRFgOYs6d@$jtq3nc41x%@wt@kVuG9h&7k zym%)h4&SGau)ahA41FIp>p=rQ&2);{h`SG zwp!KSw!K>nXkhhE_tqa0Z=jN9_AI%j#4EeSTHb53gzi{vviUy}opn)mSw6*mB2!*|m`B*@R7Nczqy|&TByG46W-RWC_ zx2;Z%PtNyS8Q&#b5;AxJB}M9!qIu3a|D2ajs8z;zgP}N!?MiM%khBo0k-;%wjV~@=A+>k8?SXIO zPeTAH$_xOhl_RpE#<#S_PpV-7Wq+J2v2Wfw-Ngn{^V{DBzgDr@*|Karrj}oA^Gvfk zFF$t8A5#_;EUuVcEzi8pzw_*y!=hevyZLROF!b8~Vf*mfA3cNV|sCeGq$HT{)b|glA;#xkq6Qm zt1rM;0@2gzo$@ZIid18?gBI_G+H$X}nBql;v6wNhM4ZxvljW~0?W^rls+*o?#6J$k z>NLeL{1vgUB?V*E`IOe;RF}kxicT{mGP=LuQ;z126?AxK=?y_EaAl`i81mi}Yb%p- zCK*-G@4hj}c#4sB6kyNAzLDfD)=*fl-J>Z0TkWb-~a#s literal 58479 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 wFVJ1S8Uld-TJ`%oWqdLNXDA~" + "svg": "" } }, { @@ -3826,7 +3807,7 @@ "pk": 2, "fields": { "root": 22, - "svg": "" + "svg": "" } }, { @@ -4543,7 +4524,7 @@ "owner": [ "admin1" ], - "timestamp": "2022-09-21T07:30:41.744Z", + "timestamp": "2022-09-22T14:22:26.222Z", "data": { "stage": "annotation", "state": "new", diff --git a/tests/python/shared/assets/jobs.json b/tests/python/shared/assets/jobs.json index c6e54f4f2b39..18c18c06ae00 100644 --- a/tests/python/shared/assets/jobs.json +++ b/tests/python/shared/assets/jobs.json @@ -123,7 +123,7 @@ "type": "points" } ], - "svg": "", + "svg": "", "type": "skeleton" }, { @@ -185,7 +185,7 @@ "type": "points" } ], - "svg": "", + "svg": "", "type": "skeleton" } ], @@ -195,9 +195,9 @@ "start_frame": 0, "state": "new", "status": "annotation", - "stop_frame": 8, + "stop_frame": 7, "task_id": 14, - "updated_date": "2022-09-21T07:30:41.741000Z", + "updated_date": "2022-09-22T14:22:26.216000Z", "url": "http://localhost:8080/api/jobs/18" }, { diff --git a/tests/python/shared/assets/projects.json b/tests/python/shared/assets/projects.json index aa994fe9fe8d..ec06e1345b30 100644 --- a/tests/python/shared/assets/projects.json +++ b/tests/python/shared/assets/projects.json @@ -6,7 +6,7 @@ { "assignee": null, "bug_tracker": "", - "created_date": "2022-09-21T07:30:22.607000Z", + "created_date": "2022-09-22T14:21:53.791000Z", "dimension": "2d", "id": 5, "labels": [ @@ -42,7 +42,7 @@ "type": "points" } ], - "svg": "", + "svg": "", "type": "skeleton" }, { @@ -136,7 +136,7 @@ "type": "points" } ], - "svg": "", + "svg": "", "type": "skeleton" }, { @@ -189,7 +189,7 @@ } ], "name": "project5", - "organization": null, + "organization": 2, "owner": { "first_name": "Admin", "id": 1, @@ -212,7 +212,7 @@ "tasks": [ 14 ], - "updated_date": "2022-09-21T07:31:55.223000Z", + "updated_date": "2022-09-22T14:23:34.559000Z", "url": "http://localhost:8080/api/projects/5" }, { diff --git a/tests/python/shared/assets/tasks.json b/tests/python/shared/assets/tasks.json index 945a5d941865..92decb0c0d6d 100644 --- a/tests/python/shared/assets/tasks.json +++ b/tests/python/shared/assets/tasks.json @@ -6,7 +6,7 @@ { "assignee": null, "bug_tracker": "", - "created_date": "2022-09-21T07:30:41.530000Z", + "created_date": "2022-09-22T14:22:25.820000Z", "data": 13, "data_chunk_size": 72, "data_compressed_chunk_type": "imageset", @@ -127,7 +127,7 @@ "type": "points" } ], - "svg": "", + "svg": "", "type": "skeleton" }, { @@ -189,13 +189,13 @@ "type": "points" } ], - "svg": "", + "svg": "", "type": "skeleton" } ], "mode": "annotation", "name": "task1 in project5", - "organization": null, + "organization": 2, "overlap": 0, "owner": { "first_name": "Admin", @@ -205,7 +205,7 @@ "username": "admin1" }, "project_id": 5, - "segment_size": 9, + "segment_size": 8, "segments": [ { "jobs": [ @@ -219,10 +219,10 @@ } ], "start_frame": 0, - "stop_frame": 8 + "stop_frame": 7 } ], - "size": 9, + "size": 8, "source_storage": { "cloud_storage_id": null, "id": 7, @@ -235,7 +235,7 @@ "id": 8, "location": "local" }, - "updated_date": "2022-09-21T07:30:41.758000Z", + "updated_date": "2022-09-22T14:22:26.250000Z", "url": "http://localhost:8080/api/tasks/14" }, { diff --git a/tests/python/shared/assets/users.json b/tests/python/shared/assets/users.json index 53648d7814cd..9cf1125ae4a1 100644 --- a/tests/python/shared/assets/users.json +++ b/tests/python/shared/assets/users.json @@ -310,7 +310,7 @@ "is_active": true, "is_staff": true, "is_superuser": true, - "last_login": "2022-09-21T07:30:11.348024Z", + "last_login": "2022-09-22T14:21:28.429901Z", "last_name": "First", "url": "http://localhost:8080/api/users/1", "username": "admin1" diff --git a/tests/python/shared/fixtures/data.py b/tests/python/shared/fixtures/data.py index c686b2373427..3c4b6355ce0f 100644 --- a/tests/python/shared/fixtures/data.py +++ b/tests/python/shared/fixtures/data.py @@ -247,8 +247,10 @@ def find(jobs, users, is_staff): @pytest.fixture(scope='session') def find_task_staff_user(is_task_staff): - def find(tasks, users, is_staff): + def find(tasks, users, is_staff, wo_tasks=[]): for task in tasks: + if task['id'] in wo_tasks: + continue for user in users: if is_staff == is_task_staff(user['id'], task['id']): return user['username'], task['id'] From c153d93554695b40adaa386e58bd2cc387bacdfe Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Fri, 23 Sep 2022 11:47:32 +0300 Subject: [PATCH 18/34] Small fix --- tests/python/rest_api/test_projects.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/python/rest_api/test_projects.py b/tests/python/rest_api/test_projects.py index bc60def8bc14..853921fcdbc0 100644 --- a/tests/python/rest_api/test_projects.py +++ b/tests/python/rest_api/test_projects.py @@ -13,7 +13,7 @@ from copy import deepcopy from deepdiff import DeepDiff -from shared.utils.config import get_method, patch_method, make_api_client, post_files_method, post_method +from shared.utils.config import get_method, patch_method, make_api_client from .utils import export_dataset From a31b1a4cd352eb0c18cbf63363ee3e25184605aa Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Fri, 23 Sep 2022 16:36:43 +0300 Subject: [PATCH 19/34] Update tests --- tests/python/rest_api/test_jobs.py | 4 +- tests/python/shared/assets/annotations.json | 570 +++++++++++++++++- .../shared/assets/cvat_db/cvat_data.tar.bz2 | Bin 59265 -> 68170 bytes tests/python/shared/assets/cvat_db/data.json | 403 ++++++++++++- tests/python/shared/assets/jobs.json | 4 +- tests/python/shared/assets/projects.json | 2 +- tests/python/shared/assets/tasks.json | 4 +- tests/python/shared/assets/users.json | 2 +- tests/python/shared/fixtures/data.py | 4 +- 9 files changed, 976 insertions(+), 17 deletions(-) diff --git a/tests/python/rest_api/test_jobs.py b/tests/python/rest_api/test_jobs.py index 508b245c0591..880feba7a51f 100644 --- a/tests/python/rest_api/test_jobs.py +++ b/tests/python/rest_api/test_jobs.py @@ -241,7 +241,7 @@ def test_member_update_job_annotations(self, org, role, job_staff, expect_succes users = find_users(role=role, org=org) jobs = jobs_by_org[org] filtered_jobs = filter_jobs_with_shapes(jobs) - username, jid = find_job_staff_user(filtered_jobs, users, job_staff) + username, jid = find_job_staff_user(filtered_jobs, users, job_staff, [18]) data = request_data(jid) self._check_respone(username, jid, expect_success, data, org=org) @@ -255,7 +255,7 @@ def test_non_member_update_job_annotations(self, org, privilege, expect_success, users = find_users(privilege=privilege, exclude_org=org) jobs = jobs_by_org[org] filtered_jobs = filter_jobs_with_shapes(jobs) - username, jid = find_job_staff_user(filtered_jobs, users, False) + username, jid = find_job_staff_user(filtered_jobs, users, False, [18]) data = request_data(jid) self._check_respone(username, jid, expect_success, data, org=org) diff --git a/tests/python/shared/assets/annotations.json b/tests/python/shared/assets/annotations.json index 6bff9afa7a3f..36df01041962 100644 --- a/tests/python/shared/assets/annotations.json +++ b/tests/python/shared/assets/annotations.json @@ -366,9 +366,290 @@ "version": 0 }, "18": { - "shapes": [], + "shapes": [ + { + "attributes": [ + { + "spec_id": 2, + "value": "white" + } + ], + "elements": [ + { + "attributes": [ + { + "spec_id": 3, + "value": "val1" + } + ], + "frame": 0, + "group": 0, + "id": 39, + "label_id": 25, + "occluded": false, + "outside": false, + "points": [ + 259.91862203681984, + 67.8260869565238 + ], + "rotation": 0.0, + "source": "manual", + "type": "points", + "z_order": 0 + }, + { + "attributes": [], + "frame": 0, + "group": 0, + "id": 40, + "label_id": 26, + "occluded": false, + "outside": false, + "points": [ + 283.65217391304554, + 276.52173913043686 + ], + "rotation": 0.0, + "source": "manual", + "type": "points", + "z_order": 0 + }, + { + "attributes": [], + "frame": 0, + "group": 0, + "id": 37, + "label_id": 23, + "occluded": false, + "outside": false, + "points": [ + 135.8260869565238, + 118.10276296228554 + ], + "rotation": 0.0, + "source": "manual", + "type": "points", + "z_order": 0 + }, + { + "attributes": [], + "frame": 0, + "group": 0, + "id": 38, + "label_id": 24, + "occluded": false, + "outside": false, + "points": [ + 172.10450871201368, + 274.6245183225243 + ], + "rotation": 0.0, + "source": "manual", + "type": "points", + "z_order": 0 + } + ], + "frame": 0, + "group": 0, + "id": 36, + "label_id": 22, + "occluded": false, + "outside": false, + "points": [], + "rotation": 0.0, + "source": "manual", + "type": "skeleton", + "z_order": 0 + } + ], "tags": [], - "tracks": [], + "tracks": [ + { + "attributes": [ + { + "spec_id": 2, + "value": "white" + } + ], + "elements": [ + { + "attributes": [], + "frame": 0, + "group": 0, + "id": 2, + "label_id": 23, + "shapes": [ + { + "attributes": [], + "frame": 0, + "id": 2, + "occluded": false, + "outside": false, + "points": [ + 381.9130434782637, + 355.0592829431864 + ], + "rotation": 0.0, + "type": "points", + "z_order": 0 + }, + { + "attributes": [], + "frame": 3, + "id": 6, + "occluded": false, + "outside": false, + "points": [ + 137.0966796875, + 156.11214469590232 + ], + "rotation": 0.0, + "type": "points", + "z_order": 0 + } + ], + "source": "manual" + }, + { + "attributes": [], + "frame": 0, + "group": 0, + "id": 3, + "label_id": 24, + "shapes": [ + { + "attributes": [], + "frame": 0, + "id": 3, + "occluded": false, + "outside": false, + "points": [ + 461.9389738212561, + 583.320176176868 + ], + "rotation": 0.0, + "type": "points", + "z_order": 0 + }, + { + "attributes": [], + "frame": 3, + "id": 7, + "occluded": false, + "outside": false, + "points": [ + 217.12261003049207, + 384.3730379295848 + ], + "rotation": 0.0, + "type": "points", + "z_order": 0 + } + ], + "source": "manual" + }, + { + "attributes": [ + { + "spec_id": 3, + "value": "val1" + } + ], + "frame": 0, + "group": 0, + "id": 4, + "label_id": 25, + "shapes": [ + { + "attributes": [], + "frame": 0, + "id": 4, + "occluded": false, + "outside": false, + "points": [ + 655.6465767436227, + 281.7391304347839 + ], + "rotation": 0.0, + "type": "points", + "z_order": 0 + }, + { + "attributes": [], + "frame": 3, + "id": 8, + "occluded": false, + "outside": false, + "points": [ + 410.83021295285835, + 82.7919921875 + ], + "rotation": 0.0, + "type": "points", + "z_order": 0 + } + ], + "source": "manual" + }, + { + "attributes": [], + "frame": 0, + "group": 0, + "id": 5, + "label_id": 26, + "shapes": [ + { + "attributes": [], + "frame": 0, + "id": 5, + "occluded": false, + "outside": false, + "points": [ + 708.000000000003, + 586.0869565217404 + ], + "rotation": 0.0, + "type": "points", + "z_order": 0 + }, + { + "attributes": [], + "frame": 3, + "id": 9, + "occluded": false, + "outside": false, + "points": [ + 463.1836362092399, + 387.13981827445605 + ], + "rotation": 0.0, + "type": "points", + "z_order": 0 + } + ], + "source": "manual" + } + ], + "frame": 0, + "group": 0, + "id": 1, + "label_id": 22, + "shapes": [ + { + "attributes": [], + "frame": 0, + "id": 1, + "occluded": false, + "outside": false, + "points": [], + "rotation": 0.0, + "type": "skeleton", + "z_order": 0 + } + ], + "source": "manual" + } + ], "version": 0 } }, @@ -727,9 +1008,290 @@ "version": 0 }, "14": { - "shapes": [], + "shapes": [ + { + "attributes": [ + { + "spec_id": 2, + "value": "white" + } + ], + "elements": [ + { + "attributes": [ + { + "spec_id": 3, + "value": "val1" + } + ], + "frame": 0, + "group": 0, + "id": 39, + "label_id": 25, + "occluded": false, + "outside": false, + "points": [ + 259.91862203681984, + 67.8260869565238 + ], + "rotation": 0.0, + "source": "manual", + "type": "points", + "z_order": 0 + }, + { + "attributes": [], + "frame": 0, + "group": 0, + "id": 40, + "label_id": 26, + "occluded": false, + "outside": false, + "points": [ + 283.65217391304554, + 276.52173913043686 + ], + "rotation": 0.0, + "source": "manual", + "type": "points", + "z_order": 0 + }, + { + "attributes": [], + "frame": 0, + "group": 0, + "id": 37, + "label_id": 23, + "occluded": false, + "outside": false, + "points": [ + 135.8260869565238, + 118.10276296228554 + ], + "rotation": 0.0, + "source": "manual", + "type": "points", + "z_order": 0 + }, + { + "attributes": [], + "frame": 0, + "group": 0, + "id": 38, + "label_id": 24, + "occluded": false, + "outside": false, + "points": [ + 172.10450871201368, + 274.6245183225243 + ], + "rotation": 0.0, + "source": "manual", + "type": "points", + "z_order": 0 + } + ], + "frame": 0, + "group": 0, + "id": 36, + "label_id": 22, + "occluded": false, + "outside": false, + "points": [], + "rotation": 0.0, + "source": "manual", + "type": "skeleton", + "z_order": 0 + } + ], "tags": [], - "tracks": [], + "tracks": [ + { + "attributes": [ + { + "spec_id": 2, + "value": "white" + } + ], + "elements": [ + { + "attributes": [], + "frame": 0, + "group": 0, + "id": 2, + "label_id": 23, + "shapes": [ + { + "attributes": [], + "frame": 0, + "id": 2, + "occluded": false, + "outside": false, + "points": [ + 381.9130434782637, + 355.0592829431864 + ], + "rotation": 0.0, + "type": "points", + "z_order": 0 + }, + { + "attributes": [], + "frame": 3, + "id": 6, + "occluded": false, + "outside": false, + "points": [ + 137.0966796875, + 156.11214469590232 + ], + "rotation": 0.0, + "type": "points", + "z_order": 0 + } + ], + "source": "manual" + }, + { + "attributes": [], + "frame": 0, + "group": 0, + "id": 3, + "label_id": 24, + "shapes": [ + { + "attributes": [], + "frame": 0, + "id": 3, + "occluded": false, + "outside": false, + "points": [ + 461.9389738212561, + 583.320176176868 + ], + "rotation": 0.0, + "type": "points", + "z_order": 0 + }, + { + "attributes": [], + "frame": 3, + "id": 7, + "occluded": false, + "outside": false, + "points": [ + 217.12261003049207, + 384.3730379295848 + ], + "rotation": 0.0, + "type": "points", + "z_order": 0 + } + ], + "source": "manual" + }, + { + "attributes": [ + { + "spec_id": 3, + "value": "val1" + } + ], + "frame": 0, + "group": 0, + "id": 4, + "label_id": 25, + "shapes": [ + { + "attributes": [], + "frame": 0, + "id": 4, + "occluded": false, + "outside": false, + "points": [ + 655.6465767436227, + 281.7391304347839 + ], + "rotation": 0.0, + "type": "points", + "z_order": 0 + }, + { + "attributes": [], + "frame": 3, + "id": 8, + "occluded": false, + "outside": false, + "points": [ + 410.83021295285835, + 82.7919921875 + ], + "rotation": 0.0, + "type": "points", + "z_order": 0 + } + ], + "source": "manual" + }, + { + "attributes": [], + "frame": 0, + "group": 0, + "id": 5, + "label_id": 26, + "shapes": [ + { + "attributes": [], + "frame": 0, + "id": 5, + "occluded": false, + "outside": false, + "points": [ + 708.000000000003, + 586.0869565217404 + ], + "rotation": 0.0, + "type": "points", + "z_order": 0 + }, + { + "attributes": [], + "frame": 3, + "id": 9, + "occluded": false, + "outside": false, + "points": [ + 463.1836362092399, + 387.13981827445605 + ], + "rotation": 0.0, + "type": "points", + "z_order": 0 + } + ], + "source": "manual" + } + ], + "frame": 0, + "group": 0, + "id": 1, + "label_id": 22, + "shapes": [ + { + "attributes": [], + "frame": 0, + "id": 1, + "occluded": false, + "outside": false, + "points": [], + "rotation": 0.0, + "type": "skeleton", + "z_order": 0 + } + ], + "source": "manual" + } + ], "version": 0 } } diff --git a/tests/python/shared/assets/cvat_db/cvat_data.tar.bz2 b/tests/python/shared/assets/cvat_db/cvat_data.tar.bz2 index 7469d3a20ed757d7a56c19a12e546b5e7a5580b8..d28c66e0cbd571a5cece050ca22926d2480cf487 100644 GIT binary patch literal 68170 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 Zj3P#E3J z#}@p6)CH6f?kv65$W6KcaUQXW4^;&A#%HZv?RP|enuJuTY)veYq7e)r%U7x)p?}rj z`D^ikLuj;nftXlWte#-ZOS{Rf&jZ!Jqs+8*`gPyHuy{cL>0hw~1A9VCB9$XNBFre% z2&&{q0xg3zYRq7udA525Bt=o2nHWjpFkAD303+45xG;+dMrs(n`c;!h2Uvx9;tlM8xF>_DXpVh^nv}eq0;abe6GlPUk64LMO4`Eh1Pnc8(X)1 zDd1N)6K0`NGhJ_>!4sfU$&pHD3(;(SNg8ity^%8OuB;rV>)Oc9-PUE zeOt7{dsIL(-)Mz5Wu;AQtgF0^x$mDecai;%y|6b9#8``%_*(YK!q-yV#>|fR;b2>M zq>&Rzh0T~(4Qkz3RmGpfnf5aA*J^aUM|~pM4?z=yRDbYe zqnKEAAM=W(`lL=foc%F3Nine5>{&7hKaA#Az4Y@^)FkDn5*f$m$e_kZZH>o{e2=CS zyN&4i=n>z~2Jv#`ef+*N4(_`b5Z^2Z)>nV*ytIfN`8orN3kc972yl1=QpxDdZnFu| zo&6#w0lQtB?X4W7EN0oRLSOQA z=gB4(`GpAbW$GcTFhZMkUi_33SO zIP2Y;5ZB40-P@vPTaC7MHpTO2g`oyRcIRRO3w#-&Gt_%F zfgPtJS$}Th*O2dVwD;l>Ba5d=lNMVky+7|{S9mQ9DscK^EF6_#YV7DB0D1pBuh#H zfM^=>5J`8YCpjdE;FEoTy6Rl71`kzWMxRFgOYs6d@$jtq3nc41x%@wt@kVuG9h&7k zym%)h4&SGau)ahA41FIp>p=rQ&2);{h`SG zwp!KSw!K>nXkhhE_tqa0Z=jN9_AI%j#4EeSTHb53gzi{vviUy}opn)mSw6*mB2!*|m`B*@R7Nczqy|&TByG46W-RWC_ zx2;Z%PtNyS8Q&#b5;AxJB}M9!qIu3a|D2ajs8z;zgP}N!?MiM%khBo0k-;%wjV~@=A+>k8?SXIO zPeTAH$_xOhl_RpE#<#S_PpV-7Wq+J2v2Wfw-Ngn{^V{DBzgDr@*|Karrj}oA^Gvfk zFF$t8A5#_;EUuVcEzi8pzw_*y!=hevyZLROF!b8~Vf*mfA3cNV|sCeGq$HT{)b|glA;#xkq6Qm zt1rM;0@2gzo$@ZIid18?gBI_G+H$X}nBql;v6wNhM4ZxvljW~0?W^rls+*o?#6J$k z>NLeL{1vgUB?V*E`IOe;RF}kxicT{mGP=LuQ;z126?AxK=?y_EaAl`i81mi}Yb%p- zCK*-G@4hj}c#4sB6kyNAzLDfD)=*fl-J>Z0TkWb-~a#s diff --git a/tests/python/shared/assets/cvat_db/data.json b/tests/python/shared/assets/cvat_db/data.json index 281134748e8e..49ca0424a71b 100644 --- a/tests/python/shared/assets/cvat_db/data.json +++ b/tests/python/shared/assets/cvat_db/data.json @@ -2214,7 +2214,7 @@ "assignee": null, "bug_tracker": "", "created_date": "2022-09-22T14:21:53.791Z", - "updated_date": "2022-09-22T14:23:34.559Z", + "updated_date": "2022-09-23T11:57:02.088Z", "status": "annotation", "organization": 2, "source_storage": 5, @@ -2471,7 +2471,7 @@ "assignee": null, "bug_tracker": "", "created_date": "2022-09-22T14:22:25.820Z", - "updated_date": "2022-09-22T14:22:26.250Z", + "updated_date": "2022-09-23T11:57:02.300Z", "overlap": 0, "segment_size": 8, "status": "annotation", @@ -3500,10 +3500,10 @@ "fields": { "segment": 18, "assignee": null, - "updated_date": "2022-09-22T14:22:26.216Z", + "updated_date": "2022-09-23T11:57:02.302Z", "status": "annotation", "stage": "annotation", - "state": "new" + "state": "in progress" } }, { @@ -4533,6 +4533,89 @@ "job": 18 } }, +{ + "model": "engine.jobcommit", + "pk": 68, + "fields": { + "scope": "create", + "owner": [ + "admin1" + ], + "timestamp": "2022-09-23T11:56:30.270Z", + "data": { + "stage": "annotation", + "state": "new", + "assignee": null + }, + "job": 18 + } +}, +{ + "model": "engine.jobcommit", + "pk": 69, + "fields": { + "scope": "create", + "owner": [ + "admin1" + ], + "timestamp": "2022-09-23T11:56:30.533Z", + "data": { + "stage": "annotation", + "state": "in progress", + "assignee": null + }, + "job": 18 + } +}, +{ + "model": "engine.jobcommit", + "pk": 70, + "fields": { + "scope": "update", + "owner": [ + "admin1" + ], + "timestamp": "2022-09-23T11:56:30.535Z", + "data": { + "state": "in progress" + }, + "job": 18 + } +}, +{ + "model": "engine.jobcommit", + "pk": 71, + "fields": { + "scope": "create", + "owner": [ + "admin1" + ], + "timestamp": "2022-09-23T11:56:45.344Z", + "data": { + "stage": "annotation", + "state": "in progress", + "assignee": null + }, + "job": 18 + } +}, +{ + "model": "engine.jobcommit", + "pk": 72, + "fields": { + "scope": "create", + "owner": [ + "admin1" + ], + "timestamp": "2022-09-23T11:57:02.307Z", + "data": { + "stage": "annotation", + "state": "in progress", + "assignee": null + }, + "job": 18 + } +}, { "model": "engine.labeledshape", "pk": 1, @@ -4749,6 +4832,318 @@ "parent": null } }, +{ + "model": "engine.labeledshape", + "pk": 36, + "fields": { + "job": 18, + "label": 22, + "frame": 0, + "group": 0, + "source": "manual", + "type": "skeleton", + "occluded": false, + "outside": false, + "z_order": 0, + "points": "[]", + "rotation": 0.0, + "parent": null + } +}, +{ + "model": "engine.labeledshape", + "pk": 37, + "fields": { + "job": 18, + "label": 23, + "frame": 0, + "group": 0, + "source": "manual", + "type": "points", + "occluded": false, + "outside": false, + "z_order": 0, + "points": "[135.8260869565238, 118.10276296228554]", + "rotation": 0.0, + "parent": 36 + } +}, +{ + "model": "engine.labeledshape", + "pk": 38, + "fields": { + "job": 18, + "label": 24, + "frame": 0, + "group": 0, + "source": "manual", + "type": "points", + "occluded": false, + "outside": false, + "z_order": 0, + "points": "[172.10450871201368, 274.6245183225243]", + "rotation": 0.0, + "parent": 36 + } +}, +{ + "model": "engine.labeledshape", + "pk": 39, + "fields": { + "job": 18, + "label": 25, + "frame": 0, + "group": 0, + "source": "manual", + "type": "points", + "occluded": false, + "outside": false, + "z_order": 0, + "points": "[259.91862203681984, 67.8260869565238]", + "rotation": 0.0, + "parent": 36 + } +}, +{ + "model": "engine.labeledshape", + "pk": 40, + "fields": { + "job": 18, + "label": 26, + "frame": 0, + "group": 0, + "source": "manual", + "type": "points", + "occluded": false, + "outside": false, + "z_order": 0, + "points": "[283.65217391304554, 276.52173913043686]", + "rotation": 0.0, + "parent": 36 + } +}, +{ + "model": "engine.labeledshapeattributeval", + "pk": 1, + "fields": { + "spec": 2, + "value": "white", + "shape": 36 + } +}, +{ + "model": "engine.labeledshapeattributeval", + "pk": 2, + "fields": { + "spec": 3, + "value": "val1", + "shape": 39 + } +}, +{ + "model": "engine.labeledtrack", + "pk": 1, + "fields": { + "job": 18, + "label": 22, + "frame": 0, + "group": 0, + "source": "manual", + "parent": null + } +}, +{ + "model": "engine.labeledtrack", + "pk": 2, + "fields": { + "job": 18, + "label": 23, + "frame": 0, + "group": 0, + "source": "manual", + "parent": 1 + } +}, +{ + "model": "engine.labeledtrack", + "pk": 3, + "fields": { + "job": 18, + "label": 24, + "frame": 0, + "group": 0, + "source": "manual", + "parent": 1 + } +}, +{ + "model": "engine.labeledtrack", + "pk": 4, + "fields": { + "job": 18, + "label": 25, + "frame": 0, + "group": 0, + "source": "manual", + "parent": 1 + } +}, +{ + "model": "engine.labeledtrack", + "pk": 5, + "fields": { + "job": 18, + "label": 26, + "frame": 0, + "group": 0, + "source": "manual", + "parent": 1 + } +}, +{ + "model": "engine.labeledtrackattributeval", + "pk": 3, + "fields": { + "spec": 2, + "value": "white", + "track": 1 + } +}, +{ + "model": "engine.labeledtrackattributeval", + "pk": 4, + "fields": { + "spec": 3, + "value": "val1", + "track": 4 + } +}, +{ + "model": "engine.trackedshape", + "pk": 1, + "fields": { + "type": "skeleton", + "occluded": false, + "outside": false, + "z_order": 0, + "points": "[]", + "rotation": 0.0, + "track": 1, + "frame": 0 + } +}, +{ + "model": "engine.trackedshape", + "pk": 2, + "fields": { + "type": "points", + "occluded": false, + "outside": false, + "z_order": 0, + "points": "[381.9130434782637, 355.0592829431864]", + "rotation": 0.0, + "track": 2, + "frame": 0 + } +}, +{ + "model": "engine.trackedshape", + "pk": 3, + "fields": { + "type": "points", + "occluded": false, + "outside": false, + "z_order": 0, + "points": "[461.9389738212561, 583.320176176868]", + "rotation": 0.0, + "track": 3, + "frame": 0 + } +}, +{ + "model": "engine.trackedshape", + "pk": 4, + "fields": { + "type": "points", + "occluded": false, + "outside": false, + "z_order": 0, + "points": "[655.6465767436227, 281.7391304347839]", + "rotation": 0.0, + "track": 4, + "frame": 0 + } +}, +{ + "model": "engine.trackedshape", + "pk": 5, + "fields": { + "type": "points", + "occluded": false, + "outside": false, + "z_order": 0, + "points": "[708.000000000003, 586.0869565217404]", + "rotation": 0.0, + "track": 5, + "frame": 0 + } +}, +{ + "model": "engine.trackedshape", + "pk": 6, + "fields": { + "type": "points", + "occluded": false, + "outside": false, + "z_order": 0, + "points": "[137.0966796875, 156.11214469590232]", + "rotation": 0.0, + "track": 2, + "frame": 3 + } +}, +{ + "model": "engine.trackedshape", + "pk": 7, + "fields": { + "type": "points", + "occluded": false, + "outside": false, + "z_order": 0, + "points": "[217.12261003049207, 384.3730379295848]", + "rotation": 0.0, + "track": 3, + "frame": 3 + } +}, +{ + "model": "engine.trackedshape", + "pk": 8, + "fields": { + "type": "points", + "occluded": false, + "outside": false, + "z_order": 0, + "points": "[410.83021295285835, 82.7919921875]", + "rotation": 0.0, + "track": 4, + "frame": 3 + } +}, +{ + "model": "engine.trackedshape", + "pk": 9, + "fields": { + "type": "points", + "occluded": false, + "outside": false, + "z_order": 0, + "points": "[463.1836362092399, 387.13981827445605]", + "rotation": 0.0, + "track": 5, + "frame": 3 + } +}, { "model": "engine.profile", "pk": 1, diff --git a/tests/python/shared/assets/jobs.json b/tests/python/shared/assets/jobs.json index 18c18c06ae00..6155e8974c29 100644 --- a/tests/python/shared/assets/jobs.json +++ b/tests/python/shared/assets/jobs.json @@ -193,11 +193,11 @@ "project_id": 5, "stage": "annotation", "start_frame": 0, - "state": "new", + "state": "in progress", "status": "annotation", "stop_frame": 7, "task_id": 14, - "updated_date": "2022-09-22T14:22:26.216000Z", + "updated_date": "2022-09-23T11:57:02.302000Z", "url": "http://localhost:8080/api/jobs/18" }, { diff --git a/tests/python/shared/assets/projects.json b/tests/python/shared/assets/projects.json index ec06e1345b30..f464aba80589 100644 --- a/tests/python/shared/assets/projects.json +++ b/tests/python/shared/assets/projects.json @@ -212,7 +212,7 @@ "tasks": [ 14 ], - "updated_date": "2022-09-22T14:23:34.559000Z", + "updated_date": "2022-09-23T11:57:02.088000Z", "url": "http://localhost:8080/api/projects/5" }, { diff --git a/tests/python/shared/assets/tasks.json b/tests/python/shared/assets/tasks.json index 92decb0c0d6d..57ac63b83d27 100644 --- a/tests/python/shared/assets/tasks.json +++ b/tests/python/shared/assets/tasks.json @@ -213,7 +213,7 @@ "assignee": null, "id": 18, "stage": "annotation", - "state": "new", + "state": "in progress", "status": "annotation", "url": "http://localhost:8080/api/jobs/18" } @@ -235,7 +235,7 @@ "id": 8, "location": "local" }, - "updated_date": "2022-09-22T14:22:26.250000Z", + "updated_date": "2022-09-23T11:57:02.300000Z", "url": "http://localhost:8080/api/tasks/14" }, { diff --git a/tests/python/shared/assets/users.json b/tests/python/shared/assets/users.json index 9cf1125ae4a1..2eded1dde47f 100644 --- a/tests/python/shared/assets/users.json +++ b/tests/python/shared/assets/users.json @@ -310,7 +310,7 @@ "is_active": true, "is_staff": true, "is_superuser": true, - "last_login": "2022-09-22T14:21:28.429901Z", + "last_login": "2022-09-22T14:21:28.429000Z", "last_name": "First", "url": "http://localhost:8080/api/users/1", "username": "admin1" diff --git a/tests/python/shared/fixtures/data.py b/tests/python/shared/fixtures/data.py index 3c4b6355ce0f..cf15a0d21a38 100644 --- a/tests/python/shared/fixtures/data.py +++ b/tests/python/shared/fixtures/data.py @@ -237,8 +237,10 @@ def check(user_id, org_id): @pytest.fixture(scope='session') def find_job_staff_user(is_job_staff): - def find(jobs, users, is_staff): + def find(jobs, users, is_staff, wo_jobs=[]): for job in jobs: + if job['id'] in wo_jobs: + continue for user in users: if is_staff == is_job_staff(user['id'], job['id']): return user['username'], job['id'] From dd937ff3fc7be4d7c2222e34e551484ec9292352 Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Fri, 23 Sep 2022 19:13:33 +0300 Subject: [PATCH 20/34] Fixes --- cvat/apps/dataset_manager/bindings.py | 60 ++++++++++++---------- cvat/apps/dataset_manager/formats/cvat.py | 5 +- cvat/apps/engine/tests/test_rest_api_3D.py | 4 +- 3 files changed, 38 insertions(+), 31 deletions(-) diff --git a/cvat/apps/dataset_manager/bindings.py b/cvat/apps/dataset_manager/bindings.py index 2134e106b69c..cf3dfdd18b61 100644 --- a/cvat/apps/dataset_manager/bindings.py +++ b/cvat/apps/dataset_manager/bindings.py @@ -1645,34 +1645,38 @@ def import_dm_annotations(dm_dataset: Dataset, instance_data: Union[TaskData, Pr ) tracks[track_id]['shapes'].append(track) - if ann.type == datum_annotation.AnnotationType.skeleton: - for element in ann.elements: - if element.label not in tracks[track_id]['elements']: - tracks[track_id]['elements'][element.label] = instance_data.Track( - label=label_cat.items[element.label].name, - group=0, - source=source, - shapes=[], - ) - element_attributes = [ - instance_data.Attribute(name=n, value=str(v)) - for n, v in element.attributes.items() - ] - element_occluded = cast(element.attributes.pop('occluded', None), bool) is True - element_outside = cast(element.attributes.pop('outside', None), bool) is True - element_source = element.attributes.pop('source').lower() \ - if element.attributes.get('source', '').lower() in {'auto', 'manual'} else 'manual' - tracks[track_id]['elements'][element.label].shapes.append(instance_data.TrackedShape( - type=shapes[element.type], - frame=frame_number, - occluded=element_occluded, - outside=element_outside, - keyframe=keyframe, - points=element.points, - z_order=element.z_order, - source=element_source, - attributes=element_attributes, - )) + if ann.type == datum_annotation.AnnotationType.skeleton: + for element in ann.elements: + element_keyframe = cast(element.attributes.get('keyframe', None), bool) is True + element_outside = cast(element.attributes.pop('outside', None), bool) is True + if not element_keyframe and not element_outside: + continue + + if element.label not in tracks[track_id]['elements']: + tracks[track_id]['elements'][element.label] = instance_data.Track( + label=label_cat.items[element.label].name, + group=0, + source=source, + shapes=[], + ) + element_attributes = [ + instance_data.Attribute(name=n, value=str(v)) + for n, v in element.attributes.items() + ] + element_occluded = cast(element.attributes.pop('occluded', None), bool) is True + element_source = element.attributes.pop('source').lower() \ + if element.attributes.get('source', '').lower() in {'auto', 'manual'} else 'manual' + tracks[track_id]['elements'][element.label].shapes.append(instance_data.TrackedShape( + type=shapes[element.type], + frame=frame_number, + occluded=element_occluded, + outside=element_outside, + keyframe=keyframe, + points=element.points, + z_order=element.z_order, + source=element_source, + attributes=element_attributes, + )) elif ann.type == datum_annotation.AnnotationType.label: instance_data.add_tag(instance_data.Tag( diff --git a/cvat/apps/dataset_manager/formats/cvat.py b/cvat/apps/dataset_manager/formats/cvat.py index b08531b2d6e5..f5e7ba6f91bd 100644 --- a/cvat/apps/dataset_manager/formats/cvat.py +++ b/cvat/apps/dataset_manager/formats/cvat.py @@ -1052,7 +1052,10 @@ def dump_track(idx, track): elements=[], ) for element in shape.elements] } - if isinstance(annotations, ProjectData): track['task_id'] = shape.task_id + if isinstance(annotations, ProjectData): + track['task_id'] = shape.task_id + for element in track['elements']: + element.task_id = shape.task_id dump_track(counter, annotations.Track(**track)) counter += 1 diff --git a/cvat/apps/engine/tests/test_rest_api_3D.py b/cvat/apps/engine/tests/test_rest_api_3D.py index 35fe7bf2d4f2..92e158301a01 100644 --- a/cvat/apps/engine/tests/test_rest_api_3D.py +++ b/cvat/apps/engine/tests/test_rest_api_3D.py @@ -748,6 +748,6 @@ def test_api_v2_export_dataset(self): content = io.BytesIO(b"".join(response.streaming_content)) with open(file_name, "wb") as f: f.write(content.getvalue()) - self.assertEqual(osp.exists(file_name), edata['file_exists']) - self._check_dump_content(content, task_ann_prev.data, format_name,related_files=False) + self.assertEqual(osp.exists(file_name), edata['file_exists']) + self._check_dump_content(content, task_ann_prev.data, format_name,related_files=False) From dd849f36866310bfea5e8675ea9bd8de53cf3507 Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Fri, 23 Sep 2022 20:48:26 +0300 Subject: [PATCH 21/34] Fix tests --- tests/python/rest_api/test_projects.py | 28 +++++++++++++++----------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/tests/python/rest_api/test_projects.py b/tests/python/rest_api/test_projects.py index 853921fcdbc0..0e5b16158215 100644 --- a/tests/python/rest_api/test_projects.py +++ b/tests/python/rest_api/test_projects.py @@ -349,23 +349,27 @@ def test_can_import_dataset_in_org(self, admin_user): self._test_import_project(admin_user, project_id, 'CVAT 1.1', import_data) - def test_can_export_and_import_dataset_with_skeletons(self, admin_user): + @pytest.mark.usefixtures("changedb") + @pytest.mark.usefixtures("restore_cvat_data") + @pytest.mark.parametrize('export_format', ('COCO Keypoints 1.0', 'CVAT for images 1.1', 'CVAT for video 1.1')) + def test_can_export_and_import_dataset_with_skeletons(self, export_format): project_id = 5 + username = 'admin1' - export_formats = ["COCO Keypoints 1.0", "CVAT for images 1.1", "CVAT for video 1.1"] - import_formats = ["COCO Keypoints 1.0", "CVAT 1.1", "CVAT 1.1"] + response = self._test_export_project(username, project_id, export_format) - for export_format, import_format in zip(export_formats, import_formats): - response = self._test_export_project(admin_user, project_id, export_format) - - tmp_file = io.BytesIO(response.data) - tmp_file.name = 'dataset.zip' + tmp_file = io.BytesIO(response.data) + tmp_file.name = 'dataset.zip' - import_data = { - 'dataset_file': tmp_file, - } + import_data = { + 'dataset_file': tmp_file, + } - self._test_import_project(admin_user, project_id, import_format, import_data) + if export_format == 'COCO Keypoints 1.0': + import_format = export_format + else: + import_format = 'CVAT 1.1' + self._test_import_project(username, project_id, import_format, import_data) def _test_can_get_project_backup(self, username, pid, **kwargs): for _ in range(30): From 9f83cd7eea887c053211e92ec550c6e37176ebf9 Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Fri, 23 Sep 2022 23:23:29 +0300 Subject: [PATCH 22/34] Add tests --- tests/python/rest_api/test_projects.py | 28 ++++++++++++++++---------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/tests/python/rest_api/test_projects.py b/tests/python/rest_api/test_projects.py index 0e5b16158215..ba4e177b96f8 100644 --- a/tests/python/rest_api/test_projects.py +++ b/tests/python/rest_api/test_projects.py @@ -349,27 +349,33 @@ def test_can_import_dataset_in_org(self, admin_user): self._test_import_project(admin_user, project_id, 'CVAT 1.1', import_data) - @pytest.mark.usefixtures("changedb") - @pytest.mark.usefixtures("restore_cvat_data") - @pytest.mark.parametrize('export_format', ('COCO Keypoints 1.0', 'CVAT for images 1.1', 'CVAT for video 1.1')) - def test_can_export_and_import_dataset_with_skeletons(self, export_format): + def test_can_export_and_import_dataset_with_skeletons_cvat_for_images(self): project_id = 5 - username = 'admin1' + username = 'admin2' - response = self._test_export_project(username, project_id, export_format) + response = self._test_export_project(username, project_id, 'CVAT for images 1.1') tmp_file = io.BytesIO(response.data) tmp_file.name = 'dataset.zip' + import_data = { + 'dataset_file': tmp_file, + } + + self._test_import_project(username, project_id, 'CVAT 1.1', import_data) + + def test_can_export_and_import_dataset_with_skeletons_cvat_for_video(self): + project_id = 5 + username = 'admin2' + + response = self._test_export_project(username, project_id, 'CVAT for video 1.1') + tmp_file = io.BytesIO(response.data) + tmp_file.name = 'dataset.zip' import_data = { 'dataset_file': tmp_file, } - if export_format == 'COCO Keypoints 1.0': - import_format = export_format - else: - import_format = 'CVAT 1.1' - self._test_import_project(username, project_id, import_format, import_data) + self._test_import_project(username, project_id, 'CVAT 1.1', import_data) def _test_can_get_project_backup(self, username, pid, **kwargs): for _ in range(30): From 7fa94e7b61cba669d80a17d6de396c3ecaf59ada Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Fri, 23 Sep 2022 23:37:38 +0300 Subject: [PATCH 23/34] Small fix --- cvat/apps/dataset_manager/bindings.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cvat/apps/dataset_manager/bindings.py b/cvat/apps/dataset_manager/bindings.py index cf3dfdd18b61..b9acd19d4a4a 100644 --- a/cvat/apps/dataset_manager/bindings.py +++ b/cvat/apps/dataset_manager/bindings.py @@ -1101,9 +1101,9 @@ def _load_user_info(meta: dict): def _read_cvat_anno(self, cvat_frame_anno: Union[ProjectData.Frame, TaskData.Frame], labels: list): categories = self.categories() label_cat = categories[datum_annotation.AnnotationType.label] - def map_label(name): return label_cat.find(name)[0] + def map_label(name, parent=''): return label_cat.find(name, parent)[0] label_attrs = { - label['name']: label['attributes'] + label.get('parent', '') + label['name']: label['attributes'] for _, label in labels } @@ -1198,9 +1198,9 @@ def _make_image(i, **kwargs): def _read_cvat_anno(self, cvat_frame_anno: TaskData.Frame, labels: list): categories = self.categories() label_cat = categories[datum_annotation.AnnotationType.label] - def map_label(name, parent=""): return label_cat.find(name, parent)[0] + def map_label(name, parent=''): return label_cat.find(name, parent)[0] label_attrs = { - label.get("parent", "") + label['name']: label['attributes'] + label.get('parent', '') + label['name']: label['attributes'] for _, label in labels } From a88aeaf188391f076d18ce8a66d939c1a25c176d Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Sun, 25 Sep 2022 19:36:49 +0300 Subject: [PATCH 24/34] Add test for COCO Keypoints --- tests/python/rest_api/test_projects.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/python/rest_api/test_projects.py b/tests/python/rest_api/test_projects.py index ba4e177b96f8..27f30d16d320 100644 --- a/tests/python/rest_api/test_projects.py +++ b/tests/python/rest_api/test_projects.py @@ -349,6 +349,20 @@ def test_can_import_dataset_in_org(self, admin_user): self._test_import_project(admin_user, project_id, 'CVAT 1.1', import_data) + def test_can_export_and_import_dataset_with_skeletons_coco_keypoints(self): + project_id = 5 + username = 'admin2' + + response = self._test_export_project(username, project_id, 'COCO Keypoints 1.0') + + tmp_file = io.BytesIO(response.data) + tmp_file.name = 'dataset.zip' + import_data = { + 'dataset_file': tmp_file, + } + + self._test_import_project(username, project_id, 'COCO Keypoints 1.0', import_data) + def test_can_export_and_import_dataset_with_skeletons_cvat_for_images(self): project_id = 5 username = 'admin2' From 39ed8dfbd0088cc160f44edc7acfbe8005870ddf Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Sun, 25 Sep 2022 21:11:30 +0300 Subject: [PATCH 25/34] Fix Pylint --- tests/python/shared/fixtures/data.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/python/shared/fixtures/data.py b/tests/python/shared/fixtures/data.py index cf15a0d21a38..b40dc830afc6 100644 --- a/tests/python/shared/fixtures/data.py +++ b/tests/python/shared/fixtures/data.py @@ -237,9 +237,9 @@ def check(user_id, org_id): @pytest.fixture(scope='session') def find_job_staff_user(is_job_staff): - def find(jobs, users, is_staff, wo_jobs=[]): + def find(jobs, users, is_staff, wo_jobs=None): for job in jobs: - if job['id'] in wo_jobs: + if wo_jobs is not None and job['id'] in wo_jobs: continue for user in users: if is_staff == is_job_staff(user['id'], job['id']): @@ -249,9 +249,9 @@ def find(jobs, users, is_staff, wo_jobs=[]): @pytest.fixture(scope='session') def find_task_staff_user(is_task_staff): - def find(tasks, users, is_staff, wo_tasks=[]): + def find(tasks, users, is_staff, wo_tasks=None): for task in tasks: - if task['id'] in wo_tasks: + if wo_tasks is not None and task['id'] in wo_tasks: continue for user in users: if is_staff == is_task_staff(user['id'], task['id']): From 4139a1a32476b7ce279ee9125a25fe9238918e22 Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Sun, 25 Sep 2022 22:06:53 +0300 Subject: [PATCH 26/34] Fix sdk tests --- tests/python/sdk/test_jobs.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/python/sdk/test_jobs.py b/tests/python/sdk/test_jobs.py index 429236833442..4b009333bf2c 100644 --- a/tests/python/sdk/test_jobs.py +++ b/tests/python/sdk/test_jobs.py @@ -105,7 +105,8 @@ def test_can_download_dataset(self, fxt_new_task: Task, include_images: bool): task_id = fxt_new_task.id path = str(self.tmp_path / f"task_{task_id}-cvat.zip") - job = self.client.jobs.retrieve(task_id) + job_id = fxt_new_task.get_jobs()[0].id + job = self.client.jobs.retrieve(job_id) job.export_dataset( format_name="CVAT for images 1.1", filename=path, From 395b5f5d8910cae746fbf5dec6384e05791da34a Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Mon, 26 Sep 2022 09:23:10 +0300 Subject: [PATCH 27/34] Small fix --- tests/python/rest_api/test_tasks.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/tests/python/rest_api/test_tasks.py b/tests/python/rest_api/test_tasks.py index 7421fe71717d..e7e04d3db852 100644 --- a/tests/python/rest_api/test_tasks.py +++ b/tests/python/rest_api/test_tasks.py @@ -211,7 +211,16 @@ def test_can_create_task_with_skeleton(self): "type": "points" } ], - "svg": "" + "svg": "" \ + "" \ + "" \ + "" \ + "" } ] } From f20c915e3a2424078e3f75b935b94d9f70ee328e Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Mon, 26 Sep 2022 11:11:43 +0300 Subject: [PATCH 28/34] Update documentation --- .../manual/advanced/formats/format-cvat.md | 4 +- .../en/docs/manual/advanced/xml_format.md | 146 +++++++++++++++++- 2 files changed, 146 insertions(+), 4 deletions(-) diff --git a/site/content/en/docs/manual/advanced/formats/format-cvat.md b/site/content/en/docs/manual/advanced/formats/format-cvat.md index 0d9ab7dab444..f8c282865125 100644 --- a/site/content/en/docs/manual/advanced/formats/format-cvat.md +++ b/site/content/en/docs/manual/advanced/formats/format-cvat.md @@ -9,10 +9,10 @@ This is the native CVAT annotation format. It supports all CVAT annotations features, so it can be used to make data backups. - supported annotations CVAT for Images: Rectangles, Polygons, Polylines, - Points, Cuboids, Tags, Tracks + Points, Cuboids, Skeletons, Tags, Tracks - supported annotations CVAT for Videos: Rectangles, Polygons, Polylines, - Points, Cuboids, Tracks + Points, Cuboids, Skeletons, Tracks - attributes are supported diff --git a/site/content/en/docs/manual/advanced/xml_format.md b/site/content/en/docs/manual/advanced/xml_format.md index 36abb4095a71..1a95b28749f8 100644 --- a/site/content/en/docs/manual/advanced/xml_format.md +++ b/site/content/en/docs/manual/advanced/xml_format.md @@ -41,6 +41,7 @@ In annotation mode each image tag has `width` and `height` attributes for the sa String: attribute name + String: any, bbox, cuboid, cuboid_3d, ellipse, polygon, polyline, points, skeleton, tag Boolean: mutable (allow different values between frames) String: select, checkbox, radio, number, text String: default value @@ -49,6 +50,8 @@ ex. value 2 ex. value 3 + String: label representation in svg, only for skeletons + String: label parent name, only for skeletons @@ -81,7 +84,7 @@ On each image it is possible to have many different objects. Each object can hav If an annotation task is created with `z_order` flag then each object will have `z_order` attribute which is used to draw objects properly when they are intersected (if `z_order` is bigger the object is closer to camera). In previous versions of the format only `box` shape was available. -In later releases `polygon`, `polyline`, `points` and `tags` were added. Please see below for more details: +In later releases `polygon`, `polyline`, `points`, `skeletons` and `tags` were added. Please see below for more details: ```xml @@ -117,6 +120,14 @@ In later releases `polygon`, `polyline`, `points` and `tags` were added. Please String: the attribute value ... + + + String: the attribute value + + ... + String: the attribute value + ... + ... ... @@ -161,6 +172,34 @@ Example: + + + + @@ -190,6 +229,14 @@ Example: + + + + + + + + ``` @@ -206,7 +253,7 @@ cloned for each location (a known redundancy). ... - + String: the attribute value ... @@ -222,6 +269,17 @@ cloned for each location (a known redundancy). ... + + + + ... + + + + ... + + ... + ... ``` @@ -254,6 +312,34 @@ Example: + + + + @@ -288,5 +374,61 @@ Example: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ``` From b33527fdf4db3a3fca64143bcca1270934de2151 Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Mon, 26 Sep 2022 17:15:52 +0300 Subject: [PATCH 29/34] Update Changelog --- CHANGELOG.md | 1 + cvat/apps/dataset_manager/bindings.py | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ccb7951f8cce..e715b7c70b81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 non-ascii paths while adding files from "Connected file share" (issue #4428) - Removed unnecessary volumes defined in docker-compose.serverless.yml () +- Project import with skeletons () ### Security - TDB diff --git a/cvat/apps/dataset_manager/bindings.py b/cvat/apps/dataset_manager/bindings.py index 5eed00eb6dd3..1f1177b8c840 100644 --- a/cvat/apps/dataset_manager/bindings.py +++ b/cvat/apps/dataset_manager/bindings.py @@ -1641,6 +1641,7 @@ def import_dm_annotations(dm_dataset: dm.Dataset, instance_data: Union[TaskData, source=source, attributes=attributes, ) + tracks[track_id]['shapes'].append(track) if ann.type == dm.AnnotationType.skeleton: From a178140726a323684c3a7271a0ace4e408754038 Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Mon, 26 Sep 2022 18:08:01 +0300 Subject: [PATCH 30/34] Some fixes --- cvat/apps/engine/serializers.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/cvat/apps/engine/serializers.py b/cvat/apps/engine/serializers.py index 103f9a25e28a..f81991e361d2 100644 --- a/cvat/apps/engine/serializers.py +++ b/cvat/apps/engine/serializers.py @@ -816,12 +816,13 @@ def update_labels(labels, parent_label=None): sublabels = label.pop('sublabels', []) svg = label.pop('svg', '') db_label = LabelSerializer.update_instance(label, instance, parent_label) - update_labels(sublabels, parent_label=db_label) + if not label.get('deleted'): + update_labels(sublabels, parent_label=db_label) - if label.get('id') is None and db_label.type == str(models.LabelType.SKELETON): - for db_sublabel in list(db_label.sublabels.all()): - svg = svg.replace(f'data-label-name="{db_sublabel.name}"', f'data-label-id="{db_sublabel.id}"') - models.Skeleton.objects.create(root=db_label, svg=svg) + if label.get('id') is None and db_label.type == str(models.LabelType.SKELETON): + for db_sublabel in list(db_label.sublabels.all()): + svg = svg.replace(f'data-label-name="{db_sublabel.name}"', f'data-label-id="{db_sublabel.id}"') + models.Skeleton.objects.create(root=db_label, svg=svg) update_labels(labels) From caa3ea4ae9aa58486a4e5949af773a774c34b3e4 Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Tue, 27 Sep 2022 08:37:24 +0300 Subject: [PATCH 31/34] Small fix --- tests/python/rest_api/test_projects.py | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/tests/python/rest_api/test_projects.py b/tests/python/rest_api/test_projects.py index 27f30d16d320..cfe77fcfa6cc 100644 --- a/tests/python/rest_api/test_projects.py +++ b/tests/python/rest_api/test_projects.py @@ -349,11 +349,10 @@ def test_can_import_dataset_in_org(self, admin_user): self._test_import_project(admin_user, project_id, 'CVAT 1.1', import_data) - def test_can_export_and_import_dataset_with_skeletons_coco_keypoints(self): + def test_can_export_and_import_dataset_with_skeletons_coco_keypoints(self, admin_user): project_id = 5 - username = 'admin2' - response = self._test_export_project(username, project_id, 'COCO Keypoints 1.0') + response = self._test_export_project(admin_user, project_id, 'COCO Keypoints 1.0') tmp_file = io.BytesIO(response.data) tmp_file.name = 'dataset.zip' @@ -361,13 +360,12 @@ def test_can_export_and_import_dataset_with_skeletons_coco_keypoints(self): 'dataset_file': tmp_file, } - self._test_import_project(username, project_id, 'COCO Keypoints 1.0', import_data) + self._test_import_project(admin_user, project_id, 'COCO Keypoints 1.0', import_data) - def test_can_export_and_import_dataset_with_skeletons_cvat_for_images(self): + def test_can_export_and_import_dataset_with_skeletons_cvat_for_images(self, admin_user): project_id = 5 - username = 'admin2' - response = self._test_export_project(username, project_id, 'CVAT for images 1.1') + response = self._test_export_project(admin_user, project_id, 'CVAT for images 1.1') tmp_file = io.BytesIO(response.data) tmp_file.name = 'dataset.zip' @@ -375,13 +373,12 @@ def test_can_export_and_import_dataset_with_skeletons_cvat_for_images(self): 'dataset_file': tmp_file, } - self._test_import_project(username, project_id, 'CVAT 1.1', import_data) + self._test_import_project(admin_user, project_id, 'CVAT 1.1', import_data) - def test_can_export_and_import_dataset_with_skeletons_cvat_for_video(self): + def test_can_export_and_import_dataset_with_skeletons_cvat_for_video(self, admin_user): project_id = 5 - username = 'admin2' - response = self._test_export_project(username, project_id, 'CVAT for video 1.1') + response = self._test_export_project(admin_user, project_id, 'CVAT for video 1.1') tmp_file = io.BytesIO(response.data) tmp_file.name = 'dataset.zip' @@ -389,7 +386,7 @@ def test_can_export_and_import_dataset_with_skeletons_cvat_for_video(self): 'dataset_file': tmp_file, } - self._test_import_project(username, project_id, 'CVAT 1.1', import_data) + self._test_import_project(admin_user, project_id, 'CVAT 1.1', import_data) def _test_can_get_project_backup(self, username, pid, **kwargs): for _ in range(30): @@ -422,7 +419,7 @@ def test_admin_can_get_project_backup_and_create_project_by_backup(self, admin_u @pytest.mark.usefixtures('changedb') class TestPatchProjectLabel: def test_admin_can_delete_label(self, projects): - project = deepcopy(list(projects)[1]) + project = deepcopy(list(projects)[0]) labels = project['labels'][0] labels.update({'deleted': True}) response = patch_method('admin1', f'/projects/{project["id"]}', {'labels': [labels]}) From d7db4fc76bab416dac1f6a8c7c48fdb709b21793 Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Tue, 27 Sep 2022 10:04:41 +0300 Subject: [PATCH 32/34] Fix test --- tests/python/rest_api/test_projects.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/python/rest_api/test_projects.py b/tests/python/rest_api/test_projects.py index cfe77fcfa6cc..93435cda73eb 100644 --- a/tests/python/rest_api/test_projects.py +++ b/tests/python/rest_api/test_projects.py @@ -419,7 +419,7 @@ def test_admin_can_get_project_backup_and_create_project_by_backup(self, admin_u @pytest.mark.usefixtures('changedb') class TestPatchProjectLabel: def test_admin_can_delete_label(self, projects): - project = deepcopy(list(projects)[0]) + project = deepcopy(list(projects)[1]) labels = project['labels'][0] labels.update({'deleted': True}) response = patch_method('admin1', f'/projects/{project["id"]}', {'labels': [labels]}) From 8400912ef0d6f21951775d9383cfdc23ac51f7de Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Tue, 27 Sep 2022 10:09:28 +0300 Subject: [PATCH 33/34] Add test to remove skeleton label --- tests/python/rest_api/test_projects.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/python/rest_api/test_projects.py b/tests/python/rest_api/test_projects.py index 93435cda73eb..dfce180a8cd3 100644 --- a/tests/python/rest_api/test_projects.py +++ b/tests/python/rest_api/test_projects.py @@ -426,6 +426,14 @@ def test_admin_can_delete_label(self, projects): assert response.status_code == HTTPStatus.OK assert len(response.json()['labels']) == len(project['labels']) - 1 + def test_admin_can_delete_skeleton_label(self, projects): + project = deepcopy(list(projects)[0]) + labels = project['labels'][0] + labels.update({'deleted': True}) + response = patch_method('admin1', f'/projects/{project["id"]}', {'labels': [labels]}) + assert response.status_code == HTTPStatus.OK + assert len(response.json()['labels']) == len(project['labels']) - 4 + def test_admin_can_rename_label(self, projects): project = deepcopy(list(projects)[0]) labels = project['labels'][0] From 900af1a2587a9916c34046ec3273dc0b71d2ceff Mon Sep 17 00:00:00 2001 From: yasakova-anastasia Date: Wed, 28 Sep 2022 11:25:56 +0300 Subject: [PATCH 34/34] Remove useless changes --- site/content/en/docs/manual/advanced/xml_format.md | 1 - 1 file changed, 1 deletion(-) diff --git a/site/content/en/docs/manual/advanced/xml_format.md b/site/content/en/docs/manual/advanced/xml_format.md index 173fe3a3df2e..97a7ddd04660 100644 --- a/site/content/en/docs/manual/advanced/xml_format.md +++ b/site/content/en/docs/manual/advanced/xml_format.md @@ -42,7 +42,6 @@ In annotation mode each image tag has `width` and `height` attributes for the sa String: attribute name - String: any, bbox, cuboid, cuboid_3d, ellipse, polygon, polyline, points, skeleton, tag Boolean: mutable (allow different values between frames) String: select, checkbox, radio, number, text String: default value