Skip to content

Commit e3e8d99

Browse files
authored
Updated page with allocation report (cvat-ai#8558)
1 parent 0abe52f commit e3e8d99

15 files changed

+290
-271
lines changed

cvat-core/src/api.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import QualityReport from './quality-report';
2626
import QualityConflict from './quality-conflict';
2727
import QualitySettings from './quality-settings';
2828
import AnalyticsReport from './analytics-report';
29-
import ValidationLayout from './validation-layout';
29+
import { JobValidationLayout, TaskValidationLayout } from './validation-layout';
3030
import { Request } from './request';
3131

3232
import * as enums from './enums';
@@ -427,7 +427,8 @@ function build(): CVATCore {
427427
QualityReport,
428428
Request,
429429
FramesMetaData,
430-
ValidationLayout,
430+
JobValidationLayout,
431+
TaskValidationLayout,
431432
},
432433
utils: {
433434
mask2Rle,

cvat-core/src/index.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import QualityConflict from './quality-conflict';
3232
import QualitySettings from './quality-settings';
3333
import AnalyticsReport from './analytics-report';
3434
import AnnotationGuide from './guide';
35-
import ValidationLayout from './validation-layout';
35+
import { JobValidationLayout, TaskValidationLayout } from './validation-layout';
3636
import { Request } from './request';
3737
import BaseSingleFrameAction, { listActions, registerAction, runActions } from './annotations-actions';
3838
import {
@@ -216,7 +216,8 @@ export default interface CVATCore {
216216
AnalyticsReport: typeof AnalyticsReport;
217217
Request: typeof Request;
218218
FramesMetaData: typeof FramesMetaData;
219-
ValidationLayout: typeof ValidationLayout;
219+
JobValidationLayout: typeof JobValidationLayout;
220+
TaskValidationLayout: typeof TaskValidationLayout;
220221
};
221222
utils: {
222223
mask2Rle: typeof mask2Rle;

cvat-core/src/server-proxy.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import {
1919
SerializedInvitationData, SerializedCloudStorage, SerializedFramesMetaData, SerializedCollection,
2020
SerializedQualitySettingsData, APIQualitySettingsFilter, SerializedQualityConflictData, APIQualityConflictsFilter,
2121
SerializedQualityReportData, APIQualityReportsFilter, SerializedAnalyticsReport, APIAnalyticsReportFilter,
22-
SerializedRequest, SerializedValidationLayout,
22+
SerializedRequest, SerializedJobValidationLayout, SerializedTaskValidationLayout,
2323
} from './server-response-types';
2424
import { PaginatedResource } from './core-types';
2525
import { Request } from './request';
@@ -1384,7 +1384,7 @@ async function deleteJob(jobID: number): Promise<void> {
13841384

13851385
const validationLayout = (instance: 'tasks' | 'jobs') => async (
13861386
id: number,
1387-
): Promise<SerializedValidationLayout | null> => {
1387+
): Promise<SerializedJobValidationLayout | SerializedTaskValidationLayout> => {
13881388
const { backendAPI } = config;
13891389

13901390
try {

cvat-core/src/server-response-types.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -524,8 +524,14 @@ export interface SerializedRequest {
524524
owner?: any;
525525
}
526526

527-
export interface SerializedValidationLayout {
527+
export interface SerializedJobValidationLayout {
528528
honeypot_count?: number;
529529
honeypot_frames?: number[];
530530
honeypot_real_frames?: number[];
531531
}
532+
533+
export interface SerializedTaskValidationLayout extends SerializedJobValidationLayout {
534+
mode: 'gt' | 'gt_pool' | null;
535+
validation_frames?: number[];
536+
disabled_frames?: number[];
537+
}

cvat-core/src/session-implementation.ts

+9-6
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@ import {
2727
decodePreview,
2828
} from './frames';
2929
import Issue from './issue';
30-
import { SerializedLabel, SerializedTask, SerializedValidationLayout } from './server-response-types';
30+
import {
31+
SerializedLabel, SerializedTask, SerializedJobValidationLayout,
32+
SerializedTaskValidationLayout,
33+
} from './server-response-types';
3134
import { checkInEnum, checkObjectType } from './common';
3235
import {
3336
getCollection, getSaver, clearAnnotations, getAnnotations,
@@ -37,7 +40,7 @@ import AnnotationGuide from './guide';
3740
import requestsManager from './requests-manager';
3841
import { Request } from './request';
3942
import User from './user';
40-
import ValidationLayout from './validation-layout';
43+
import { JobValidationLayout, TaskValidationLayout } from './validation-layout';
4144

4245
// must be called with task/job context
4346
async function deleteFrameWrapper(jobID, frame): Promise<void> {
@@ -171,7 +174,7 @@ export function implementJob(Job: typeof JobClass): typeof JobClass {
171174
): ReturnType<typeof JobClass.prototype.validationLayout> {
172175
const result = await serverProxy.jobs.validationLayout(this.id);
173176
if (Object.keys(result).length) {
174-
return new ValidationLayout(result as Required<SerializedValidationLayout>);
177+
return new JobValidationLayout(result as SerializedJobValidationLayout);
175178
}
176179

177180
return null;
@@ -641,9 +644,9 @@ export function implementTask(Task: typeof TaskClass): typeof TaskClass {
641644
value: async function validationLayoutImplementation(
642645
this: TaskClass,
643646
): ReturnType<typeof TaskClass.prototype.validationLayout> {
644-
const result = await serverProxy.tasks.validationLayout(this.id);
645-
if (Object.keys(result).length) {
646-
return new ValidationLayout(result as Required<SerializedValidationLayout>);
647+
const result = await serverProxy.tasks.validationLayout(this.id) as SerializedTaskValidationLayout;
648+
if (result.mode !== null) {
649+
return new TaskValidationLayout(result);
647650
}
648651

649652
return null;

cvat-core/src/session.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import { Request } from './request';
2828
import logger from './logger';
2929
import Issue from './issue';
3030
import ObjectState from './object-state';
31-
import ValidationLayout from './validation-layout';
31+
import { JobValidationLayout, TaskValidationLayout } from './validation-layout';
3232

3333
function buildDuplicatedAPI(prototype) {
3434
Object.defineProperties(prototype, {
@@ -686,7 +686,7 @@ export class Job extends Session {
686686
return result;
687687
}
688688

689-
async validationLayout(): Promise<ValidationLayout | null> {
689+
async validationLayout(): Promise<JobValidationLayout | null> {
690690
const result = await PluginRegistry.apiWrapper.call(this, Job.prototype.validationLayout);
691691
return result;
692692
}
@@ -1186,7 +1186,7 @@ export class Task extends Session {
11861186
return result;
11871187
}
11881188

1189-
async validationLayout(): Promise<ValidationLayout | null> {
1189+
async validationLayout(): Promise<TaskValidationLayout | null> {
11901190
const result = await PluginRegistry.apiWrapper.call(this, Task.prototype.validationLayout);
11911191
return result;
11921192
}

cvat-core/src/validation-layout.ts

+43-12
Original file line numberDiff line numberDiff line change
@@ -2,37 +2,43 @@
22
//
33
// SPDX-License-Identifier: MIT
44

5-
import { SerializedValidationLayout } from 'server-response-types';
5+
import { SerializedJobValidationLayout, SerializedTaskValidationLayout } from 'server-response-types';
66
import PluginRegistry from './plugins';
77

8-
export default class ValidationLayout {
9-
#honeypotFrames: number[];
10-
#honeypotRealFrames: number[];
8+
export class JobValidationLayout {
9+
#honeypotCount: JobValidationLayout['honeypotCount'];
10+
#honeypotFrames: JobValidationLayout['honeypotFrames'];
11+
#honeypotRealFrames: JobValidationLayout['honeypotRealFrames'];
1112

12-
public constructor(data: Required<SerializedValidationLayout>) {
13-
this.#honeypotFrames = [...data.honeypot_frames];
14-
this.#honeypotRealFrames = [...data.honeypot_real_frames];
13+
public constructor(data: SerializedJobValidationLayout) {
14+
this.#honeypotCount = data.honeypot_count ?? 0;
15+
this.#honeypotFrames = [...(data.honeypot_frames ?? [])];
16+
this.#honeypotRealFrames = [...(data.honeypot_real_frames ?? [])];
1517
}
1618

17-
public get honeypotFrames() {
19+
public get honeypotCount(): number {
20+
return this.#honeypotCount;
21+
}
22+
23+
public get honeypotFrames(): number[] {
1824
return [...this.#honeypotFrames];
1925
}
2026

21-
public get honeypotRealFrames() {
27+
public get honeypotRealFrames(): number[] {
2228
return [...this.#honeypotRealFrames];
2329
}
2430

2531
async getRealFrame(frame: number): Promise<number | null> {
26-
const result = await PluginRegistry.apiWrapper.call(this, ValidationLayout.prototype.getRealFrame, frame);
32+
const result = await PluginRegistry.apiWrapper.call(this, JobValidationLayout.prototype.getRealFrame, frame);
2733
return result;
2834
}
2935
}
3036

31-
Object.defineProperties(ValidationLayout.prototype.getRealFrame, {
37+
Object.defineProperties(JobValidationLayout.prototype.getRealFrame, {
3238
implementation: {
3339
writable: false,
3440
enumerable: false,
35-
value: function implementation(this: ValidationLayout, frame: number): number | null {
41+
value: function implementation(this: JobValidationLayout, frame: number): number | null {
3642
const index = this.honeypotFrames.indexOf(frame);
3743
if (index !== -1) {
3844
return this.honeypotRealFrames[index];
@@ -42,3 +48,28 @@ Object.defineProperties(ValidationLayout.prototype.getRealFrame, {
4248
},
4349
},
4450
});
51+
52+
export class TaskValidationLayout extends JobValidationLayout {
53+
#mode: TaskValidationLayout['mode'];
54+
#validationFrames: TaskValidationLayout['validationFrames'];
55+
#disabledFrames: TaskValidationLayout['disabledFrames'];
56+
57+
public constructor(data: SerializedTaskValidationLayout) {
58+
super(data);
59+
this.#mode = data.mode;
60+
this.#validationFrames = [...(data.validation_frames ?? [])];
61+
this.#disabledFrames = [...(data.disabled_frames ?? [])];
62+
}
63+
64+
public get mode(): NonNullable<SerializedTaskValidationLayout['mode']> {
65+
return this.#mode;
66+
}
67+
68+
public get validationFrames(): number[] {
69+
return [...this.#validationFrames];
70+
}
71+
72+
public get disabledFrames(): number[] {
73+
return [...this.#disabledFrames];
74+
}
75+
}

cvat-ui/src/actions/annotation-actions.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import {
1212
} from 'cvat-canvas-wrapper';
1313
import {
1414
getCore, MLModel, JobType, Job, QualityConflict,
15-
ObjectState, JobState, ValidationLayout,
15+
ObjectState, JobState, JobValidationLayout,
1616
} from 'cvat-core-wrapper';
1717
import logger, { EventScope } from 'cvat-logger';
1818
import { getCVATStore } from 'cvat-store';
@@ -38,7 +38,7 @@ interface AnnotationsParameters {
3838
showGroundTruth: boolean;
3939
jobInstance: Job;
4040
groundTruthInstance: Job | null;
41-
validationLayout: ValidationLayout | null;
41+
validationLayout: JobValidationLayout | null;
4242
}
4343

4444
const cvat = getCore();

0 commit comments

Comments
 (0)