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.
184 lines
5.9 KiB
JavaScript
184 lines
5.9 KiB
JavaScript
/*
|
|
* Copyright (C) 2018 Intel Corporation
|
|
* SPDX-License-Identifier: MIT
|
|
*/
|
|
|
|
/* global
|
|
require:false
|
|
*/
|
|
|
|
(() => {
|
|
const serverProxy = require('./server-proxy');
|
|
const Collection = require('./annotations-collection');
|
|
const AnnotationsSaver = require('./annotations-saver');
|
|
|
|
const jobCache = {};
|
|
const taskCache = {};
|
|
|
|
function getCache(sessionType) {
|
|
if (sessionType === 'task') {
|
|
return taskCache;
|
|
}
|
|
|
|
if (sessionType === 'job') {
|
|
return jobCache;
|
|
}
|
|
|
|
throw new window.cvat.exceptions.ScriptingError(
|
|
`Unknown session type was received ${sessionType}`,
|
|
);
|
|
}
|
|
|
|
async function getAnnotationsFromServer(session) {
|
|
const sessionType = session instanceof window.cvat.classes.Task ? 'task' : 'job';
|
|
const cache = getCache(sessionType);
|
|
|
|
if (!(session.id in cache)) {
|
|
const rawAnnotations = await serverProxy.annotations
|
|
.getAnnotations(sessionType, session.id);
|
|
const collection = new Collection(session.labels || session.task.labels)
|
|
.import(rawAnnotations);
|
|
const saver = new AnnotationsSaver(rawAnnotations.version, collection, session);
|
|
|
|
cache[session.id] = {
|
|
collection,
|
|
saver,
|
|
};
|
|
}
|
|
}
|
|
|
|
async function getAnnotations(session, frame, filter) {
|
|
await getAnnotationsFromServer(session);
|
|
const sessionType = session instanceof window.cvat.classes.Task ? 'task' : 'job';
|
|
const cache = getCache(sessionType);
|
|
return cache[session.id].collection.get(frame, filter);
|
|
}
|
|
|
|
async function saveAnnotations(session, onUpdate) {
|
|
const sessionType = session instanceof window.cvat.classes.Task ? 'task' : 'job';
|
|
const cache = getCache(sessionType);
|
|
|
|
if (session.id in cache) {
|
|
await cache[session.id].saver.save(onUpdate);
|
|
}
|
|
|
|
// If a collection wasn't uploaded, than it wasn't changed, finally we shouldn't save it
|
|
}
|
|
|
|
function mergeAnnotations(session, objectStates) {
|
|
const sessionType = session instanceof window.cvat.classes.Task ? 'task' : 'job';
|
|
const cache = getCache(sessionType);
|
|
|
|
if (session.id in cache) {
|
|
return cache[session.id].collection.merge(objectStates);
|
|
}
|
|
|
|
throw window.cvat.exceptions.DataError(
|
|
'Collection has not been initialized yet. Call annotations.get() or annotations.clear(true) before',
|
|
);
|
|
}
|
|
|
|
function splitAnnotations(session, objectState, frame) {
|
|
const sessionType = session instanceof window.cvat.classes.Task ? 'task' : 'job';
|
|
const cache = getCache(sessionType);
|
|
|
|
if (session.id in cache) {
|
|
return cache[session.id].collection.split(objectState, frame);
|
|
}
|
|
|
|
throw window.cvat.exceptions.DataError(
|
|
'Collection has not been initialized yet. Call annotations.get() or annotations.clear(true) before',
|
|
);
|
|
}
|
|
|
|
function groupAnnotations(session, objectStates, reset) {
|
|
const sessionType = session instanceof window.cvat.classes.Task ? 'task' : 'job';
|
|
const cache = getCache(sessionType);
|
|
|
|
if (session.id in cache) {
|
|
return cache[session.id].collection.group(objectStates, reset);
|
|
}
|
|
|
|
throw window.cvat.exceptions.DataError(
|
|
'Collection has not been initialized yet. Call annotations.get() or annotations.clear(true) before',
|
|
);
|
|
}
|
|
|
|
function hasUnsavedChanges(session) {
|
|
const sessionType = session instanceof window.cvat.classes.Task ? 'task' : 'job';
|
|
const cache = getCache(sessionType);
|
|
|
|
if (session.id in cache) {
|
|
return cache[session.id].saver.hasUnsavedChanges();
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
async function clearAnnotations(session, reload) {
|
|
const sessionType = session instanceof window.cvat.classes.Task ? 'task' : 'job';
|
|
const cache = getCache(sessionType);
|
|
|
|
if (session.id in cache) {
|
|
cache[session.id].collection.clear();
|
|
}
|
|
|
|
if (reload) {
|
|
delete cache[session.id];
|
|
await getAnnotationsFromServer(session);
|
|
}
|
|
}
|
|
|
|
function annotationsStatistics(session) {
|
|
const sessionType = session instanceof window.cvat.classes.Task ? 'task' : 'job';
|
|
const cache = getCache(sessionType);
|
|
|
|
if (session.id in cache) {
|
|
return cache[session.id].collection.statistics();
|
|
}
|
|
|
|
throw window.cvat.exceptions.DataError(
|
|
'Collection has not been initialized yet. Call annotations.get() or annotations.clear(true) before',
|
|
);
|
|
}
|
|
|
|
function putAnnotations(session, objectStates) {
|
|
const sessionType = session instanceof window.cvat.classes.Task ? 'task' : 'job';
|
|
const cache = getCache(sessionType);
|
|
|
|
if (session.id in cache) {
|
|
return cache[session.id].collection.put(objectStates);
|
|
}
|
|
|
|
throw window.cvat.exceptions.DataError(
|
|
'Collection has not been initialized yet. Call annotations.get() or annotations.clear(true) before',
|
|
);
|
|
}
|
|
|
|
function selectObject(session, objectStates, x, y) {
|
|
const sessionType = session instanceof window.cvat.classes.Task ? 'task' : 'job';
|
|
const cache = getCache(sessionType);
|
|
|
|
if (session.id in cache) {
|
|
return cache[session.id].collection.select(objectStates, x, y);
|
|
}
|
|
|
|
throw window.cvat.exceptions.DataError(
|
|
'Collection has not been initialized yet. Call annotations.get() or annotations.clear(true) before',
|
|
);
|
|
}
|
|
|
|
module.exports = {
|
|
getAnnotations,
|
|
putAnnotations,
|
|
saveAnnotations,
|
|
hasUnsavedChanges,
|
|
mergeAnnotations,
|
|
splitAnnotations,
|
|
groupAnnotations,
|
|
clearAnnotations,
|
|
annotationsStatistics,
|
|
selectObject,
|
|
};
|
|
})();
|