diff --git a/CHANGELOG.md b/CHANGELOG.md index b38365f8..5bd46102 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [1.2.0] - Unreleased ### Added +- Removed Z-Order flag from task creation process - Ability to login into CVAT-UI with token from api/v1/auth/login () - Added layout grids toggling ('ctrl + alt + Enter') - Added password reset functionality () diff --git a/cvat-core/package-lock.json b/cvat-core/package-lock.json index 997f524b..f32ff333 100644 --- a/cvat-core/package-lock.json +++ b/cvat-core/package-lock.json @@ -1,6 +1,6 @@ { "name": "cvat-core", - "version": "3.8.0", + "version": "3.8.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/cvat-core/package.json b/cvat-core/package.json index 5c7b8d48..a74765e0 100644 --- a/cvat-core/package.json +++ b/cvat-core/package.json @@ -1,6 +1,6 @@ { "name": "cvat-core", - "version": "3.8.0", + "version": "3.8.1", "description": "Part of Computer Vision Tool which presents an interface for client-side integration", "main": "babel.config.js", "scripts": { diff --git a/cvat-core/src/session.js b/cvat-core/src/session.js index 320c755d..7aeb03cc 100644 --- a/cvat-core/src/session.js +++ b/cvat-core/src/session.js @@ -824,7 +824,6 @@ *
  • name *
  • assignee *
  • bug_tracker - *
  • z_order *
  • labels *
  • segment_size *
  • overlap @@ -844,7 +843,6 @@ bug_tracker: undefined, overlap: undefined, segment_size: undefined, - z_order: undefined, image_quality: undefined, start_frame: undefined, stop_frame: undefined, @@ -1055,24 +1053,6 @@ data.segment_size = segment; }, }, - /** - * @name zOrder - * @type {boolean} - * @memberof module:API.cvat.classes.Task - * @instance - * @throws {module:API.cvat.exceptions.ArgumentError} - */ - zOrder: { - get: () => data.z_order, - set: (zOrder) => { - if (typeof (zOrder) !== 'boolean') { - throw new ArgumentError( - 'Value must be a boolean', - ); - } - data.z_order = zOrder; - }, - }, /** * @name imageQuality * @type {integer} @@ -1700,7 +1680,6 @@ assignee: this.assignee ? this.assignee.id : null, name: this.name, bug_tracker: this.bugTracker, - z_order: this.zOrder, labels: [...this.labels.map((el) => el.toJSON())], }; @@ -1711,7 +1690,6 @@ const taskSpec = { name: this.name, labels: this.labels.map((el) => el.toJSON()), - z_order: Boolean(this.zOrder), }; if (typeof (this.bugTracker) !== 'undefined') { diff --git a/cvat-core/tests/api/tasks.js b/cvat-core/tests/api/tasks.js index 627bf7e8..d01bb7a2 100644 --- a/cvat-core/tests/api/tasks.js +++ b/cvat-core/tests/api/tasks.js @@ -98,7 +98,6 @@ describe('Feature: save a task', () => { }); result[0].bugTracker = 'newBugTracker'; - result[0].zOrder = true; result[0].name = 'New Task Name'; result[0].save(); @@ -108,7 +107,6 @@ describe('Feature: save a task', () => { }); expect(result[0].bugTracker).toBe('newBugTracker'); - expect(result[0].zOrder).toBe(true); expect(result[0].name).toBe('New Task Name'); }); @@ -161,7 +159,6 @@ describe('Feature: save a task', () => { }], bug_tracker: 'bug tracker value', image_quality: 50, - z_order: true, }); const result = await task.save(); diff --git a/cvat-core/tests/mocks/dummy-data.mock.js b/cvat-core/tests/mocks/dummy-data.mock.js index dd688e14..852a503c 100644 --- a/cvat-core/tests/mocks/dummy-data.mock.js +++ b/cvat-core/tests/mocks/dummy-data.mock.js @@ -165,7 +165,6 @@ const tasksDummyData = { "updated_date": "2019-09-05T14:04:07.569344Z", "overlap": 0, "segment_size": 0, - "z_order": false, "status": "annotation", "labels": [{ "id": 5, @@ -199,7 +198,6 @@ const tasksDummyData = { "updated_date": "2019-07-16T15:51:29.142871+03:00", "overlap": 0, "segment_size": 0, - "z_order": false, "status": "annotation", "labels": [ { @@ -249,7 +247,6 @@ const tasksDummyData = { "updated_date": "2019-07-12T16:43:58.904892+03:00", "overlap": 5, "segment_size": 500, - "z_order": false, "status": "annotation", "labels": [ { @@ -625,7 +622,6 @@ const tasksDummyData = { "updated_date": "2019-05-16T13:08:00.621797+03:00", "overlap": 5, "segment_size": 5000, - "z_order": true, "flipped": false, "status": "annotation", "labels": [ @@ -889,7 +885,6 @@ const tasksDummyData = { "updated_date": "2019-05-15T16:58:27.992785+03:00", "overlap": 5, "segment_size": 0, - "z_order": false, "flipped": false, "status": "annotation", "labels": [ @@ -1141,7 +1136,6 @@ const tasksDummyData = { "updated_date": "2019-05-15T11:20:55.770587+03:00", "overlap": 0, "segment_size": 0, - "z_order": true, "flipped": false, "status": "annotation", "labels": [ diff --git a/cvat-core/tests/mocks/server-proxy.mock.js b/cvat-core/tests/mocks/server-proxy.mock.js index f189e254..07665ad3 100644 --- a/cvat-core/tests/mocks/server-proxy.mock.js +++ b/cvat-core/tests/mocks/server-proxy.mock.js @@ -125,7 +125,6 @@ class ServerProxy { updated_date: '2019-05-16T13:08:00.621797+03:00', overlap: taskData.overlap ? taskData.overlap : 5, segment_size: taskData.segment_size ? taskData.segment_size : 5000, - z_order: taskData.z_order, flipped: false, status: 'annotation', image_quality: taskData.image_quality, diff --git a/cvat-ui/package-lock.json b/cvat-ui/package-lock.json index fa131b07..74b8f7ea 100644 --- a/cvat-ui/package-lock.json +++ b/cvat-ui/package-lock.json @@ -1,6 +1,6 @@ { "name": "cvat-ui", - "version": "1.9.13", + "version": "1.9.14", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/cvat-ui/package.json b/cvat-ui/package.json index dbc1c561..5f079331 100644 --- a/cvat-ui/package.json +++ b/cvat-ui/package.json @@ -1,6 +1,6 @@ { "name": "cvat-ui", - "version": "1.9.13", + "version": "1.9.14", "description": "CVAT single-page application", "main": "src/index.tsx", "scripts": { diff --git a/cvat-ui/src/actions/tasks-actions.ts b/cvat-ui/src/actions/tasks-actions.ts index 4abb9dbd..8a7b2978 100644 --- a/cvat-ui/src/actions/tasks-actions.ts +++ b/cvat-ui/src/actions/tasks-actions.ts @@ -383,7 +383,6 @@ ThunkAction, {}, {}, AnyAction> { const description: any = { name: data.basic.name, labels: data.labels, - z_order: data.advanced.zOrder, image_quality: 70, use_zip_chunks: data.advanced.useZipChunks, use_cache: data.advanced.useCache, diff --git a/cvat-ui/src/components/annotation-page/top-bar/statistics-modal.tsx b/cvat-ui/src/components/annotation-page/top-bar/statistics-modal.tsx index d68d58d9..f38dabac 100644 --- a/cvat-ui/src/components/annotation-page/top-bar/statistics-modal.tsx +++ b/cvat-ui/src/components/annotation-page/top-bar/statistics-modal.tsx @@ -19,7 +19,6 @@ interface Props { assignee: string; startFrame: number; stopFrame: number; - zOrder: boolean; bugTracker: string; jobStatus: string; savingJobStatus: boolean; @@ -36,7 +35,6 @@ export default function StatisticsModalComponent(props: Props): JSX.Element { assignee, startFrame, stopFrame, - zOrder, bugTracker, closeStatistics, changeJobStatus, @@ -171,10 +169,6 @@ export default function StatisticsModalComponent(props: Props): JSX.Element { Frames {stopFrame - startFrame + 1} - - Z-Order - {zOrder.toString()} - { !!bugTracker && ( diff --git a/cvat-ui/src/components/create-task-page/advanced-configuration-form.tsx b/cvat-ui/src/components/create-task-page/advanced-configuration-form.tsx index 4bbcd26a..88175b7e 100644 --- a/cvat-ui/src/components/create-task-page/advanced-configuration-form.tsx +++ b/cvat-ui/src/components/create-task-page/advanced-configuration-form.tsx @@ -15,7 +15,6 @@ import patterns from 'utils/validation-patterns'; export interface AdvancedConfiguration { bugTracker?: string; - zOrder: boolean; imageQuality?: number; overlapSize?: number; segmentSize?: number; @@ -115,22 +114,6 @@ class AdvancedConfigurationForm extends React.PureComponent { form.resetFields(); } - private renderZOrder(): JSX.Element { - const { form } = this.props; - return ( - - {form.getFieldDecorator('zOrder', { - initialValue: false, - valuePropName: 'checked', - })( - - Z-order - , - )} - - ); - } - private renderImageQuality(): JSX.Element { const { form } = this.props; @@ -407,10 +390,6 @@ class AdvancedConfigurationForm extends React.PureComponent { return (
    - - {this.renderZOrder()} - - {this.renderUzeZipChunks()} diff --git a/cvat-ui/src/components/create-task-page/create-task-content.tsx b/cvat-ui/src/components/create-task-page/create-task-content.tsx index 3a1e311b..45a3e9c3 100644 --- a/cvat-ui/src/components/create-task-page/create-task-content.tsx +++ b/cvat-ui/src/components/create-task-page/create-task-content.tsx @@ -39,7 +39,6 @@ const defaultState = { name: '', }, advanced: { - zOrder: false, lfs: false, useZipChunks: true, useCache: true, diff --git a/cvat-ui/src/components/task-page/details.tsx b/cvat-ui/src/components/task-page/details.tsx index aa3813d0..3426deaa 100644 --- a/cvat-ui/src/components/task-page/details.tsx +++ b/cvat-ui/src/components/task-page/details.tsx @@ -163,7 +163,6 @@ export default class DetailsComponent extends React.PureComponent private renderParameters(): JSX.Element { const { taskInstance } = this.props; const { overlap, segmentSize, imageQuality } = taskInstance; - const zOrder = taskInstance.zOrder.toString(); return ( <> @@ -185,11 +184,6 @@ export default class DetailsComponent extends React.PureComponent
    {imageQuality} - - Z-order -
    - {zOrder} - ); diff --git a/cvat/apps/dataset_manager/bindings.py b/cvat/apps/dataset_manager/bindings.py index 02d4eaab..6f2da403 100644 --- a/cvat/apps/dataset_manager/bindings.py +++ b/cvat/apps/dataset_manager/bindings.py @@ -147,7 +147,6 @@ class TaskData: ("start_frame", str(self._db_task.data.start_frame)), ("stop_frame", str(self._db_task.data.stop_frame)), ("frame_filter", self._db_task.data.frame_filter), - ("z_order", str(self._db_task.z_order)), ("labels", [ ("label", OrderedDict([ diff --git a/cvat/apps/dataset_manager/formats/cvat.py b/cvat/apps/dataset_manager/formats/cvat.py index 632da163..4f78e20d 100644 --- a/cvat/apps/dataset_manager/formats/cvat.py +++ b/cvat/apps/dataset_manager/formats/cvat.py @@ -229,8 +229,7 @@ def dump_as_cvat_annotation(file_object, annotations): )), ])) - if annotations.meta["task"]["z_order"] != "False": - dump_data['z_order'] = str(shape.z_order) + dump_data['z_order'] = str(shape.z_order) if shape.group: dump_data['group_id'] = str(shape.group) @@ -343,8 +342,7 @@ def dump_as_cvat_interpolation(file_object, annotations): for x,y in pairwise(shape.points)])) ])) - if annotations.meta["task"]["z_order"] != "False": - dump_data["z_order"] = str(shape.z_order) + dump_data["z_order"] = str(shape.z_order) if shape.type == "rectangle": dumper.open_box(dump_data) diff --git a/cvat/apps/dataset_manager/tests/test_formats.py b/cvat/apps/dataset_manager/tests/test_formats.py index 1de8afdd..f85dd5ea 100644 --- a/cvat/apps/dataset_manager/tests/test_formats.py +++ b/cvat/apps/dataset_manager/tests/test_formats.py @@ -222,7 +222,6 @@ class TaskExportTest(_DbTestBase): "assignee": '', "overlap": 0, "segment_size": 100, - "z_order": False, "labels": [ { "name": "car", @@ -429,7 +428,6 @@ class FrameMatchingTest(_DbTestBase): "assignee": '', "overlap": 0, "segment_size": 100, - "z_order": False, "labels": [ { "name": "car", diff --git a/cvat/apps/documentation/static/documentation/images/image074.jpg b/cvat/apps/documentation/static/documentation/images/image074.jpg deleted file mode 100644 index dd5fb225..00000000 Binary files a/cvat/apps/documentation/static/documentation/images/image074.jpg and /dev/null differ diff --git a/cvat/apps/documentation/static/documentation/images/image128_use_cache.jpg b/cvat/apps/documentation/static/documentation/images/image128_use_cache.jpg index 31fae43d..038e3d4c 100644 Binary files a/cvat/apps/documentation/static/documentation/images/image128_use_cache.jpg and b/cvat/apps/documentation/static/documentation/images/image128_use_cache.jpg differ diff --git a/cvat/apps/documentation/static/documentation/images/image144_detrac.jpg b/cvat/apps/documentation/static/documentation/images/image144_detrac.jpg index f9d204bf..2fe7f183 100644 Binary files a/cvat/apps/documentation/static/documentation/images/image144_detrac.jpg and b/cvat/apps/documentation/static/documentation/images/image144_detrac.jpg differ diff --git a/cvat/apps/documentation/user_guide.md b/cvat/apps/documentation/user_guide.md index 9350d55d..c9a95dd5 100644 --- a/cvat/apps/documentation/user_guide.md +++ b/cvat/apps/documentation/user_guide.md @@ -150,8 +150,6 @@ Go to the [Django administration panel](http://localhost:8080/admin). There you ![](static/documentation/images/image128_use_cache.jpg) - **Z-Order**. Defines the order on drawn polygons. Check the box for enable layered displaying. - **Use zip chunks**. Force to use zip chunks as compressed data. Actual for videos only. **Use cache**. Defines how to work with data. Select the checkbox to switch to the "on-the-fly data processing", @@ -760,7 +758,6 @@ _Overview_: - ``Start Frame`` - the number of the first frame in this job. - ``End Frame`` - the number of the last frame in this job. - ``Frames`` - the total number of all frames in the job. -- ``Z-Order`` - z-order enable indicator. _Annotations statistics_: @@ -1087,7 +1084,6 @@ Press ``Esc`` to cancel editing. It is used for semantic / instance segmentation. -If you want to annotate polygons, make sure the ``Z-Order`` flag in ``Create new task`` dialog is enabled. The Z-Order flag defines the order of drawing. It is necessary to get the right annotation mask without extra work (additional drawing of borders). Z-Order can be changed by pressing ``+``/``-`` which set maximum/minimum z-order @@ -1571,4 +1567,4 @@ Many UI elements have shortcut hints. Put your pointer to a required element to | ``Down Arrow`` | Go to the next attribute (down) | | ``Tab`` | Go to the next annotated object in current frame | | ``Shift+Tab`` | Go to the previous annotated object in current frame | -| ```` | Assign a corresponding value to the current attribute | \ No newline at end of file +| ```` | Assign a corresponding value to the current attribute | diff --git a/cvat/apps/engine/migrations/0032_remove_task_z_order.py b/cvat/apps/engine/migrations/0032_remove_task_z_order.py new file mode 100644 index 00000000..43d15f53 --- /dev/null +++ b/cvat/apps/engine/migrations/0032_remove_task_z_order.py @@ -0,0 +1,17 @@ +# Generated by Django 3.1.1 on 2020-10-12 17:16 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('engine', '0031_auto_20201011_0220'), + ] + + operations = [ + migrations.RemoveField( + model_name='task', + name='z_order', + ), + ] diff --git a/cvat/apps/engine/models.py b/cvat/apps/engine/models.py index 1b8666f5..d99181bc 100644 --- a/cvat/apps/engine/models.py +++ b/cvat/apps/engine/models.py @@ -171,7 +171,6 @@ class Task(models.Model): overlap = models.PositiveIntegerField(null=True) # Zero means that there are no limits (default) segment_size = models.PositiveIntegerField(default=0) - z_order = models.BooleanField(default=False) status = models.CharField(max_length=32, choices=StatusChoice.choices(), default=StatusChoice.ANNOTATION) data = models.ForeignKey(Data, on_delete=models.CASCADE, null=True, related_name="tasks") diff --git a/cvat/apps/engine/serializers.py b/cvat/apps/engine/serializers.py index dd1a7fd1..71843878 100644 --- a/cvat/apps/engine/serializers.py +++ b/cvat/apps/engine/serializers.py @@ -244,7 +244,7 @@ class TaskSerializer(WriteOnceMixin, serializers.ModelSerializer): model = models.Task fields = ('url', 'id', 'name', 'mode', 'owner', 'assignee', 'bug_tracker', 'created_date', 'updated_date', 'overlap', - 'segment_size', 'z_order', 'status', 'labels', 'segments', + 'segment_size', 'status', 'labels', 'segments', 'project', 'data_chunk_size', 'data_compressed_chunk_type', 'data_original_chunk_type', 'size', 'image_quality', 'data') read_only_fields = ('mode', 'created_date', 'updated_date', 'status', 'data_chunk_size', 'data_compressed_chunk_type', 'data_original_chunk_type', 'size', 'image_quality', 'data') @@ -282,7 +282,6 @@ class TaskSerializer(WriteOnceMixin, serializers.ModelSerializer): instance.assignee = validated_data.get('assignee', instance.assignee) instance.bug_tracker = validated_data.get('bug_tracker', instance.bug_tracker) - instance.z_order = validated_data.get('z_order', instance.z_order) instance.project = validated_data.get('project', instance.project) labels = validated_data.get('label_set', []) for label in labels: @@ -496,4 +495,4 @@ class LogEventSerializer(serializers.Serializer): is_active = serializers.BooleanField() class AnnotationFileSerializer(serializers.Serializer): - annotation_file = serializers.FileField() \ No newline at end of file + annotation_file = serializers.FileField() diff --git a/cvat/apps/engine/tests/test_rest_api.py b/cvat/apps/engine/tests/test_rest_api.py index a6853136..b7448fff 100644 --- a/cvat/apps/engine/tests/test_rest_api.py +++ b/cvat/apps/engine/tests/test_rest_api.py @@ -103,7 +103,6 @@ def create_dummy_db_tasks(obj, project=None): "assignee": obj.assignee, "overlap": 0, "segment_size": 100, - "z_order": False, "image_quality": 75, "size": 100, "project": project @@ -116,7 +115,6 @@ def create_dummy_db_tasks(obj, project=None): "owner": obj.user, "overlap": 0, "segment_size": 100, - "z_order": True, "image_quality": 50, "size": 200, "project": project @@ -130,7 +128,6 @@ def create_dummy_db_tasks(obj, project=None): "assignee": obj.assignee, "overlap": 0, "segment_size": 100, - "z_order": False, "image_quality": 75, "size": 100, "project": project @@ -143,7 +140,6 @@ def create_dummy_db_tasks(obj, project=None): "owner": obj.admin, "overlap": 0, "segment_size": 50, - "z_order": False, "image_quality": 95, "size": 50, "project": project @@ -1082,7 +1078,6 @@ class TaskGetAPITestCase(APITestCase): self.assertEqual(response.data["assignee"], assignee) self.assertEqual(response.data["overlap"], db_task.overlap) self.assertEqual(response.data["segment_size"], db_task.segment_size) - self.assertEqual(response.data["z_order"], db_task.z_order) self.assertEqual(response.data["image_quality"], db_task.data.image_quality) self.assertEqual(response.data["status"], db_task.status) self.assertListEqual( @@ -1191,8 +1186,6 @@ class TaskUpdateAPITestCase(APITestCase): self.assertEqual(response.data["assignee"], assignee) self.assertEqual(response.data["overlap"], db_task.overlap) self.assertEqual(response.data["segment_size"], db_task.segment_size) - z_order = data.get("z_order", db_task.z_order) - self.assertEqual(response.data["z_order"], z_order) image_quality = data.get("image_quality", db_task.data.image_quality) self.assertEqual(response.data["image_quality"], image_quality) self.assertEqual(response.data["status"], db_task.status) @@ -1351,7 +1344,6 @@ class TaskCreateAPITestCase(APITestCase): self.assertEqual(response.data["bug_tracker"], data.get("bug_tracker", "")) self.assertEqual(response.data["overlap"], data.get("overlap", None)) self.assertEqual(response.data["segment_size"], data.get("segment_size", 0)) - self.assertEqual(response.data["z_order"], data.get("z_order", False)) self.assertEqual(response.data["status"], StatusChoice.ANNOTATION) self.assertListEqual( [label["name"] for label in data.get("labels")], @@ -1748,7 +1740,6 @@ class TaskDataAPITestCase(APITestCase): "assignee": self.assignee.id, "overlap": 0, "segment_size": 100, - "z_order": False, "labels": [ {"name": "car"}, {"name": "person"}, @@ -1795,7 +1786,6 @@ class TaskDataAPITestCase(APITestCase): "name": "my video task #1", "overlap": 0, "segment_size": 100, - "z_order": False, "labels": [ {"name": "car"}, {"name": "person"}, @@ -2048,7 +2038,6 @@ class TaskDataAPITestCase(APITestCase): "assignee": self.assignee.id, "overlap": 0, "segment_size": 100, - "z_order": False, "labels": [ {"name": "car"}, {"name": "person"}, @@ -2095,7 +2084,6 @@ class JobAnnotationAPITestCase(APITestCase): "assignee": assignee.id, "overlap": 0, "segment_size": 100, - "z_order": False, "labels": [ { "name": "car",