From 5274072b796c6c5c6b233b077e9dc1b281cb637c Mon Sep 17 00:00:00 2001 From: Maxim Zhiltsov Date: Fri, 13 Mar 2020 13:24:28 +0300 Subject: [PATCH 1/6] Fix labelme filenames --- cvat/apps/annotation/labelme.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cvat/apps/annotation/labelme.py b/cvat/apps/annotation/labelme.py index 0128ca739226..50bd4053215d 100644 --- a/cvat/apps/annotation/labelme.py +++ b/cvat/apps/annotation/labelme.py @@ -107,13 +107,13 @@ def dump_frame_anno(frame_annotation): return ET.tostring(root_elem, encoding='unicode', pretty_print=True) def dump_as_labelme_annotation(file_object, annotations): + import os.path as osp from zipfile import ZipFile, ZIP_DEFLATED with ZipFile(file_object, 'w', compression=ZIP_DEFLATED) as output_zip: for frame_annotation in annotations.group_by_frame(): xml_data = dump_frame_anno(frame_annotation) - filename = frame_annotation.name - filename = filename[ : filename.rfind('.')] + '.xml' + filename = osp.splitext(frame_annotation.name)[0] + '.xml' output_zip.writestr(filename, xml_data) def parse_xml_annotations(xml_data, annotations, input_zip): From 12e0fa16c2970c761bc65a9ec7c8c7690c0065c6 Mon Sep 17 00:00:00 2001 From: Maxim Zhiltsov Date: Fri, 13 Mar 2020 15:38:07 +0300 Subject: [PATCH 2/6] Change module path --- cvat/apps/annotation/labelme.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cvat/apps/annotation/labelme.py b/cvat/apps/annotation/labelme.py index 50bd4053215d..baacb388ef01 100644 --- a/cvat/apps/annotation/labelme.py +++ b/cvat/apps/annotation/labelme.py @@ -117,7 +117,7 @@ def dump_as_labelme_annotation(file_object, annotations): output_zip.writestr(filename, xml_data) def parse_xml_annotations(xml_data, annotations, input_zip): - from cvat.apps.annotation.coco import mask_to_polygon + from datumaro.util.mask_tools import mask_to_polygons from io import BytesIO from lxml import etree as ET import numpy as np @@ -229,7 +229,7 @@ def parse_attributes(attributes_string): mask = input_zip.read(osp.join(_MASKS_DIR, mask_file)) mask = np.asarray(Image.open(BytesIO(mask)).convert('L')) mask = (mask != 0) - polygons = mask_to_polygon(mask) + polygons = mask_to_polygons(mask) for polygon in polygons: ann_items.append(annotations.LabeledShape( From 7b62273fe1c515b1a46a1b911ca9f5d4827db3c5 Mon Sep 17 00:00:00 2001 From: Maxim Zhiltsov Date: Fri, 13 Mar 2020 15:38:24 +0300 Subject: [PATCH 3/6] Add tests for LabelMe --- cvat/apps/engine/tests/test_rest_api.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cvat/apps/engine/tests/test_rest_api.py b/cvat/apps/engine/tests/test_rest_api.py index d959f71c5b51..d0344a5b3918 100644 --- a/cvat/apps/engine/tests/test_rest_api.py +++ b/cvat/apps/engine/tests/test_rest_api.py @@ -2711,6 +2711,12 @@ def _get_initial_annotation(annotation_format): elif annotation_format == "MOT CSV 1.0": annotations["tracks"] = rectangle_tracks_wo_attrs + elif annotation_format == "LabelMe ZIP 1.0": + annotations["shapes"] = rectangle_shapes_with_attrs + \ + rectangle_shapes_wo_attrs + \ + polygon_shapes_with_attrs + \ + polygon_shapes_wo_attrs + return annotations response = self._get_annotation_formats(annotator) From d690e063ff2eff7351430fca6153219633c111b0 Mon Sep 17 00:00:00 2001 From: Maxim Zhiltsov Date: Fri, 13 Mar 2020 16:14:57 +0300 Subject: [PATCH 4/6] Update test --- cvat/apps/engine/tests/test_rest_api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cvat/apps/engine/tests/test_rest_api.py b/cvat/apps/engine/tests/test_rest_api.py index d0344a5b3918..aead1fc7b5f3 100644 --- a/cvat/apps/engine/tests/test_rest_api.py +++ b/cvat/apps/engine/tests/test_rest_api.py @@ -2711,7 +2711,7 @@ def _get_initial_annotation(annotation_format): elif annotation_format == "MOT CSV 1.0": annotations["tracks"] = rectangle_tracks_wo_attrs - elif annotation_format == "LabelMe ZIP 1.0": + elif annotation_format == "LabelMe ZIP 3.0 for images": annotations["shapes"] = rectangle_shapes_with_attrs + \ rectangle_shapes_wo_attrs + \ polygon_shapes_with_attrs + \ From f941fc8f4eba7e2fc947e2cc6fca2da142493b29 Mon Sep 17 00:00:00 2001 From: Zhiltsov Max Date: Mon, 16 Mar 2020 15:54:47 +0300 Subject: [PATCH 5/6] Fix test --- cvat/apps/engine/tests/test_rest_api.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/cvat/apps/engine/tests/test_rest_api.py b/cvat/apps/engine/tests/test_rest_api.py index aead1fc7b5f3..f3da0410623c 100644 --- a/cvat/apps/engine/tests/test_rest_api.py +++ b/cvat/apps/engine/tests/test_rest_api.py @@ -2655,6 +2655,15 @@ def _get_initial_annotation(annotation_format): "points": [20.0, 0.1, 10, 3.22, 4, 7, 10, 30, 1, 2, 4.44, 5.55], "type": "polygon", "occluded": True + }, + { + "frame": 2, + "label_id": task["labels"][1]["id"], + "group": 1, + "attributes": [], + "points": [4, 7, 10, 30, 4, 5.55], + "type": "polygon", + "occluded": False }] tags_wo_attrs = [{ @@ -2714,8 +2723,8 @@ def _get_initial_annotation(annotation_format): elif annotation_format == "LabelMe ZIP 3.0 for images": annotations["shapes"] = rectangle_shapes_with_attrs + \ rectangle_shapes_wo_attrs + \ - polygon_shapes_with_attrs + \ - polygon_shapes_wo_attrs + polygon_shapes_wo_attrs + \ + polygon_shapes_with_attrs return annotations From 931546ae905b3555f9a853beb94ca541163b6db5 Mon Sep 17 00:00:00 2001 From: Maxim Zhiltsov Date: Tue, 17 Mar 2020 14:49:29 +0300 Subject: [PATCH 6/6] Add line in changelog --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 08adf7f8d2a6..ce3333b4856f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - ### Changed -- +- ### Deprecated - @@ -18,7 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - ### Fixed -- +- File names in LabelMe format export are no more truncated ([#1259](https://github.com/opencv/cvat/issues/1259)) ### Security - Bump acorn from 6.3.0 to 6.4.1 in /cvat-ui ([#1270](https://github.com/opencv/cvat/pull/1270))