diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000000..7c0b591b072c --- /dev/null +++ b/.gitattributes @@ -0,0 +1,29 @@ +* text=auto whitespace=trailing-space,space-before-tab,-indent-with-non-tab,tab-in-indent,tabwidth=4 + +.git* text export-ignore + +*.txt text +*.htm text +*.html text +*.js text +*.py text +*.css text +*.md text +*.yml text +Dockerfile text +LICENSE text +*.conf text +*.mimetypes text +*.sh text eol=lf + +*.avi binary +*.bmp binary +*.exr binary +*.ico binary +*.jpeg binary +*.jpg binary +*.png binary +*.gif binary +*.ttf binary +*.pdf binary + diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000000..0d5aacf8489f --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,81 @@ +# Changelog +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.2.0] - 2018-09-28 +### Added +- New annotation shapes: polygons, polylines, points +- Undo/redo feature +- Grid to estimate size of objects +- Context menu for shapes +- A converter to PASCAL VOC format +- A converter to MS COCO format +- A converter to mask format +- License header for most of all files +- .gitattribute to avoid problems with bash scripts inside a container +- CHANGELOG.md itself +- Drawing size of a bounding box during resize +- Color by instance, group, label +- Group objects +- Object propagation on next frames +- Full screen view + +### Changed +- Documentation, screencasts, the primary screenshot +- Content-type for save_job request is application/json + +### Fixed +- Player navigation if the browser's window is scrolled +- Filter doesn't support dash (-) +- Several memory leaks +- Inconsistent extensions between filenames in an annotation file and real filenames + +## [0.1.2] - 2018-08-07 +### Added +- 7z archive support when creating a task +- .vscode/launch.json file for developing with VS code + +### Fixed +- #14: docker-compose down command as written in the readme does not remove volumes +- #15: all checkboxes in temporary attributes are checked when reopening job after saving the job +- #18: extend CONTRIBUTING.md +- #19: using the same attribute for label twice -> stuck + +### Changed +- More strict verification for labels with attributes + +## [0.1.1] - 2018-07-6 +### Added +- Links on a screenshot, documentation, screencasts into README.md +- CONTRIBUTORS.md + +### Fixed +- GitHub documentation + +## 0.1.0 - 2018-06-29 +### Added +- Initial version + +## Template +``` +## [Unreleased] +### Added +- + +### Changed +- + +### Deprecated +- + +### Removed +- + +### Fixed +- + +### Security +- +``` diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d3776747e461..356157809027 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,52 +2,3 @@ When contributing to this repository, please first discuss the change you wish to make via issue, email, or any other method with the owners of this repository before making a change. - -## Development environment - -Next steps should work on clear Ubuntu 18.04. - -- Install necessary dependencies: - -```sh -$ sudo apt-get install -y curl redis-server python3-dev python3-pip python3-venv libldap2-dev libsasl2-dev -``` - -- Install [Visual Studio Code](https://code.visualstudio.com/docs/setup/linux#_debian-and-ubuntu-based-distributions) for development - -- Install CVAT on your local host: - -```sh -$ git clone https://github.com/opencv/cvat -$ cd cvat && mkdir logs keys -$ python3 -m venv .env -$ . .env/bin/activate -$ pip install -U pip wheel -$ pip install -r cvat/requirements/development.txt -$ python manage.py migrate -$ python manage.py collectstatic -``` - -- Create a super user for CVAT: - -```sh -$ python manage.py createsuperuser -Username (leave blank to use 'django'): *** -Email address: *** -Password: *** -Password (again): *** -``` - -- Run Visual Studio Code from the virtual environment - -``` -$ code . -``` - -- Inside Visual Studio Code install [Debugger for Chrome](https://marketplace.visualstudio.com/items?itemName=msjsdiag.debugger-for-chrome) and [Python](https://marketplace.visualstudio.com/items?itemName=ms-python.python) extensions - -- Reload Visual Studio Code - -- Select `CVAT Debugging` configuration and start debugging (F5) - -You have done! Now it is possible to insert breakpoints and debug server and client of the tool. \ No newline at end of file diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index c649d0b4b538..8f4fa1386724 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -10,7 +10,7 @@ * Primary developer * Author and maintainer -- **[Andrey Zhavoronkov]()** +- **[Andrey Zhavoronkov](https://github.com/azhavoro)** * Developer * Author and maintainer @@ -18,8 +18,13 @@ # Contributors - **[Victor Salimonov](https://github.com/VikTorSalimonov)** + * Documentation, screencasts +- **[Dmitry Sidnev](https://github.com/DmitriySidnev)** + + * [convert_to_coco.py](utils/coco) - an utility for converting annotation from CVAT to COCO data annotation format + - **[Sebastián Yonekura](https://github.com/syonekura)** - * [convert_to_voc.py](cvat/utils/convert_to_voc.py) - an utility for - converting CVAT XML to PASCAL VOC data annotation format. \ No newline at end of file + + * [convert_to_voc.py](utils/voc) - an utility for converting CVAT XML to PASCAL VOC data annotation format. diff --git a/Dockerfile b/Dockerfile index c86e3ae0306e..fe2952a8b9ad 100644 --- a/Dockerfile +++ b/Dockerfile @@ -87,6 +87,7 @@ COPY supervisord.conf mod_wsgi.conf wait-for-it.sh manage.py ${HOME}/ RUN pip3 install --no-cache-dir -r /tmp/requirements/${DJANGO_CONFIGURATION}.txt COPY cvat/ ${HOME}/cvat COPY tests ${HOME}/tests +RUN patch -p1 < ${HOME}/cvat/apps/engine/static/engine/js/3rdparty.patch RUN chown -R ${USER}:${USER} . # RUN all commands below as 'django' user diff --git a/LICENSE b/LICENSE index 97c8a762b6f7..aae0a08ec7db 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,21 @@ -MIT License - -Copyright (c) 2018 annotation - +Copyright (C) 2018 Intel Corporation +  Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom +the Software is furnished to do so, subject to the following conditions: +  +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. +  +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES +OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE +OR OTHER DEALINGS IN THE SOFTWARE. +  +SPDX-License-Identifier: MIT diff --git a/README.md b/README.md index 9ed6f778b89c..18f0c9545d5b 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ CVAT is completely re-designed and re-implemented version of [Video Annotation Tool from Irvine, California](http://carlvondrick.com/vatic/) tool. It is free, online, interactive video and image annotation tool for computer vision. It is being used by our team to annotate million of objects with different properties. Many UI and UX decisions are based on feedbacks from professional data annotation team. -![CVAT screenshot](cvat/apps/documentation/static/documentation/images/gif003.gif) +![CVAT screenshot](cvat/apps/documentation/static/documentation/images/cvat.jpg) ## Documentation @@ -11,9 +11,10 @@ CVAT is completely re-designed and re-implemented version of [Video Annotation T ## Screencasts -- [Annotation mode](https://www.youtube.com/watch?v=uSqaQENdyJE) -- [Interpolation mode](https://www.youtube.com/watch?v=sc5X5hvxNfA) -- [Attribute mode](https://www.youtube.com/watch?v=5yXaG0V7X0Q) +- [Annotation mode](https://youtu.be/6h7HxGL6Ct4) +- [Interpolation mode](https://youtu.be/U3MYDhESHo4) +- [Attribute mode](https://youtu.be/UPNfWl8Egd8) +- [Segmentation mode](https://youtu.be/6IJ0QN7PBKo) ## LICENSE @@ -82,7 +83,8 @@ Type your login/password for the superuser [on the login page](http://localhost: ### Stop all containers -The command below will stop and remove containers and networks created by `up`. See documentation for [docker-compose down](https://docs.docker.com/compose/reference/down/) for more details. +The command below will stop and remove containers, networks, volumes, and images +created by `up`. ```bash docker-compose down @@ -116,3 +118,26 @@ cvat: environment: DJANGO_LOG_SERVER_URL: https://annotation.example.com:5000 ``` + +### Share path + +You can use a share storage for data uploading during you are creating a task. To do that you can mount it to CVAT docker container. Example of docker-compose.override.yml for this purpose: + +```yml +version: "2.3" + +services: + cvat: + environment: + CVAT_SHARE_URL: "Mounted from /mnt/share host directory" + volumes: + cvat_share:/home/django/share:ro + +volumes: + cvat_share: + driver_opts: + type: none + device: /mnt/share + o: bind +``` +You can change the share device path to your actual share. For user convenience we have defined the enviroment variable $CVAT_SHARE_URL. This variable contains a text (url for example) which will be being shown in the client-share browser. diff --git a/cvat/__init__.py b/cvat/__init__.py index e69de29bb2d1..d8e62e54b356 100644 --- a/cvat/__init__.py +++ b/cvat/__init__.py @@ -0,0 +1,5 @@ + +# Copyright (C) 2018 Intel Corporation +# +# SPDX-License-Identifier: MIT + diff --git a/cvat/apps/authentication/__init__.py b/cvat/apps/authentication/__init__.py index b3d5c6b0799a..a7b92720ff0c 100644 --- a/cvat/apps/authentication/__init__.py +++ b/cvat/apps/authentication/__init__.py @@ -1 +1,7 @@ + +# Copyright (C) 2018 Intel Corporation +# +# SPDX-License-Identifier: MIT + default_app_config = 'cvat.apps.authentication.apps.AuthenticationConfig' + diff --git a/cvat/apps/authentication/admin.py b/cvat/apps/authentication/admin.py index 8c38f3f3dad5..af8dfc47525b 100644 --- a/cvat/apps/authentication/admin.py +++ b/cvat/apps/authentication/admin.py @@ -1,3 +1,9 @@ + +# Copyright (C) 2018 Intel Corporation +# +# SPDX-License-Identifier: MIT + from django.contrib import admin # Register your models here. + diff --git a/cvat/apps/authentication/apps.py b/cvat/apps/authentication/apps.py index f742de0441c8..c0e41e420d6a 100644 --- a/cvat/apps/authentication/apps.py +++ b/cvat/apps/authentication/apps.py @@ -1,3 +1,8 @@ + +# Copyright (C) 2018 Intel Corporation +# +# SPDX-License-Identifier: MIT + from django.apps import AppConfig from django.db.models.signals import post_migrate, post_save from .settings.authentication import DJANGO_AUTH_TYPE diff --git a/cvat/apps/authentication/decorators.py b/cvat/apps/authentication/decorators.py index 1e3d49183945..3ef9d2631ec6 100644 --- a/cvat/apps/authentication/decorators.py +++ b/cvat/apps/authentication/decorators.py @@ -1,3 +1,8 @@ + +# Copyright (C) 2018 Intel Corporation +# +# SPDX-License-Identifier: MIT + from django.contrib.auth import REDIRECT_FIELD_NAME from django.shortcuts import resolve_url, reverse from django.http import JsonResponse diff --git a/cvat/apps/authentication/forms.py b/cvat/apps/authentication/forms.py index 9b6ab87779ae..238b15988e9b 100644 --- a/cvat/apps/authentication/forms.py +++ b/cvat/apps/authentication/forms.py @@ -1,3 +1,8 @@ + +# Copyright (C) 2018 Intel Corporation +# +# SPDX-License-Identifier: MIT + from django.contrib.auth.forms import ( UsernameField, AuthenticationForm, diff --git a/cvat/apps/authentication/migrations/__init__.py b/cvat/apps/authentication/migrations/__init__.py index e69de29bb2d1..d8e62e54b356 100644 --- a/cvat/apps/authentication/migrations/__init__.py +++ b/cvat/apps/authentication/migrations/__init__.py @@ -0,0 +1,5 @@ + +# Copyright (C) 2018 Intel Corporation +# +# SPDX-License-Identifier: MIT + diff --git a/cvat/apps/authentication/models.py b/cvat/apps/authentication/models.py index 71a836239075..cdf3b0827bf1 100644 --- a/cvat/apps/authentication/models.py +++ b/cvat/apps/authentication/models.py @@ -1,3 +1,9 @@ + +# Copyright (C) 2018 Intel Corporation +# +# SPDX-License-Identifier: MIT + from django.db import models # Create your models here. + diff --git a/cvat/apps/authentication/settings/__init__.py b/cvat/apps/authentication/settings/__init__.py index e69de29bb2d1..d8e62e54b356 100644 --- a/cvat/apps/authentication/settings/__init__.py +++ b/cvat/apps/authentication/settings/__init__.py @@ -0,0 +1,5 @@ + +# Copyright (C) 2018 Intel Corporation +# +# SPDX-License-Identifier: MIT + diff --git a/cvat/apps/authentication/settings/auth_ldap.py b/cvat/apps/authentication/settings/auth_ldap.py index 1abc5ac1cd55..01021060e106 100644 --- a/cvat/apps/authentication/settings/auth_ldap.py +++ b/cvat/apps/authentication/settings/auth_ldap.py @@ -1,3 +1,8 @@ + +# Copyright (C) 2018 Intel Corporation +# +# SPDX-License-Identifier: MIT + from django.conf import settings import ldap from django_auth_ldap.config import LDAPSearch, NestedActiveDirectoryGroupType diff --git a/cvat/apps/authentication/settings/auth_simple.py b/cvat/apps/authentication/settings/auth_simple.py index dcd04277246a..41a18c98f12f 100644 --- a/cvat/apps/authentication/settings/auth_simple.py +++ b/cvat/apps/authentication/settings/auth_simple.py @@ -1,2 +1,8 @@ + +# Copyright (C) 2018 Intel Corporation +# +# SPDX-License-Identifier: MIT + # Specify groups that new users will have AUTH_SIMPLE_DEFAULT_GROUPS = [] + diff --git a/cvat/apps/authentication/settings/authentication.py b/cvat/apps/authentication/settings/authentication.py index 2cb9d4707e26..3948d0eeab7d 100644 --- a/cvat/apps/authentication/settings/authentication.py +++ b/cvat/apps/authentication/settings/authentication.py @@ -1,3 +1,8 @@ + +# Copyright (C) 2018 Intel Corporation +# +# SPDX-License-Identifier: MIT + from django.conf import settings import os diff --git a/cvat/apps/authentication/signals.py b/cvat/apps/authentication/signals.py index 3a30ac2099e6..2dfc89dc6cdb 100644 --- a/cvat/apps/authentication/signals.py +++ b/cvat/apps/authentication/signals.py @@ -1,3 +1,8 @@ + +# Copyright (C) 2018 Intel Corporation +# +# SPDX-License-Identifier: MIT + from django.db import models from django.conf import settings diff --git a/cvat/apps/authentication/templates/403.html b/cvat/apps/authentication/templates/403.html index daaa6181988d..e275bb1fe140 100644 --- a/cvat/apps/authentication/templates/403.html +++ b/cvat/apps/authentication/templates/403.html @@ -1,3 +1,8 @@ + {% extends "auth_base.html" %} {% block title %}Forbidden{% endblock %} diff --git a/cvat/apps/authentication/templates/login.html b/cvat/apps/authentication/templates/login.html index d039bcb6281f..128a8ccb849f 100644 --- a/cvat/apps/authentication/templates/login.html +++ b/cvat/apps/authentication/templates/login.html @@ -1,3 +1,8 @@ + {% extends "auth_base.html" %} {% block title %}Login{% endblock %} diff --git a/cvat/apps/authentication/templates/login_ldap.html b/cvat/apps/authentication/templates/login_ldap.html index ba89202242da..8cba181db5fd 100644 --- a/cvat/apps/authentication/templates/login_ldap.html +++ b/cvat/apps/authentication/templates/login_ldap.html @@ -1,3 +1,8 @@ + {% extends "auth_base.html" %} {% block title %}Login{% endblock %} diff --git a/cvat/apps/authentication/templates/note.html b/cvat/apps/authentication/templates/note.html index 2791447dacb4..ba2fea92248b 100644 --- a/cvat/apps/authentication/templates/note.html +++ b/cvat/apps/authentication/templates/note.html @@ -1,2 +1,7 @@ +

\ No newline at end of file diff --git a/cvat/apps/authentication/templates/register.html b/cvat/apps/authentication/templates/register.html index aa0793b8b689..b655e221eb84 100644 --- a/cvat/apps/authentication/templates/register.html +++ b/cvat/apps/authentication/templates/register.html @@ -1,3 +1,8 @@ + {% extends "auth_base.html" %} {% block title %}Create user{% endblock %} diff --git a/cvat/apps/authentication/templates/user_profile.html b/cvat/apps/authentication/templates/user_profile.html index 82f9c231e02c..37ea7d49b11e 100644 --- a/cvat/apps/authentication/templates/user_profile.html +++ b/cvat/apps/authentication/templates/user_profile.html @@ -1,3 +1,8 @@ +
{% if user.is_authenticated %} {% if user.ldap_user and 'thumbnailPhoto' in user.ldap_user.attrs %} diff --git a/cvat/apps/authentication/tests.py b/cvat/apps/authentication/tests.py index 7ce503c2dd97..53bc3b7adb85 100644 --- a/cvat/apps/authentication/tests.py +++ b/cvat/apps/authentication/tests.py @@ -1,3 +1,9 @@ + +# Copyright (C) 2018 Intel Corporation +# +# SPDX-License-Identifier: MIT + from django.test import TestCase # Create your tests here. + diff --git a/cvat/apps/authentication/urls.py b/cvat/apps/authentication/urls.py index 926ce6b5a9ee..d12271719054 100644 --- a/cvat/apps/authentication/urls.py +++ b/cvat/apps/authentication/urls.py @@ -1,3 +1,8 @@ + +# Copyright (C) 2018 Intel Corporation +# +# SPDX-License-Identifier: MIT + from django.urls import path import os diff --git a/cvat/apps/authentication/views.py b/cvat/apps/authentication/views.py index 2ab2d9676501..2964cf4b82a7 100644 --- a/cvat/apps/authentication/views.py +++ b/cvat/apps/authentication/views.py @@ -1,3 +1,8 @@ + +# Copyright (C) 2018 Intel Corporation +# +# SPDX-License-Identifier: MIT + from django.shortcuts import render from django.contrib.auth.views import LoginView from django.http import HttpResponseRedirect diff --git a/cvat/apps/dashboard/__init__.py b/cvat/apps/dashboard/__init__.py index e69de29bb2d1..d8e62e54b356 100644 --- a/cvat/apps/dashboard/__init__.py +++ b/cvat/apps/dashboard/__init__.py @@ -0,0 +1,5 @@ + +# Copyright (C) 2018 Intel Corporation +# +# SPDX-License-Identifier: MIT + diff --git a/cvat/apps/dashboard/admin.py b/cvat/apps/dashboard/admin.py index 8c38f3f3dad5..af8dfc47525b 100644 --- a/cvat/apps/dashboard/admin.py +++ b/cvat/apps/dashboard/admin.py @@ -1,3 +1,9 @@ + +# Copyright (C) 2018 Intel Corporation +# +# SPDX-License-Identifier: MIT + from django.contrib import admin # Register your models here. + diff --git a/cvat/apps/dashboard/apps.py b/cvat/apps/dashboard/apps.py index 50878e766268..73611b409636 100644 --- a/cvat/apps/dashboard/apps.py +++ b/cvat/apps/dashboard/apps.py @@ -1,5 +1,11 @@ + +# Copyright (C) 2018 Intel Corporation +# +# SPDX-License-Identifier: MIT + from django.apps import AppConfig class DashboardConfig(AppConfig): name = 'dashboard' + diff --git a/cvat/apps/dashboard/migrations/__init__.py b/cvat/apps/dashboard/migrations/__init__.py index e69de29bb2d1..d8e62e54b356 100644 --- a/cvat/apps/dashboard/migrations/__init__.py +++ b/cvat/apps/dashboard/migrations/__init__.py @@ -0,0 +1,5 @@ + +# Copyright (C) 2018 Intel Corporation +# +# SPDX-License-Identifier: MIT + diff --git a/cvat/apps/dashboard/models.py b/cvat/apps/dashboard/models.py index 71a836239075..cdf3b0827bf1 100644 --- a/cvat/apps/dashboard/models.py +++ b/cvat/apps/dashboard/models.py @@ -1,3 +1,9 @@ + +# Copyright (C) 2018 Intel Corporation +# +# SPDX-License-Identifier: MIT + from django.db import models # Create your models here. + diff --git a/cvat/apps/dashboard/static/dashboard/js/dashboard.js b/cvat/apps/dashboard/static/dashboard/js/dashboard.js index 28dab1f10822..4a8986668ca4 100644 --- a/cvat/apps/dashboard/static/dashboard/js/dashboard.js +++ b/cvat/apps/dashboard/static/dashboard/js/dashboard.js @@ -1,9 +1,16 @@ +/* + * Copyright (C) 2018 Intel Corporation + * + * SPDX-License-Identifier: MIT + */ + "use strict"; /* Dashboard entrypoint */ window.cvat = window.cvat || {}; window.cvat.dashboard = window.cvat.dashboard || {}; window.cvat.dashboard.uiCallbacks = window.cvat.dashboard.uiCallbacks || []; +window.cvat.config = new Config(); window.cvat.dashboard.uiCallbacks.push(function(elements) { elements.each(function(idx) { @@ -93,6 +100,7 @@ function setupTaskCreator() { let cancelBrowseServer = $('#dashboardCancelBrowseServer'); let submitBrowseServer = $('#dashboardSubmitBrowseServer'); let flipImagesBox = $('#dashboardFlipImages'); + let zOrderBox = $('#dashboardZOrder'); let segmentSizeInput = $('#dashboardSegmentSize'); let customSegmentSize = $('#dashboardCustomSegment'); let overlapSizeInput = $('#dashboardOverlap'); @@ -109,6 +117,7 @@ function setupTaskCreator() { let bugTrackerLink = bugTrackerInput.prop('value'); let source = 'local'; let flipImages = false; + let zOrder = false; let segmentSize = 5000; let overlapSize = 0; let compressQuality = 50; @@ -168,7 +177,13 @@ function setupTaskCreator() { updateSelectedFiles(); }); - flipImagesBox.on('click', (e) => {flipImages = e.target.checked;}); + flipImagesBox.on('click', (e) => { + flipImages = e.target.checked; + }); + + zOrderBox.on('click', (e) => { + zOrder = e.target.checked; + }); customSegmentSize.on('change', (e) => segmentSizeInput.prop('disabled', !e.target.checked)); customOverlapSize.on('change', (e) => overlapSizeInput.prop('disabled', !e.target.checked)); customCompressQuality.on('change', (e) => imageQualityInput.prop('disabled', !e.target.checked)); @@ -258,6 +273,7 @@ function setupTaskCreator() { taskData.append('bug_tracker_link', bugTrackerLink); taskData.append('labels', labels); taskData.append('flip_flag', flipImages); + taskData.append('z_order', zOrder); taskData.append('storage', source); if (customSegmentSize.prop('checked')) { @@ -285,7 +301,11 @@ function setupTaskCreator() { taskMessage.css('color', 'red'); taskMessage.text(response); }, - () => submitCreate.prop('disabled', false)); + () => submitCreate.prop('disabled', false), + (status) => { + taskMessage.css('color', 'blue'); + taskMessage.text(status); + }); }); function updateSelectedFiles() { @@ -385,7 +405,7 @@ function setupSearch() { /* Server requests */ -function createTaskRequest(oData, onSuccessRequest, onSuccessCreate, onError, onComplete) { +function createTaskRequest(oData, onSuccessRequest, onSuccessCreate, onError, onComplete, onUpdateStatus) { $.ajax({ url: '/create/task', type: 'POST', @@ -433,6 +453,9 @@ function createTaskRequest(oData, onSuccessRequest, onSuccessCreate, onError, on onComplete(); onError(data.stderr); } + else if (data['state'] == 'started' && 'status' in data) { + onUpdateStatus(data['status']); + } } } } @@ -488,7 +511,7 @@ function uploadAnnotationRequest() { function loadXML(e) { input.remove(); - let overlay = showOverlay("File uploading.."); + let overlay = showOverlay("File is being uploaded.."); let file = e.target.files[0]; let fileReader = new FileReader(); fileReader.onload = (e) => parseFile(e, overlay); @@ -501,39 +524,48 @@ function uploadAnnotationRequest() { $.ajax({ url: '/get/task/' + window.cvat.dashboard.taskID, success: function(data) { - let labels = new LabelsInfo(data.spec); - let fakeJob = { + let annotationParser = new AnnotationParser({ start: 0, - stop: data.size + stop: data.size, + image_meta_data: data.image_meta_data, + flipped: data.flipped + }, new LabelsInfo(data.spec)); + + let asyncParse = function() { + let parsed = null; + try { + parsed = annotationParser.parse(xmlText); + } + catch(error) { + overlay.remove(); + showMessage("Parsing errors was occured. " + error); + return; + } + + let asyncSave = function() { + $.ajax({ + url: '/save/annotation/task/' + window.cvat.dashboard.taskID, + type: 'POST', + data: JSON.stringify(parsed), + contentType: 'application/json', + success: function() { + let message = 'Annotation successfully uploaded'; + showMessage(message); + }, + error: function(response) { + let message = 'Annotation uploading errors was occured. ' + response.responseText; + showMessage(message); + }, + complete: () => overlay.remove() + }); + }; + + overlay.setMessage('Annotation is being saved..'); + setTimeout(asyncSave); }; - let annotationParser = new AnnotationParser(labels, fakeJob); - let parsed = null; - try { - parsed = annotationParser.parse(xmlText); - } - catch(error) { - let message = "Parsing errors was occured. " + error; - showMessage(message); - overlay.remove(); - return; - } - overlay.setMessage('Annotation saving..'); - - $.ajax({ - url: '/save/annotation/task/' + window.cvat.dashboard.taskID, - type: 'POST', - data: JSON.stringify(parsed), - contentType: 'application/json', - success: function() { - let message = 'Annotation successfully uploaded'; - showMessage(message); - }, - error: function(response) { - let message = 'Annotation uploading errors was occured. ' + response.responseText; - showMessage(message); - }, - complete: () => overlay.remove() - }); + + overlay.setMessage('File is being parsed..'); + setTimeout(asyncParse); }, error: function(response) { overlay.remove(); diff --git a/cvat/apps/dashboard/static/dashboard/stylesheet.css b/cvat/apps/dashboard/static/dashboard/stylesheet.css index 1f938ece678b..a3430e857561 100644 --- a/cvat/apps/dashboard/static/dashboard/stylesheet.css +++ b/cvat/apps/dashboard/static/dashboard/stylesheet.css @@ -1,3 +1,9 @@ +/* + * Copyright (C) 2018 Intel Corporation + * + * SPDX-License-Identifier: MIT + */ + .dashboardTaskUI { margin: 5px auto; width: 1200px; diff --git a/cvat/apps/dashboard/templates/dashboard/dashboard.html b/cvat/apps/dashboard/templates/dashboard/dashboard.html index 41bbfcb71fd1..be700127a325 100644 --- a/cvat/apps/dashboard/templates/dashboard/dashboard.html +++ b/cvat/apps/dashboard/templates/dashboard/dashboard.html @@ -1,3 +1,8 @@ + {% extends 'engine/base.html' %} {% load static %} {% load pagination_tags %} @@ -25,9 +30,8 @@ + - - - + + + + + + + {% for js_file in js_3rdparty %} {% endfor %} @@ -25,28 +35,25 @@ + - + + - - - - - - - + + - - + + + - {% endblock %} @@ -58,9 +65,31 @@ - - + + + + + + + + + + + + +
@@ -101,10 +130,47 @@ + + +
+
+ + + + + + + +
+
+
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
@@ -115,85 +181,94 @@
-
+


- - -