Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Project export #3365

Merged
merged 68 commits into from
Aug 6, 2021
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
c53e062
init
ActiveChooN Jun 22, 2021
46e89b0
Fixed typos
ActiveChooN Jun 23, 2021
22fafe3
Merge branch 'develop' into dk/project-export
ActiveChooN Jun 24, 2021
7f4a349
Fixed cache time value
ActiveChooN Jun 24, 2021
4a5bc3a
Added MOTS PNG
ActiveChooN Jun 28, 2021
c57ab56
Merge branch 'develop' into dk/project-export
ActiveChooN Jul 1, 2021
04d14c5
temp
ActiveChooN Jul 2, 2021
f6b833f
Another temp
ActiveChooN Jul 7, 2021
d45bec8
WIP on UI
ActiveChooN Jul 7, 2021
b23a9ba
Added working modal
ActiveChooN Jul 8, 2021
4c22e11
Moved task export to modal
ActiveChooN Jul 9, 2021
a4d6094
Fixed vscode files
ActiveChooN Jul 9, 2021
aadc83c
Removed task actions
ActiveChooN Jul 9, 2021
bcd2034
Fixed image_maker calling
ActiveChooN Jul 12, 2021
3aa16a1
Separated DataExtractor class
ActiveChooN Jul 12, 2021
b59ab03
wip
ActiveChooN Jul 14, 2021
5d9b512
Added export with CVAT format
ActiveChooN Jul 15, 2021
a914d05
Fixed format resetting
ActiveChooN Jul 15, 2021
3b480fa
Fixed dir creating
ActiveChooN Jul 15, 2021
2647eb9
Fixed export in CVAT formats
ActiveChooN Jul 16, 2021
15d226a
Added simple server tests, fixed datumaro format export
ActiveChooN Jul 20, 2021
3da98c4
Reverted settings change
ActiveChooN Jul 20, 2021
d70ee77
Merge branch 'develop' into dk/project-export
ActiveChooN Jul 20, 2021
b8b3d9c
Fixed merge
ActiveChooN Jul 20, 2021
e1f8db6
Fixed some comments
ActiveChooN Jul 21, 2021
98c9083
Update cvat/apps/dataset_manager/bindings.py
ActiveChooN Jul 21, 2021
84f8b7a
Fixed comment
ActiveChooN Jul 21, 2021
4f8d28d
Merge branch 'dk/project-export' of https://github.com/openvinotoolki…
ActiveChooN Jul 21, 2021
29ffac1
Added restrictions for 3d tasks
ActiveChooN Jul 22, 2021
4e2aac1
Fixed validator
ActiveChooN Jul 22, 2021
5a48dfc
Merge branch 'develop' into dk/project-export
ActiveChooN Jul 23, 2021
ff19e71
Fixed linter and tests
ActiveChooN Jul 23, 2021
3e6d7df
Merge remote-tracking branch 'origin/develop' into dk/project-export
ActiveChooN Jul 26, 2021
dc45b9f
Fixed comments
ActiveChooN Jul 27, 2021
6c683ac
Added file extesion to the form
ActiveChooN Jul 27, 2021
abdb59f
Added notification
ActiveChooN Jul 27, 2021
f4c4e87
Fixed header
ActiveChooN Jul 27, 2021
76c073c
Added default format for tasks
ActiveChooN Jul 27, 2021
370f337
Fixed test
ActiveChooN Jul 28, 2021
141f6a6
Merge branch 'develop' into dk/project-export
ActiveChooN Jul 29, 2021
c076584
Fixed notification
ActiveChooN Jul 29, 2021
1f5f6f2
Added some classes
dvkruchinin Jul 29, 2021
7d1b9cf
Tests adaptation
dvkruchinin Jul 29, 2021
3be269c
Merge branch 'dk/project-export' of https://github.com/openvinotoolki…
dvkruchinin Jul 29, 2021
f129f76
Rename classes
dvkruchinin Jul 29, 2021
dc4b56a
The next tests adapdation
dvkruchinin Jul 29, 2021
cd67f5b
Additional tests adaptations.
dvkruchinin Jul 29, 2021
c955995
Some rework main.yaml
dvkruchinin Jul 29, 2021
7e9fcaa
Added debug
dvkruchinin Jul 29, 2021
4be0540
Debug removed
dvkruchinin Jul 29, 2021
415e275
Fixed late binding problem
ActiveChooN Jul 30, 2021
e6c95a2
Fixed 3d default format
ActiveChooN Jul 30, 2021
4a66693
Merge branch 'develop' into dk/project-export
ActiveChooN Jul 30, 2021
c7ed863
Merge pull request #3485 from dvkruchinin/dkru/project-export-adjast-…
ActiveChooN Jul 30, 2021
0687808
Added support for project with 3d tasks
ActiveChooN Aug 2, 2021
7e412f4
Fixed test
ActiveChooN Aug 2, 2021
4fe5598
Merge branch 'develop' into dk/project-export
ActiveChooN Aug 3, 2021
e635db3
Update cvat/apps/dataset_manager/views.py
ActiveChooN Aug 3, 2021
e9f1fc1
Fixed function name
ActiveChooN Aug 3, 2021
0a06baf
Revert "Added support for project with 3d tasks"
ActiveChooN Aug 3, 2021
1387b2f
Changed defaulted subset
ActiveChooN Aug 3, 2021
cbb7a1e
Update cvat/apps/dataset_manager/bindings.py
ActiveChooN Aug 3, 2021
566e490
Fixed project extractor
ActiveChooN Aug 3, 2021
42a974e
Merge branch 'develop' into dk/project-export
ActiveChooN Aug 4, 2021
333bc88
Fixed project export cache invalidation
ActiveChooN Aug 5, 2021
9952d51
Merge branch 'develop' into dk/project-export
ActiveChooN Aug 5, 2021
f5c89ef
Added CHANGELOG, increased versions
ActiveChooN Aug 5, 2021
a73122f
Merge branch 'develop' into dk/project-export
Aug 6, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@ on:
- 'master'
- 'develop'
pull_request:
branches:
- '*'
nmanovic marked this conversation as resolved.
Show resolved Hide resolved

jobs:
Unit_testing:
runs-on: ubuntu-latest
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ function ExportDatasetModal(): JSX.Element {
message: 'Dataset export started',
description: `Dataset export was started for ${instanceType} #${instance?.id}. ` +
'Download will start automaticly as soon as the dataset is ready.',
className: `cvat-notification-notice-export-${instanceType}-start`,
});
}, [instance?.id, instance instanceof core.classes.Project, instanceType]);

Expand All @@ -81,6 +82,7 @@ function ExportDatasetModal(): JSX.Element {
visible={modalVisible}
onCancel={closeModal}
onOk={() => form.submit()}
className={`cvat-modal-export-${instanceType}`}
>
<Form
name='Export dataset'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,10 @@ context('Dump/Upload annotation.', { browser: '!firefox' }, () => {
it('Save job. Dump annotation. Remove annotation. Save job.', () => {
cy.saveJob('PATCH', 200, 'saveJobDump');
cy.intercept('GET', '/api/v1/tasks/**/annotations**').as('dumpAnnotations');
cy.interactMenu('Dump annotations');
cy.get('.cvat-menu-dump-submenu-item').within(() => {
cy.contains(dumpType).click();
cy.interactMenu('Export task dataset');
cy.get('.cvat-modal-export-task').within(() => {
cy.get('.cvat-modal-export-select').should('contain.text', dumpType);
cy.contains('button', 'OK').click();
});
cy.wait('@dumpAnnotations', { timeout: 5000 }).its('response.statusCode').should('equal', 202);
cy.wait('@dumpAnnotations').its('response.statusCode').should('equal', 201);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,15 @@ context('Import annotations for frames with dots in name.', { browser: '!firefox
it('Save job. Dump annotation to YOLO format. Remove annotation. Save job.', () => {
cy.saveJob('PATCH', 200, 'saveJobDump');
cy.intercept('GET', '/api/v1/tasks/**/annotations**').as('dumpAnnotations');
cy.interactMenu('Dump annotations');
cy.get('.cvat-menu-dump-submenu-item').within(() => {
cy.contains(dumpType).click();
});
cy.interactMenu('Export task dataset');
cy.get('.cvat-modal-export-task').find('.cvat-modal-export-select').click();
cy.get('.ant-select-dropdown')
.not('.ant-select-dropdown-hidden')
.trigger('wheel', {deltaY: 700})
.contains('.cvat-modal-export-option-item', dumpType)
.click();
cy.get('.cvat-modal-export-select').should('contain.text', dumpType);
cy.get('.cvat-modal-export-task').contains('button', 'OK').click();
cy.wait('@dumpAnnotations', { timeout: 5000 }).its('response.statusCode').should('equal', 202);
cy.wait('@dumpAnnotations').its('response.statusCode').should('equal', 201);
cy.removeAnnotations();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ context('Export, import an annotation task.', { browser: '!firefox' }, () => {
cy.get('.ant-dropdown')
.not('.ant-dropdown-hidden')
.within(() => {
cy.contains('[role="menuitem"]', 'Export task').click().trigger('mouseout');
cy.contains('[role="menuitem"]', new RegExp('^Export task$')).click().trigger('mouseout');
});
cy.wait('@exportTask', { timeout: 5000 }).its('response.statusCode').should('equal', 202);
cy.wait('@exportTask').its('response.statusCode').should('equal', 201);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@

import { taskName, labelName } from '../../support/const';

context('Export as a dataset.', () => {
context('Export task dataset.', () => {
const caseId = '47';
const exportFormat = 'CVAT for images';
const rectangleShape2Points = {
points: 'By 2 Points',
type: 'Shape',
Expand All @@ -21,16 +22,20 @@ context('Export as a dataset.', () => {
before(() => {
cy.openTaskJob(taskName);
cy.createRectangle(rectangleShape2Points);
cy.saveJob();
cy.saveJob('PATCH', 200, 'saveJobExportDataset');
});

describe(`Testing case "${caseId}"`, () => {
it('Go to Menu. Press "Export as a dataset" -> "CVAT for images".', () => {
it(`Go to Menu. Press "Export task dataset" with the "${exportFormat}" format.`, () => {
cy.intercept('GET', '/api/v1/tasks/**/dataset**').as('exportDataset');
cy.interactMenu('Export as a dataset');
cy.get('.cvat-menu-export-submenu-item').within(() => {
cy.contains('CVAT for images').click();
cy.interactMenu('Export task dataset');
cy.get('.cvat-modal-export-task').within(() => {
cy.get('.cvat-modal-export-select').should('contain.text', exportFormat);
cy.get('[type="checkbox"]').should('not.be.checked').check();
cy.contains('button', 'OK').click();
});
cy.get('.cvat-notification-notice-export-task-start').should('exist');
cy.closeNotification('.cvat-notification-notice-export-task-start');
cy.wait('@exportDataset', { timeout: 5000 }).its('response.statusCode').should('equal', 202);
cy.wait('@exportDataset').its('response.statusCode').should('equal', 201);
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,13 +51,14 @@ context('Canvas 3D functionality. Dump/upload annotation. "Point Cloud" format',
it('Save a job. Dump with "Point Cloud" format.', () => {
cy.saveJob('PATCH', 200, 'saveJob');
cy.intercept('GET', '/api/v1/tasks/**/annotations**').as('dumpAnnotations');
cy.interactMenu('Dump annotations');
cy.get('.cvat-menu-dump-submenu-item').then((subMenu) => {
expect(subMenu.length).to.be.equal(2);
});
cy.get('.cvat-menu-dump-submenu-item').within(() => {
cy.contains(dumpTypePC).click();
});
cy.interactMenu('Export task dataset');
cy.get('.cvat-modal-export-task').find('.cvat-modal-export-select').click();
cy.get('.ant-select-dropdown')
.not('.ant-select-dropdown-hidden')
.contains('.cvat-modal-export-option-item', dumpTypePC)
.click();
cy.get('.cvat-modal-export-select').should('contain.text', dumpTypePC);
cy.get('.cvat-modal-export-task').contains('button', 'OK').click();
cy.wait('@dumpAnnotations', { timeout: 5000 }).its('response.statusCode').should('equal', 202);
cy.wait('@dumpAnnotations').its('response.statusCode').should('equal', 201);
cy.removeAnnotations();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,14 @@ context('Canvas 3D functionality. Dump/upload annotation. "Velodyne Points" form
it('Save a job. Dump with "Velodyne Points" format.', () => {
cy.saveJob('PATCH', 200, 'saveJob');
cy.intercept('GET', '/api/v1/tasks/**/annotations**').as('dumpAnnotations');
cy.interactMenu('Dump annotations');
cy.get('.cvat-menu-dump-submenu-item').within(() => {
cy.contains(dumpTypeVC).click();
});
cy.interactMenu('Export task dataset');
cy.get('.cvat-modal-export-task').find('.cvat-modal-export-select').click();
cy.get('.ant-select-dropdown')
.not('.ant-select-dropdown-hidden')
.contains('.cvat-modal-export-option-item', dumpTypeVC)
.click();
cy.get('.cvat-modal-export-select').should('contain.text', dumpTypeVC);
cy.get('.cvat-modal-export-task').contains('button', 'OK').click();
cy.wait('@dumpAnnotations', { timeout: 5000 }).its('response.statusCode').should('equal', 202);
cy.wait('@dumpAnnotations').its('response.statusCode').should('equal', 201);
cy.removeAnnotations();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,21 @@ context('Canvas 3D functionality. Export as a dataset.', () => {
const dumpTypePC = 'Sly Point Cloud Format';
const dumpTypeVC = 'Kitti Raw Format';

function exportDataset (format, as) {
cy.intercept('GET', '/api/v1/tasks/**/dataset**').as(as);
cy.interactMenu('Export task dataset');
cy.get('.cvat-modal-export-task').find('.cvat-modal-export-select').click();
cy.get('.ant-select-dropdown')
.not('.ant-select-dropdown-hidden')
.contains('.cvat-modal-export-option-item', format)
.click();
cy.get('.cvat-modal-export-select').should('contain.text', format);
cy.get('.cvat-modal-export-task').find('[type="checkbox"]').should('not.be.checked').check();
cy.get('.cvat-modal-export-task').contains('button', 'OK').click();
cy.wait(`@${as}`, { timeout: 5000 }).its('response.statusCode').should('equal', 202);
cy.wait(`@${as}`).its('response.statusCode').should('equal', 201);
}

before(() => {
cy.openTask(taskName);
cy.openJob();
Expand All @@ -25,23 +40,11 @@ context('Canvas 3D functionality. Export as a dataset.', () => {

describe(`Testing case "${caseId}"`, () => {
it('Export as a dataset with "Point Cloud" format.', () => {
cy.intercept('GET', '/api/v1/tasks/**/dataset**').as('exportDatasetPC');
cy.interactMenu('Export as a dataset');
cy.get('.cvat-menu-export-submenu-item').within(() => {
cy.contains(dumpTypePC).click();
});
cy.wait('@exportDatasetPC', { timeout: 5000 }).its('response.statusCode').should('equal', 202);
cy.wait('@exportDatasetPC').its('response.statusCode').should('equal', 201);
exportDataset(dumpTypePC, 'exportDatasetPC');
});

it('Export as a dataset with "Velodyne Points" format.', () => {
cy.intercept('GET', '/api/v1/tasks/**/dataset**').as('exportDatasetVC');
cy.interactMenu('Export as a dataset');
cy.get('.cvat-menu-export-submenu-item').within(() => {
cy.contains(dumpTypeVC).click();
});
cy.wait('@exportDatasetVC', { timeout: 5000 }).its('response.statusCode').should('equal', 202);
cy.wait('@exportDatasetVC').its('response.statusCode').should('equal', 201);
exportDataset(dumpTypeVC, 'exportDatasetVC');
cy.removeAnnotations();
cy.saveJob('PUT');
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

import { taskName, labelName } from '../../support/const';

context('Dump annotation if cuboid created', () => {
context('Dump annotation if cuboid created.', () => {
const issueId = '1568';
const createCuboidShape2Points = {
points: 'From rectangle',
Expand All @@ -17,30 +17,33 @@ context('Dump annotation if cuboid created', () => {
secondX: 350,
secondY: 450,
};
const dumpType = 'Datumaro';

before(() => {
cy.openTaskJob(taskName);
});

describe(`Testing issue "${issueId}"`, () => {
it('Create a cuboid', () => {
it('Create a cuboid.', () => {
cy.createCuboid(createCuboidShape2Points);
cy.get('#cvat-objects-sidebar-state-item-1').should('contain', '1').and('contain', 'CUBOID SHAPE');
});
it('Dump an annotation', () => {
cy.get('.cvat-annotation-header-left-group').within(() => {
cy.saveJob();
cy.get('button').contains('Menu').trigger('mouseover', { force: true });
});
cy.get('.cvat-annotation-menu').within(() => {
cy.get('[title="Dump annotations"]').trigger('mouseover');
});
cy.get('.cvat-menu-dump-submenu-item').within(() => {
cy.contains('Datumaro').click();
});

it('Dump an annotation.', () => {
cy.saveJob('PATCH', 200, `dump${dumpType}Format`);
cy.intercept('GET', '/api/v1/tasks/**/annotations**').as('dumpAnnotations');
cy.interactMenu('Export task dataset');
cy.get('.cvat-modal-export-task').find('.cvat-modal-export-select').click();
cy.get('.ant-select-dropdown')
.not('.ant-select-dropdown-hidden')
.contains('.cvat-modal-export-option-item', dumpType)
.click();
cy.get('.cvat-modal-export-select').should('contain.text', dumpType);
cy.get('.cvat-modal-export-task').contains('button', 'OK').click();
cy.wait('@dumpAnnotations', { timeout: 5000 }).its('response.statusCode').should('equal', 202);
cy.wait('@dumpAnnotations').its('response.statusCode').should('equal', 201);
});
it('Error notification is not exists', () => {
cy.wait(5000);

it('Error notification is not exists.', () => {
cy.get('.ant-notification-notice').should('not.exist');
});
});
Expand Down