cvat icon indicating copy to clipboard operation
cvat copied to clipboard

Deleted frames

Open ActiveChooN opened this issue 4 years ago • 44 comments

Resolve #4235 Resolve #3000

Motivation and context

How has this been tested?

Checklist

  • [x] I submit my changes into the develop branch
  • [x] I have added a description of my changes into CHANGELOG file ~~- [ ] I have updated the documentation accordingly~~
  • [x] I have added tests to cover my changes
  • [x] I have linked related issues (read github docs)
  • [x] I have increased versions of npm packages if it is necessary (cvat-canvas, cvat-core, cvat-data and cvat-ui)

License

  • [x] I submit my code changes under the same MIT License that covers the project. Feel free to contact the maintainers if that's a concern.
  • [x] I have updated the license header for each file (see an example below)
# Copyright (C) 2022 Intel Corporation
#
# SPDX-License-Identifier: MIT

ActiveChooN avatar Jan 18 '22 10:01 ActiveChooN

@bsekachev, @azhavoro, could you look at the PR, please?

ActiveChooN avatar Feb 08 '22 16:02 ActiveChooN

@bsekachev, @azhavoro, could you look at the PR, please?

@ActiveChooN It looks like the deleted_frames field is not kept in a task's backup/restore archive. Most likely it will be enough to add this field here https://github.com/openvinotoolkit/cvat/blob/develop/cvat/apps/engine/backup.py#L106

azhavoro avatar Feb 08 '22 17:02 azhavoro

@azhavoro, fixed.

ActiveChooN avatar Feb 09 '22 08:02 ActiveChooN

  • I believe the setting "show deleted frames" is bettter to be in player section

  • All frames are grayscale: bug_1

  • If I give a direct command to go to a deleted frame, it goes to non-deleted neighborhood, I am not sure it is expected behaviour. bug_2

  • If I remove the latest frame of a job, it is not removed visually (icon to remove is not changed, grayscale effect is not visible). After updating a page, remove effects are applied. bug_3

  • Looks like removing/restoring frames does not update database field updated_date of a task, so, when I dump annotations, then remove a frame, and dump annotations again, I get cached version of dump where the frame is not removed. Maybe the same bug exists for projects likewise.

  • When I try to export a dataset for a task with one removed image (where some annotations exist, I get following error) Screenshot_4

  • According to minutes from our latest discussion:

    • What happens if all frames in job are deleted. There will be a message about empty job instead of frame and inactivated annotation view It is not implemented, as I can see.

bsekachev avatar Feb 11 '22 10:02 bsekachev

@bsekachev

  • I believe the setting "show deleted frames" is bettter to be in player section

Done.

  • All frames are grayscale:

Done.

If I give a direct command to go to a deleted frame, it goes to a non-deleted neighborhood, I am not sure it is expected behavior.

If you want to navigate through it's better to turn on the "Show deleted frames" option. If not, only navigation through non-deleted frames is available.

  • If I remove the latest frame of a job, it is not removed visually (icon to remove is not changed, grayscale effect is not visible). After updating a page, remove effects are applied.

Fixed.

  • Looks like removing/restoring frames does not update database field updated_date of a task, so, when I dump annotations, then remove a frame, and dump annotations again, I get cached version of dump where the frame is not removed. Maybe the same bug exists for projects likewise.

Fixed.

  • When I try to export a dataset for a task with one removed image (where some annotations exist, I get following error)

Fixed.

  • What happens if all frames in job are deleted.

I thought another time and preferred to show deleted frames if no non-deleted frames are available because the state of the empty job differs from the state when all frames are deleted. And also it makes look of all deleting pipeline more consistent, I guess.

ActiveChooN avatar Feb 15 '22 08:02 ActiveChooN

If you want to navigate through it's better to turn on the "Show deleted frames" option. If not, only navigation through non-deleted frames is available.

It does not satisfy discussed HLD. And I actually do not think it is expected behaviour for users because they even does not know about this checkbox exists.

bsekachev avatar Feb 15 '22 10:02 bsekachev

@bsekachev, @nmanovic, PR is mostly done, the only issue with interpolating on the client. If the job has keyframes on deleted frames there can be an annotation shift on nearby frames, if those keyframes are ignored in the interpolation process. That issue is not related to interpolation on the server, because in that situation keyframes are deleted completely.

ActiveChooN avatar Feb 24 '22 10:02 ActiveChooN

Update overlay filter for deleted frames for more clarity;

As far as I remember for deleted frames we discussed something like trash icon.. What do you think?

I found one issue with step forward/backward navigation: If I have deleted frames 0,1,2 and go to the 3rd frame, press backward, backward, backward I visite frames 2,1,0. If I press back, back, back navigation don't change frame (as expected). Need to check the same case when we have deleted frames latest, latest - 1, latest - 2 and go forward.

Add keyframes at the edges of the deleted interval to reduce annotations shift;

I have a polygon track with three keyframes (0, 10, 11 [outside keyframe]), I dump data as CVAT for video and don not see any edge keyframes on frame 1. Did I do something wrong?

bsekachev avatar Feb 28 '22 09:02 bsekachev

If the job has keyframes on deleted frames there can be an annotation shift on nearby frames, if those keyframes are ignored in the interpolation process.

As far as I remember we discussed that we can use information about keyframes on removed frames during interpolation on client, but maybe it is not exactly true as I think now.

Maybe better idea is to add keyframes automatically around frame that has been just removed? For example if we remove frame N, we add for all tracks (on frame N) keyframes on frames N-1 (if exists, and the track is presented there, and not keyframe so far), and N+1 (if exists and the track is presented there, and not keyframe so far), keeping position as is. It corresponds to the server solution, and not break any data somehow (maybe it a bit less convenient when we want to restore removed frame, but I am not sure it is really often scenario).

@bsekachev , if a user delete a keyframe, does CVAT add something after and before for the frame?

bsekachev avatar Feb 28 '22 10:02 bsekachev

BTW, are we planning to do something with filters in this PR? (search deleted frames, navigation redesign, etc.?) considering Andrey's feedback https://github.com/openvinotoolkit/cvat/issues/3075#issuecomment-1047589431?

bsekachev avatar Feb 28 '22 10:02 bsekachev

If I have a track with all keyframes on deleted frames (including outside keyframes), I get dataset export error: List index out of range.

bsekachev avatar Feb 28 '22 10:02 bsekachev

One more related issue with interpolation (inconsistency). If I remove a frame with outside track keyframe, on UI I don't see the track anymore (as expected) on the following frames, but in dumped file the track lasts till the end of a video.

bsekachev avatar Feb 28 '22 10:02 bsekachev

@ActiveChooN , need to resolve conflicts

nmanovic avatar Mar 04 '22 13:03 nmanovic

Tried this patch: deleting frames, import/export with deleted frames works fine for me. Didn't meet any issues

klakhov avatar Mar 11 '22 15:03 klakhov

http://localhost:8080/api/jobs/1/data/meta

Server Error (500)

022-03-21 08:16:58,214 DEBG 'runserver' stderr output:
[Mon Mar 21 08:16:58.214491 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312] [2022-03-21 08:16:58,214] ERROR django.request: Internal Server Error: /api/jobs/1/data/meta
[Mon Mar 21 08:16:58.214501 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312] Traceback (most recent call last):
[Mon Mar 21 08:16:58.214502 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/opt/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
[Mon Mar 21 08:16:58.214503 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     response = get_response(request)
[Mon Mar 21 08:16:58.214504 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/opt/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 204, in _get_response
[Mon Mar 21 08:16:58.214504 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     response = response.render()
[Mon Mar 21 08:16:58.214505 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/opt/venv/lib/python3.8/site-packages/django/template/response.py", line 105, in render
[Mon Mar 21 08:16:58.214506 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     self.content = self.rendered_content
[Mon Mar 21 08:16:58.214507 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/opt/venv/lib/python3.8/site-packages/rest_framework/response.py", line 70, in rendered_content
[Mon Mar 21 08:16:58.214508 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     ret = renderer.render(self.data, accepted_media_type, context)
[Mon Mar 21 08:16:58.214509 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/opt/venv/lib/python3.8/site-packages/rest_framework/renderers.py", line 724, in render
[Mon Mar 21 08:16:58.214509 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     context = self.get_context(data, accepted_media_type, renderer_context)
[Mon Mar 21 08:16:58.214510 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/opt/venv/lib/python3.8/site-packages/rest_framework/renderers.py", line 657, in get_context
[Mon Mar 21 08:16:58.214511 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     raw_data_patch_form = self.get_raw_data_form(data, view, 'PATCH', request)
[Mon Mar 21 08:16:58.214512 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/opt/venv/lib/python3.8/site-packages/rest_framework/renderers.py", line 541, in get_raw_data_form
[Mon Mar 21 08:16:58.214513 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     if not self.show_form_for_method(view, method, request, instance):
[Mon Mar 21 08:16:58.214514 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/opt/venv/lib/python3.8/site-packages/rest_framework/renderers.py", line 433, in show_form_for_method
[Mon Mar 21 08:16:58.214514 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     view.check_object_permissions(request, obj)
[Mon Mar 21 08:16:58.214515 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/opt/venv/lib/python3.8/site-packages/rest_framework/views.py", line 345, in check_object_permissions
[Mon Mar 21 08:16:58.214516 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     if not permission.has_object_permission(request, self, obj):
[Mon Mar 21 08:16:58.214517 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/home/django/cvat/apps/iam/permissions.py", line 1041, in has_object_permission
[Mon Mar 21 08:16:58.214518 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     return self.check_permission(request, view, obj)
[Mon Mar 21 08:16:58.214519 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/home/django/cvat/apps/iam/permissions.py", line 1030, in check_permission
[Mon Mar 21 08:16:58.214520 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     permissions.extend(perm.create(request, view, obj))
[Mon Mar 21 08:16:58.214521 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/home/django/cvat/apps/iam/permissions.py", line 762, in create
[Mon Mar 21 08:16:58.214522 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     self = cls.create_base_perm(request, view, scope, obj)
[Mon Mar 21 08:16:58.214523 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/home/django/cvat/apps/iam/permissions.py", line 21, in create_base_perm
[Mon Mar 21 08:16:58.214523 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     return cls(
[Mon Mar 21 08:16:58.214524 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/home/django/cvat/apps/iam/permissions.py", line 777, in __init__
[Mon Mar 21 08:16:58.214525 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     super().__init__(**kwargs)
[Mon Mar 21 08:16:58.214526 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/home/django/cvat/apps/iam/permissions.py", line 71, in __init__
[Mon Mar 21 08:16:58.214527 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     self.payload['input']['resource'] = self.get_resource()
[Mon Mar 21 08:16:58.214527 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/home/django/cvat/apps/iam/permissions.py", line 838, in get_resource
[Mon Mar 21 08:16:58.214528 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     if self.obj.segment.task.project:
[Mon Mar 21 08:16:58.214529 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312] AttributeError: 'Data' object has no attribute 'segment'

2022-03-21 08:16:58,214 DEBG 'runserver' stderr output:
[Mon Mar 21 08:16:58.214597 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312] ERROR - 2022-03-21 08:16:58,214 - log - Internal Server Error: /api/jobs/1/data/meta
[Mon Mar 21 08:16:58.214599 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312] Traceback (most recent call last):
[Mon Mar 21 08:16:58.214599 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/opt/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
[Mon Mar 21 08:16:58.214600 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     response = get_response(request)
[Mon Mar 21 08:16:58.214601 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/opt/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 204, in _get_response
[Mon Mar 21 08:16:58.214602 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     response = response.render()
[Mon Mar 21 08:16:58.214602 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/opt/venv/lib/python3.8/site-packages/django/template/response.py", line 105, in render
[Mon Mar 21 08:16:58.214603 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     self.content = self.rendered_content
[Mon Mar 21 08:16:58.214604 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/opt/venv/lib/python3.8/site-packages/rest_framework/response.py", line 70, in rendered_content
[Mon Mar 21 08:16:58.214605 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     ret = renderer.render(self.data, accepted_media_type, context)
[Mon Mar 21 08:16:58.214606 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/opt/venv/lib/python3.8/site-packages/rest_framework/renderers.py", line 724, in render
[Mon Mar 21 08:16:58.214606 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     context = self.get_context(data, accepted_media_type, renderer_context)
[Mon Mar 21 08:16:58.214607 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/opt/venv/lib/python3.8/site-packages/rest_framework/renderers.py", line 657, in get_context
[Mon Mar 21 08:16:58.214608 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     raw_data_patch_form = self.get_raw_data_form(data, view, 'PATCH', request)
[Mon Mar 21 08:16:58.214609 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/opt/venv/lib/python3.8/site-packages/rest_framework/renderers.py", line 541, in get_raw_data_form
[Mon Mar 21 08:16:58.214609 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     if not self.show_form_for_method(view, method, request, instance):
[Mon Mar 21 08:16:58.214610 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/opt/venv/lib/python3.8/site-packages/rest_framework/renderers.py", line 433, in show_form_for_method
[Mon Mar 21 08:16:58.214611 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     view.check_object_permissions(request, obj)
[Mon Mar 21 08:16:58.214612 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/opt/venv/lib/python3.8/site-packages/rest_framework/views.py", line 345, in check_object_permissions
[Mon Mar 21 08:16:58.214613 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     if not permission.has_object_permission(request, self, obj):
[Mon Mar 21 08:16:58.214613 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/home/django/cvat/apps/iam/permissions.py", line 1041, in has_object_permission
[Mon Mar 21 08:16:58.214614 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     return self.check_permission(request, view, obj)
[Mon Mar 21 08:16:58.214615 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/home/django/cvat/apps/iam/permissions.py", line 1030, in check_permission
[Mon Mar 21 08:16:58.214619 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     permissions.extend(perm.create(request, view, obj))
[Mon Mar 21 08:16:58.214620 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/home/django/cvat/apps/iam/permissions.py", line 762, in create
[Mon Mar 21 08:16:58.214621 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     self = cls.create_base_perm(request, view, scope, obj)
[Mon Mar 21 08:16:58.214622 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/home/django/cvat/apps/iam/permissions.py", line 21, in create_base_perm
[Mon Mar 21 08:16:58.214622 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     return cls(
[Mon Mar 21 08:16:58.214623 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/home/django/cvat/apps/iam/permissions.py", line 777, in __init__
[Mon Mar 21 08:16:58.214624 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     super().__init__(**kwargs)
[Mon Mar 21 08:16:58.214625 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/home/django/cvat/apps/iam/permissions.py", line 71, in __init__
[Mon Mar 21 08:16:58.214625 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     self.payload['input']['resource'] = self.get_resource()
[Mon Mar 21 08:16:58.214626 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]   File "/home/django/cvat/apps/iam/permissions.py", line 838, in get_resource
[Mon Mar 21 08:16:58.214627 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312]     if self.obj.segment.task.project:
[Mon Mar 21 08:16:58.214628 2022] [wsgi:error] [pid 608:tid 140081950660352] [remote 172.18.0.5:58312] AttributeError: 'Data' object has no attribute 'segment'

nmanovic avatar Mar 21 '22 08:03 nmanovic

@ActiveChooN , after I delete an image and restore it, some frames have unexpected white boundaries. It looks like wrong meta information is used to calculate the size of images on the canvas.

image

nmanovic avatar Mar 22 '22 18:03 nmanovic

@ActiveChooN , after I delete an image and restore it, some frames have unexpected white boundaries. It looks like wrong meta information is used to calculate the size of images on the canvas.

image

nmanovic avatar Mar 22 '22 18:03 nmanovic

@ActiveChooN , I believe we decided to draw "trash bin" for deleted images instead of strips. Could you please clarify?

image

nmanovic avatar Mar 22 '22 18:03 nmanovic

@ActiveChooN , I believe we decided to draw "trash bin" for deleted images instead of strips. Could you please clarify?

image

nmanovic avatar Mar 22 '22 18:03 nmanovic

@ActiveChooN , I don't think we need to show the dialog, if we don't have any annotations on the frame

image

nmanovic avatar Mar 22 '22 18:03 nmanovic

@ActiveChooN , I don't think we need to show the dialog, if we don't have any annotations on the frame

image

nmanovic avatar Mar 22 '22 18:03 nmanovic

@ActiveChooN , after I click once on "delete" button, I got the following requests below. It looks like we do requests twice. Why? Also I will prefer don't send any requests to the server and do that explicitly only after "save" button is pressed. It will correspond to the current behaviour.

image

nmanovic avatar Mar 22 '22 18:03 nmanovic

@ActiveChooN , after I delete an image and restore it, some frames have unexpected white boundaries. It looks like wrong meta information is used to calculate the size of images on the canvas.

@nmanovic, can you please share task backup for issue reproduction?

ActiveChooN avatar Mar 23 '22 08:03 ActiveChooN

@ActiveChooN , I don't think we need to show the dialog, if we don't have any annotations on the frame.

In my opinion, every major delete action should be wrapped into dialog to prevent missclicking

ActiveChooN avatar Mar 23 '22 08:03 ActiveChooN

@ActiveChooN , after I delete an image and restore it, some frames have unexpected white boundaries. It looks like wrong meta information is used to calculate the size of images on the canvas.

@nmanovic, can you please share task backup for issue reproduction?

Please use https://public.roboflow.com/object-detection/oxford-pets to reproduce. It is important just have images with different sizes. Let me know if you cannot reproduce.

nmanovic avatar Mar 23 '22 09:03 nmanovic

@ActiveChooN , I don't think we need to show the dialog, if we don't have any annotations on the frame.

In my opinion, every major delete action should be wrapped into dialog to prevent missclicking

Only in case it has strong consequences (e.g., remove annotations). Also I don't like that we move to the next image automatically. Need to think twice about the behaviors.

nmanovic avatar Mar 23 '22 09:03 nmanovic

Let me know if you cannot reproduce.

Should be there special steps to reproduce the issue?

delete-resizes-image

ActiveChooN avatar Mar 23 '22 10:03 ActiveChooN

@nmanovic

Also I don't like that we move to the next image automatically. Need to think twice about the behaviors.

Moving to the next frame is only working if the "Show deleted frames" option is disabled.

ActiveChooN avatar Mar 29 '22 12:03 ActiveChooN

@ActiveChooN , automatic annotation is running on all frames, even deleted.

nmanovic avatar Apr 01 '22 11:04 nmanovic

@ActiveChooN , could you please check tests? Are they hanging?

nmanovic avatar Apr 01 '22 13:04 nmanovic

@ActiveChooN , if I delete a frame with annotations and after that restore it, I still can see annotations. But if I go to the next frame and return back, it is disappeared. Could you please check?

nmanovic avatar Apr 01 '22 13:04 nmanovic

@ActiveChooN , I see some strange artifacts for trash bin. Is it a standard picture?

image

nmanovic avatar Apr 01 '22 13:04 nmanovic

@ActiveChooN , do we have any shortcuts to delete a frame quickly? For now it is necessary for every deleted frame click twice using mouse. I will have two shortcuts with and without confirmation and show them in hints.

nmanovic avatar Apr 01 '22 13:04 nmanovic

@ActiveChooN , don't like that in meta information we have a separate array for deleted frames. Do you see any ways to have "is_deleted" attribute as a part of information about a frame?

image

nmanovic avatar Apr 01 '22 13:04 nmanovic

@ActiveChooN , why do we have a warning when we delete a frame without annotation but don't have a warning when we restore the frame?

nmanovic avatar Apr 01 '22 14:04 nmanovic

@ActiveChooN , found a problem with tracks. Let's draw a track with key frames on 0, 10, 20 frames. If you delete the frame 0, the track will be removed completely. It tells me that the idea to delete annotations could be wrong and dangerous. Need to think one more time about that. Only in CVAT format we dump key frames only. It looks like it is the main problem.

nmanovic avatar Apr 01 '22 14:04 nmanovic

@nmanovic,

@ActiveChooN , don't like that in meta information we have a separate array for deleted frames. Do you see any ways to have "is_deleted" attribute as a part of information about a frame?

We have video meta without object per frame information, so is_deleted key is not applicable in that case.

@ActiveChooN , I see some strange artifacts for trash bin. Is it a standard picture?

It's the default delete icon in antd, fixed it manually.

ActiveChooN avatar Apr 05 '22 10:04 ActiveChooN

"It will be possible to mark a frame as deleted after the PR is merged" What is "PR is merged"?

violino22 avatar May 03 '22 13:05 violino22

The pull request (PR) should be merged into develop branch and after that we should publish a release.

nmanovic avatar May 03 '22 13:05 nmanovic

Запрос на включение (PR) должен быть объединен с веткой разработки, после чего мы должны опубликовать релиз.

Я просто наёмный работник))) Я не хочу заморачиваться. Я просто хочу клацать на кнопочки, чтоб удалялись ненужные файлы из задачи, это возможно?)))

violino22 avatar May 03 '22 13:05 violino22

Yes, I understand that. In this case just wait. I hope in next release the feature should be available.

nmanovic avatar May 03 '22 14:05 nmanovic

@nmanovic This is a very useful feature, do we have an ETA when will it be released? Thank you!

FrankUSC avatar Jul 11 '22 05:07 FrankUSC

@FrankUSC , it will be release this month.

nmanovic avatar Jul 11 '22 06:07 nmanovic

The pull request has been finished and merged in our current fork, here: https://github.com/cvat-ai/cvat

bsekachev avatar Jul 20 '22 10:07 bsekachev