From 52c9b5fb081a88f85f881abd03adbe60ebd5ec2d Mon Sep 17 00:00:00 2001 From: Nikita Manovich Date: Tue, 10 Sep 2019 11:41:13 +0300 Subject: [PATCH 01/12] Changed version number (0, 5, 'final', 0). --- cvat/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cvat/__init__.py b/cvat/__init__.py index 35efa70d25c3..b962ba74c717 100644 --- a/cvat/__init__.py +++ b/cvat/__init__.py @@ -5,6 +5,6 @@ from cvat.utils.version import get_version -VERSION = (0, 5, 0, 'alpha', 0) +VERSION = (0, 5, 0, 'final', 0) __version__ = get_version(VERSION) From 0967a74b9cccab899f122a695b330f00ef4dbf2a Mon Sep 17 00:00:00 2001 From: Nikita Manovich Date: Tue, 10 Sep 2019 12:02:32 +0300 Subject: [PATCH 02/12] Updated changelog file. --- CHANGELOG.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 198db453cb59..de92930e755d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [Unreleased] +## [0.5.0] - 2019-10-12 ### Added - A converter to YOLO format - Installation guide @@ -20,13 +20,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added in a command line model manager tester - Ability to dump/load annotations in several formats from UI (CVAT, Pascal VOC, YOLO, MS COCO, png mask, TFRecord) - Auth for REST API (api/v1/auth/): login, logout, register, ... +- Preview for the new CVAT UI (dashboard only) is available: http://localhost:9080/ ### Changed - Outside and keyframe buttons in the side panel for all interpolation shapes (they were only for boxes before) -- Improved error messages on client side (#511) - -### Deprecated -- +- Improved error messages on the client side (#511) ### Removed - "Flip images" has been removed. UI now contains rotation features. @@ -49,7 +47,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Creating a video task with 0 overlap ### Security -- +- Upgraded Django, djangorestframework, and other packages ## [0.4.2] - 2019-06-03 ### Fixed From fda7c1a2227ba376c630d2aec2e3e969c1c16508 Mon Sep 17 00:00:00 2001 From: Andrey Zhavoronkov <41117609+azhavoro@users.noreply.github.com> Date: Tue, 10 Sep 2019 15:50:19 +0300 Subject: [PATCH 03/12] fixed default attribute values for tracked shapes (#703) --- cvat/apps/engine/annotation.py | 47 +++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/cvat/apps/engine/annotation.py b/cvat/apps/engine/annotation.py index fb152076b87f..acb9a6d5e349 100644 --- a/cvat/apps/engine/annotation.py +++ b/cvat/apps/engine/annotation.py @@ -21,6 +21,14 @@ from .log import slogger from . import serializers +"""dot.notation access to dictionary attributes""" +class dotdict(OrderedDict): + __getattr__ = OrderedDict.get + __setattr__ = OrderedDict.__setitem__ + __delattr__ = OrderedDict.__delitem__ + __eq__ = lambda self, other: self.id == other.id + __hash__ = lambda self: self.id + class PatchAction(str, Enum): CREATE = "create" UPDATE = "update" @@ -142,15 +150,6 @@ def bulk_create(db_model, objects, flt_param): return [] def _merge_table_rows(rows, keys_for_merge, field_id): - """dot.notation access to dictionary attributes""" - from collections import OrderedDict - class dotdict(OrderedDict): - __getattr__ = OrderedDict.get - __setattr__ = OrderedDict.__setitem__ - __delattr__ = OrderedDict.__delitem__ - __eq__ = lambda self, other: self.id == other.id - __hash__ = lambda self: self.id - # It is necessary to keep a stable order of original rows # (e.g. for tracked boxes). Otherwise prev_box.frame can be bigger # than next_box.frame. @@ -202,12 +201,16 @@ def __init__(self, pk, user): "all": OrderedDict(), } for db_attr in db_label.attributespec_set.all(): + default_value = dotdict([ + ('spec_id', db_attr.id), + ('value', db_attr.default_value), + ]) if db_attr.mutable: - self.db_attributes[db_label.id]["mutable"][db_attr.id] = db_attr + self.db_attributes[db_label.id]["mutable"][db_attr.id] = default_value else: - self.db_attributes[db_label.id]["immutable"][db_attr.id] = db_attr + self.db_attributes[db_label.id]["immutable"][db_attr.id] = default_value - self.db_attributes[db_label.id]["all"][db_attr.id] = db_attr + self.db_attributes[db_label.id]["all"][db_attr.id] = default_value def reset(self): self.ir_data.reset() @@ -458,13 +461,13 @@ def delete(self, data=None): self._commit() @staticmethod - def _extend_attributes(attributeval_set, attribute_specs): + def _extend_attributes(attributeval_set, default_attribute_values): shape_attribute_specs_set = set(attr.spec_id for attr in attributeval_set) - for db_attr_spec in attribute_specs: - if db_attr_spec.id not in shape_attribute_specs_set: - attributeval_set.append(OrderedDict([ - ('spec_id', db_attr_spec.id), - ('value', db_attr_spec.default_value), + for db_attr in default_attribute_values: + if db_attr.spec_id not in shape_attribute_specs_set: + attributeval_set.append(dotdict([ + ('spec_id', db_attr.spec_id), + ('value', db_attr.value), ])) def _init_tags_from_db(self): @@ -600,12 +603,16 @@ def _init_tracks_from_db(self): self._extend_attributes(db_track.labeledtrackattributeval_set, self.db_attributes[db_track.label_id]["immutable"].values()) + default_attribute_values = self.db_attributes[db_track.label_id]["mutable"].values() for db_shape in db_track["trackedshape_set"]: db_shape["trackedshapeattributeval_set"] = list( set(db_shape["trackedshapeattributeval_set"]) ) - self._extend_attributes(db_shape["trackedshapeattributeval_set"], - self.db_attributes[db_track.label_id]["mutable"].values()) + # in case of trackedshapes need to interpolate attriute values and extend it + # by previous shape attribute values (not default values) + self._extend_attributes(db_shape["trackedshapeattributeval_set"], default_attribute_values) + default_attribute_values = db_shape["trackedshapeattributeval_set"] + serializer = serializers.LabeledTrackSerializer(db_tracks, many=True) self.ir_data.tracks = serializer.data From eacfab792039ea105603ac7636e966392794d517 Mon Sep 17 00:00:00 2001 From: Nikita Manovich Date: Thu, 17 Oct 2019 12:59:55 +0300 Subject: [PATCH 04/12] Updated CHANGELOG with information about Zenodo --- CHANGELOG.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index de92930e755d..fb1264eeee0a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [0.5.0] - 2019-10-12 +## [0.5.1] - 2019-10-17 +### Added +- Integration with Zenodo.org (DOI) + +## [0.5.0] - 2019-09-12 ### Added - A converter to YOLO format - Installation guide From 69bc32b07fb9de919bfdb0d64b7d4c3e4c8b1c26 Mon Sep 17 00:00:00 2001 From: Nikita Manovich <40690625+nmanovic@users.noreply.github.com> Date: Thu, 17 Oct 2019 13:01:44 +0300 Subject: [PATCH 05/12] Updated CHANGELOG with information about Zenodo (#777) --- CHANGELOG.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index de92930e755d..fb1264eeee0a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [0.5.0] - 2019-10-12 +## [0.5.1] - 2019-10-17 +### Added +- Integration with Zenodo.org (DOI) + +## [0.5.0] - 2019-09-12 ### Added - A converter to YOLO format - Installation guide From 87a74a7d0d6db226cca253013ba35d6022db751c Mon Sep 17 00:00:00 2001 From: Nikita Manovich Date: Thu, 17 Oct 2019 13:03:28 +0300 Subject: [PATCH 06/12] Updated version of the project. --- cvat/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cvat/__init__.py b/cvat/__init__.py index b962ba74c717..104e7859336a 100644 --- a/cvat/__init__.py +++ b/cvat/__init__.py @@ -5,6 +5,6 @@ from cvat.utils.version import get_version -VERSION = (0, 5, 0, 'final', 0) +VERSION = (0, 5, 1, 'final', 0) __version__ = get_version(VERSION) From 91245843d75f67817647cfe01c14fcde4d14d0b1 Mon Sep 17 00:00:00 2001 From: Boris Sekachev <40690378+bsekachev@users.noreply.github.com> Date: Mon, 16 Dec 2019 18:34:12 +0300 Subject: [PATCH 07/12] Hotfix: fixed skikit-image version (#965) * Fixed skikit-image version * Updated changelog --- CHANGELOG.md | 4 ++++ cvat/requirements/base.txt | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fb1264eeee0a..1b1f9e7b129d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.5.2] - 2019-12-15 +### Fixed +- Frozen version of scikit-image==0.15 in requirements.txt because next releases don't support Python 3.5 + ## [0.5.1] - 2019-10-17 ### Added - Integration with Zenodo.org (DOI) diff --git a/cvat/requirements/base.txt b/cvat/requirements/base.txt index f5ec239e53b1..2f8ecbcd7f6c 100644 --- a/cvat/requirements/base.txt +++ b/cvat/requirements/base.txt @@ -38,7 +38,7 @@ pascal_voc_writer==0.1.4 django-rest-auth[with_social]==0.9.5 cython==0.29.13 matplotlib==3.0.3 -scikit-image>=0.14.0 +scikit-image==0.15.0 tensorflow==1.12.3 django-cors-headers==3.0.2 furl==2.0.0 From 42aad8b56bcce454b99a852af290d4a9208d37d8 Mon Sep 17 00:00:00 2001 From: Nikita Manovich Date: Mon, 16 Dec 2019 18:40:15 +0300 Subject: [PATCH 08/12] Increased CVAT version (0.5.2) --- cvat/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cvat/__init__.py b/cvat/__init__.py index 104e7859336a..9b671a9bf291 100644 --- a/cvat/__init__.py +++ b/cvat/__init__.py @@ -5,6 +5,6 @@ from cvat.utils.version import get_version -VERSION = (0, 5, 1, 'final', 0) +VERSION = (0, 5, 2, 'final', 0) __version__ = get_version(VERSION) From 3ab6ca1c1999365da18a01ff96c5581cee909184 Mon Sep 17 00:00:00 2001 From: Nikita Manovich Date: Thu, 5 Mar 2020 15:30:57 +0300 Subject: [PATCH 09/12] Fixed date in CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a7e98830e78..7bbc45348bac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [0.6.0] - 2020-02-15 +## [0.6.0] - 2020-03-15 ### Added - Server only support for projects. Extend REST API v1 (/api/v1/projects*) - Ability to get basic information about users without admin permissions ([#750](https://github.com/opencv/cvat/issues/750)) From 2f0fe365972d1cc1c9692426e741b82ca6d559f2 Mon Sep 17 00:00:00 2001 From: Andrey Zhavoronkov <41117609+azhavoro@users.noreply.github.com> Date: Fri, 13 Mar 2020 09:45:59 +0300 Subject: [PATCH 10/12] sort frame shapes by z_order (#1258) --- cvat/apps/annotation/annotation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cvat/apps/annotation/annotation.py b/cvat/apps/annotation/annotation.py index 9c805154fe1f..70054255c242 100644 --- a/cvat/apps/annotation/annotation.py +++ b/cvat/apps/annotation/annotation.py @@ -322,7 +322,7 @@ def _get_frame(annotations, shape): annotations = {} data_manager = DataManager(self._annotation_ir) - for shape in data_manager.to_shapes(self._db_task.size): + for shape in sorted(data_manager.to_shapes(self._db_task.size), key=lambda s: s.get("z_order", 0)): _get_frame(annotations, shape).labeled_shapes.append(self._export_labeled_shape(shape)) for tag in self._annotation_ir.tags: From 7b4e99c0e14e13a714fd7ea870f9669a9256a01a Mon Sep 17 00:00:00 2001 From: Nikita Manovich Date: Sun, 15 Mar 2020 16:31:49 +0300 Subject: [PATCH 11/12] Updated CHANGELOG.md --- CHANGELOG.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7bbc45348bac..5067f6df5fa4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,25 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.0.0-beta] - Unreleased +### Added +- + +### Changed +- + +### Deprecated +- + +### Removed +- + +### Fixed +- + +### Security +- + ## [0.6.0] - 2020-03-15 ### Added - Server only support for projects. Extend REST API v1 (/api/v1/projects*) From f629dd3757abe976192a6f4c1aefa1910cf345bd Mon Sep 17 00:00:00 2001 From: Nikita Manovich Date: Sun, 15 Mar 2020 16:34:44 +0300 Subject: [PATCH 12/12] Updated CVAT version. --- cvat/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cvat/__init__.py b/cvat/__init__.py index a30e5d438966..59cc506f09ad 100644 --- a/cvat/__init__.py +++ b/cvat/__init__.py @@ -4,6 +4,6 @@ from cvat.utils.version import get_version -VERSION = (0, 6, 0, 'final', 0) +VERSION = (1, 0, 0, 'alpha', 0) __version__ = get_version(VERSION)