You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
3.2 KiB
TypeScript
97 lines
3.2 KiB
TypeScript
// Copyright (C) 2020 Intel Corporation
|
|
//
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
import getCore from 'cvat-core-wrapper';
|
|
import { ShapeType, RQStatus } from 'reducers/interfaces';
|
|
|
|
|
|
const core = getCore();
|
|
const baseURL = core.config.backendAPI.slice(0, -7);
|
|
|
|
type Params = {
|
|
threshold: number;
|
|
distance: number;
|
|
onUpdatePercentage(percentage: number): void;
|
|
jobID: number;
|
|
annotations: any;
|
|
};
|
|
|
|
export function run(params: Params): Promise<void> {
|
|
return new Promise((resolve, reject) => {
|
|
const {
|
|
threshold,
|
|
distance,
|
|
onUpdatePercentage,
|
|
jobID,
|
|
annotations,
|
|
} = params;
|
|
const { shapes, ...rest } = annotations;
|
|
|
|
const boxes = shapes.filter((shape: any): boolean => shape.type === ShapeType.RECTANGLE);
|
|
const others = shapes.filter((shape: any): boolean => shape.type !== ShapeType.RECTANGLE);
|
|
|
|
core.server.request(
|
|
`${baseURL}/reid/start/job/${params.jobID}`, {
|
|
method: 'POST',
|
|
data: JSON.stringify({
|
|
threshold,
|
|
maxDistance: distance,
|
|
boxes,
|
|
}),
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
},
|
|
).then(() => {
|
|
const timeoutCallback = (): void => {
|
|
core.server.request(
|
|
`${baseURL}/reid/check/${jobID}`, {
|
|
method: 'GET',
|
|
},
|
|
).then((response: any) => {
|
|
const { status } = response;
|
|
if (status === RQStatus.finished) {
|
|
if (!response.result) {
|
|
// cancelled
|
|
resolve(annotations);
|
|
}
|
|
|
|
const result = JSON.parse(response.result);
|
|
const collection = rest;
|
|
Array.prototype.push.apply(collection.tracks, result);
|
|
collection.shapes = others;
|
|
resolve(collection);
|
|
} else if (status === RQStatus.started) {
|
|
const { progress } = response;
|
|
if (typeof (progress) === 'number') {
|
|
onUpdatePercentage(+progress.toFixed(2));
|
|
}
|
|
setTimeout(timeoutCallback, 1000);
|
|
} else if (status === RQStatus.failed) {
|
|
reject(new Error(response.stderr));
|
|
} else if (status === RQStatus.unknown) {
|
|
reject(new Error('Unknown REID status has been received'));
|
|
} else {
|
|
setTimeout(timeoutCallback, 1000);
|
|
}
|
|
}).catch((error: Error) => {
|
|
reject(error);
|
|
});
|
|
};
|
|
|
|
setTimeout(timeoutCallback, 1000);
|
|
}).catch((error: Error) => {
|
|
reject(error);
|
|
});
|
|
});
|
|
}
|
|
|
|
export function cancel(jobID: number): void {
|
|
core.server.request(
|
|
`${baseURL}/reid/cancel/${jobID}`, {
|
|
method: 'GET',
|
|
},
|
|
);
|
|
}
|