Z-Order flag in creation task process (#2294)

* Z-Order flag in creation task process has been removed
main
Vitaliy Nishukov 5 years ago committed by GitHub
parent 2dcb9056e0
commit 00f6486f80
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -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 (<https://github.com/openvinotoolkit/cvat/pull/2234>)
- Added layout grids toggling ('ctrl + alt + Enter')
- Added password reset functionality (<https://github.com/opencv/cvat/pull/2058>)

@ -1,6 +1,6 @@
{
"name": "cvat-core",
"version": "3.8.0",
"version": "3.8.1",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

@ -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": {

@ -824,7 +824,6 @@
* <br> <li style="margin-left: 10px;"> name
* <br> <li style="margin-left: 10px;"> assignee
* <br> <li style="margin-left: 10px;"> bug_tracker
* <br> <li style="margin-left: 10px;"> z_order
* <br> <li style="margin-left: 10px;"> labels
* <br> <li style="margin-left: 10px;"> segment_size
* <br> <li style="margin-left: 10px;"> 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') {

@ -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();

@ -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": [

@ -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,

@ -1,6 +1,6 @@
{
"name": "cvat-ui",
"version": "1.9.13",
"version": "1.9.14",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

@ -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": {

@ -383,7 +383,6 @@ ThunkAction<Promise<void>, {}, {}, 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,

@ -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 {
<Text strong className='cvat-text'>Frames</Text>
<Text className='cvat-text'>{stopFrame - startFrame + 1}</Text>
</Col>
<Col span={4}>
<Text strong className='cvat-text'>Z-Order</Text>
<Text className='cvat-text'>{zOrder.toString()}</Text>
</Col>
</Row>
{ !!bugTracker && (
<Row type='flex' justify='start' className='cvat-job-info-bug-tracker'>

@ -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<Props> {
form.resetFields();
}
private renderZOrder(): JSX.Element {
const { form } = this.props;
return (
<Form.Item help='Enables order for shapes. Useful for segmentation tasks'>
{form.getFieldDecorator('zOrder', {
initialValue: false,
valuePropName: 'checked',
})(
<Checkbox>
<Text className='cvat-text-color'>Z-order</Text>
</Checkbox>,
)}
</Form.Item>
);
}
private renderImageQuality(): JSX.Element {
const { form } = this.props;
@ -407,10 +390,6 @@ class AdvancedConfigurationForm extends React.PureComponent<Props> {
return (
<Form>
<Row>
<Col>{this.renderZOrder()}</Col>
</Row>
<Row>
<Col>{this.renderUzeZipChunks()}</Col>
</Row>

@ -39,7 +39,6 @@ const defaultState = {
name: '',
},
advanced: {
zOrder: false,
lfs: false,
useZipChunks: true,
useCache: true,

@ -163,7 +163,6 @@ export default class DetailsComponent extends React.PureComponent<Props, State>
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<Props, State>
<br />
<Text className='cvat-text-color'>{imageQuality}</Text>
</Col>
<Col span={12}>
<Text strong className='cvat-text-color'>Z-order</Text>
<br />
<Text className='cvat-text-color'>{zOrder}</Text>
</Col>
</Row>
</>
);

@ -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([

@ -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)

@ -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",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

After

Width:  |  Height:  |  Size: 97 KiB

@ -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 |
| ``<number>`` | Assign a corresponding value to the current attribute |
| ``<number>`` | Assign a corresponding value to the current attribute |

@ -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',
),
]

@ -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")

@ -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()
annotation_file = serializers.FileField()

@ -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",

Loading…
Cancel
Save