Skip to content

Commit 5e0160b

Browse files
authored
Supported interpolation for 3D cuboids (#5629)
1 parent b263d87 commit 5e0160b

File tree

35 files changed

+771
-300
lines changed

35 files changed

+771
-300
lines changed

CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1515
- \[SDK\] Class to represent a project as a PyTorch dataset
1616
(<https://github.com/opencv/cvat/pull/5523>)
1717
- Grid view and multiple context images supported (<https://github.com/opencv/cvat/pull/5542>)
18+
- Interpolation is now supported for 3D cuboids.
19+
Tracks can be exported/imported to/from Datumaro and Sly Pointcloud formats (<https://github.com/opencv/cvat/pull/5629>)
1820
- Support for custom file to job splits in tasks (server API & SDK only)
1921
(<https://github.com/opencv/cvat/pull/5536>)
2022
- \[SDK\] A PyTorch adapter setting to disable cache updates

cvat-canvas3d/src/typescript/canvas3d.ts

+13-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// Copyright (C) 2021-2022 Intel Corporation
2-
// Copyright (C) 2022 CVAT.ai Corporation
2+
// Copyright (C) 2022-2023 CVAT.ai Corporation
33
//
44
// SPDX-License-Identifier: MIT
55

@@ -15,6 +15,8 @@ import {
1515
ShapeProperties,
1616
GroupData,
1717
Configuration,
18+
SplitData,
19+
MergeData,
1820
} from './canvas3dModel';
1921
import {
2022
Canvas3dView, Canvas3dViewImpl, ViewsDOM, CameraAction,
@@ -38,6 +40,8 @@ interface Canvas3d {
3840
fitCanvas(): void;
3941
fit(): void;
4042
group(groupData: GroupData): void;
43+
merge(mergeData: MergeData): void;
44+
split(splitData: SplitData): void;
4145
destroy(): void;
4246
}
4347

@@ -80,6 +84,14 @@ class Canvas3dImpl implements Canvas3d {
8084
this.model.group(groupData);
8185
}
8286

87+
public split(splitData: SplitData): void {
88+
this.model.split(splitData);
89+
}
90+
91+
public merge(mergeData: MergeData): void {
92+
this.model.merge(mergeData);
93+
}
94+
8395
public isAbleToChangeFrame(): boolean {
8496
return this.model.isAbleToChangeFrame();
8597
}

cvat-canvas3d/src/typescript/canvas3dController.ts

+13-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
// Copyright (C) 2021-2022 Intel Corporation
2-
// Copyright (C) 2022 CVAT.ai Corporation
2+
// Copyright (C) 2022-2023 CVAT.ai Corporation
33
//
44
// SPDX-License-Identifier: MIT
55

66
import { ObjectState } from '.';
77
import {
8-
Canvas3dModel, Mode, DrawData, ActiveElement, GroupData, Configuration,
8+
Canvas3dModel, Mode, DrawData, ActiveElement,
9+
GroupData, Configuration, MergeData, SplitData,
910
} from './canvas3dModel';
1011

1112
export interface Canvas3dController {
@@ -17,6 +18,8 @@ export interface Canvas3dController {
1718
readonly objects: ObjectState[];
1819
mode: Mode;
1920
group(groupData: GroupData): void;
21+
merge(mergeData: MergeData): void;
22+
split(splitData: SplitData): void;
2023
}
2124

2225
export class Canvas3dControllerImpl implements Canvas3dController {
@@ -61,4 +64,12 @@ export class Canvas3dControllerImpl implements Canvas3dController {
6164
public group(groupData: GroupData): void {
6265
this.model.group(groupData);
6366
}
67+
68+
public merge(mergeData: MergeData): void {
69+
this.model.merge(mergeData);
70+
}
71+
72+
public split(splitData: SplitData): void {
73+
this.model.split(splitData);
74+
}
6475
}

cvat-canvas3d/src/typescript/canvas3dModel.ts

+49-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// Copyright (C) 2021-2022 Intel Corporation
2-
// Copyright (C) 2022 CVAT.ai Corporation
2+
// Copyright (C) 2022-2023 CVAT.ai Corporation
33
//
44
// SPDX-License-Identifier: MIT
55

@@ -18,7 +18,14 @@ export interface ActiveElement {
1818

1919
export interface GroupData {
2020
enabled: boolean;
21-
grouped: ObjectState[];
21+
}
22+
23+
export interface MergeData {
24+
enabled: boolean;
25+
}
26+
27+
export interface SplitData {
28+
enabled: boolean;
2229
}
2330

2431
export interface Configuration {
@@ -80,6 +87,8 @@ export enum UpdateReasons {
8087
DRAG_CANVAS = 'drag_canvas',
8188
SHAPE_ACTIVATED = 'shape_activated',
8289
GROUP = 'group',
90+
MERGE = 'merge',
91+
SPLIT = 'split',
8392
FITTED_CANVAS = 'fitted_canvas',
8493
CONFIG_UPDATED = 'config_updated',
8594
SHAPES_CONFIG_UPDATED = 'shapes_config_updated',
@@ -91,6 +100,8 @@ export enum Mode {
91100
EDIT = 'edit',
92101
DRAG_CANVAS = 'drag_canvas',
93102
GROUP = 'group',
103+
MERGE = 'merge',
104+
SPLIT = 'split',
94105
}
95106

96107
export interface Canvas3dDataModel {
@@ -106,6 +117,8 @@ export interface Canvas3dDataModel {
106117
objects: ObjectState[];
107118
shapeProperties: ShapeProperties;
108119
groupData: GroupData;
120+
mergeData: MergeData;
121+
splitData: SplitData;
109122
configuration: Configuration;
110123
isFrameUpdating: boolean;
111124
nextSetupRequest: {
@@ -119,6 +132,7 @@ export interface Canvas3dModel {
119132
data: Canvas3dDataModel;
120133
readonly imageIsDeleted: boolean;
121134
readonly groupData: GroupData;
135+
readonly mergeData: MergeData;
122136
readonly configuration: Configuration;
123137
readonly objects: ObjectState[];
124138
setup(frameData: any, objectStates: ObjectState[]): void;
@@ -131,6 +145,8 @@ export interface Canvas3dModel {
131145
configure(configuration: Configuration): void;
132146
fit(): void;
133147
group(groupData: GroupData): void;
148+
split(splitData: SplitData): void;
149+
merge(mergeData: MergeData): void;
134150
destroy(): void;
135151
updateCanvasObjects(): void;
136152
unlockFrameUpdating(): void;
@@ -166,7 +182,12 @@ export class Canvas3dModelImpl extends MasterImpl implements Canvas3dModel {
166182
mode: Mode.IDLE,
167183
groupData: {
168184
enabled: false,
169-
grouped: [],
185+
},
186+
mergeData: {
187+
enabled: false,
188+
},
189+
splitData: {
190+
enabled: false,
170191
},
171192
shapeProperties: {
172193
opacity: 40,
@@ -343,10 +364,30 @@ export class Canvas3dModelImpl extends MasterImpl implements Canvas3dModel {
343364
return;
344365
}
345366
this.data.mode = groupData.enabled ? Mode.GROUP : Mode.IDLE;
346-
this.data.groupData = { ...this.data.groupData, ...groupData };
367+
this.data.groupData = { ...groupData };
347368
this.notify(UpdateReasons.GROUP);
348369
}
349370

371+
public split(splitData: SplitData): void {
372+
if (![Mode.IDLE, Mode.SPLIT].includes(this.data.mode)) {
373+
throw Error(`Canvas is busy. Action: ${this.data.mode}`);
374+
}
375+
376+
this.data.mode = splitData.enabled ? Mode.SPLIT : Mode.IDLE;
377+
this.data.splitData = { ...splitData };
378+
this.notify(UpdateReasons.SPLIT);
379+
}
380+
381+
public merge(mergeData: MergeData): void {
382+
if (![Mode.IDLE, Mode.MERGE].includes(this.data.mode)) {
383+
throw Error(`Canvas is busy. Action: ${this.data.mode}`);
384+
}
385+
386+
this.data.mode = mergeData.enabled ? Mode.MERGE : Mode.IDLE;
387+
this.data.mergeData = { ...mergeData };
388+
this.notify(UpdateReasons.MERGE);
389+
}
390+
350391
public configure(configuration: Configuration): void {
351392
if (typeof configuration.resetZoom === 'boolean') {
352393
this.data.configuration.resetZoom = configuration.resetZoom;
@@ -391,6 +432,10 @@ export class Canvas3dModelImpl extends MasterImpl implements Canvas3dModel {
391432
return { ...this.data.groupData };
392433
}
393434

435+
public get mergeData(): MergeData {
436+
return { ...this.data.mergeData };
437+
}
438+
394439
public get imageIsDeleted(): boolean {
395440
return this.data.imageIsDeleted;
396441
}

0 commit comments

Comments
 (0)