Skip to content
Snippets Groups Projects
Commit ed0ac0be authored by Schiffer, Christian's avatar Schiffer, Christian
Browse files

Implemented changes for import of predictions

parent dd29083a
No related branches found
No related tags found
No related merge requests found
......@@ -523,7 +523,9 @@ class AnnotationImportExport(Resource):
class PredictionAnnotationExport(Resource):
@annotation_namespace.doc("Retrieve annotations based on predictions of a specific task")
def get(self, project_id, task_id):
import os
import requests
from atlaslib.files import get_section_number_from_string
from .config import ATLAS_CONTROLLER_URL
# Determine
......@@ -535,11 +537,15 @@ class PredictionAnnotationExport(Resource):
return
result = result.json()
annotations = {}
for item in result:
section = get_section_number_from_string(os.path.basename(item["path"]))
annotations[section] = item["annotations"]
return {
"project_id": project_id,
"task_id": task_id,
"path": result["path"],
"annotations": result["annotations"],
"annotations": annotations,
}
......
......@@ -3,7 +3,7 @@ if (debug) {
}
var atlasRegions = [];
var atlasServerApiUrl = "http://medpc076.ime.kfa-juelich.de:5000/api"
var atlasServerApiUrl = "http://medpc076.ime.kfa-juelich.de:5000/api"
//var atlasServerApiUrl = "http://localhost:5000/api"
// var serverHost = "medpc076.ime.kfa-juelich.de"
// var serverPort = 80
......@@ -42,21 +42,24 @@ function Task() {
}
function AnnotationImport() {
this.src_host = "imedv02.ime.kfa-juelich.de";
// This is fixed for now. Always import into running instance.
this.dst_host = "atlasui_microdraw-mariadb_1";
this.src_user = null;
this.dst_user = null;
this.src_path = null;
this.dst_path = null;
this.annotation_items = [];
this.loading_state = false;
this.src_host = "imedv02.ime.kfa-juelich.de";
// This is fixed for now. Always import into running instance.
this.dst_host = "atlasui_microdraw-mariadb_1";
this.src_user = null;
this.dst_user = null;
this.src_path = null;
this.dst_path = null;
this.annotation_items = [];
this.loading_state = false;
this.project_import = null;
this.src_project = 0;
this.src_task = 0;
}
function AnnotationImportItem(section, annotations) {
this.section = section;
this.annotations = annotations;
this.loading_state = false;
this.section = section;
this.annotations = annotations;
this.loading_state = false;
}
function compareRegions(region0, region1) {
......@@ -581,33 +584,42 @@ var app = new Vue({
window.location.href = target_link;
},
initializeAnnotationImport: function() {
if (typeof(myOrigin.user) == "object") {
this.annotation_import.src_user = null;
this.annotation_import.dst_user = null;
} else {
this.annotation_import.src_user = myOrigin.user;
this.annotation_import.dst_user = myOrigin.user;
}
this.annotation_import.src_path = myOrigin.source;
this.annotation_import.dst_path = myOrigin.source;
if (typeof(myOrigin.user) == "object") {
this.annotation_import.src_user = null;
this.annotation_import.dst_user = null;
} else {
this.annotation_import.src_user = myOrigin.user;
this.annotation_import.dst_user = myOrigin.user;
}
this.annotation_import.src_path = myOrigin.source;
this.annotation_import.dst_path = myOrigin.source;
},
getAnnotations: function() {
console.log("get annotations");
console.log("get annotations");
let user = this.annotation_import.src_user;
let user = this.annotation_import.src_user;
if (user === null) {
alert("Please enter a source user before retrieving annotations.");
return;
}
this.annotation_import.annotation_items = [];
let host = encodeURIComponent(btoa(this.annotation_import.src_host));
let path = encodeURIComponent(btoa(this.annotation_import.src_path));
this.annotation_import.annotation_items = [];
let endpoint = null;
if (this.annotation_import.project_import) {
// Import predictions from a specific project
let project = this.annotation_import.src_project;
let task = this.annotation_import.src_task;
endpoint = `${atlasServerApiUrl}/predictions/${project}/tasks/${task}`;
} else {
// Import predictions from a specific user
if (user === null) {
alert("Please enter a source user before retrieving annotations.");
return;
}
let host = encodeURIComponent(btoa(this.annotation_import.src_host));
let path = encodeURIComponent(btoa(this.annotation_import.src_path));
endpoint = `${atlasServerApiUrl}/annotations/${host}/${user}/${path}`;
}
let endpoint = `${atlasServerApiUrl}/annotations/${host}/${user}/${path}`;
let _this = this;
this.annotation_import.loading_state = true;
this.annotation_import.loading_state = true;
$.ajax({
url: endpoint,
type: "GET",
......@@ -619,40 +631,40 @@ var app = new Vue({
_this.annotation_items = [];
console.log(annotations);
for (let key in annotations) {
let value = annotations[key];
_this.annotation_import.annotation_items.push(new AnnotationImportItem(key, value));
let value = annotations[key];
_this.annotation_import.annotation_items.push(new AnnotationImportItem(key, value));
}
},
error: function (jqXHR, textStatus, errorThrown) {
post_message(`Error getting annotations status: ${textStatus} ${errorThrown}`);
},
complete: function(data) {
_this.annotation_import.loading_state = false;
_this.annotation_import.loading_state = false;
}
});
},
importAll: function(overwrite) {
if (!this.checkUser()) {
return;
}
for (let annotation in this.annotation_import.annotation_items) {
this.importAnnotation(this.annotation_import.annotation_items[annotation], overwrite);
}
if (!this.checkUser()) {
return;
}
for (let annotation in this.annotation_import.annotation_items) {
this.importAnnotation(this.annotation_import.annotation_items[annotation], overwrite);
}
},
importAnnotation: function(annotation, overwrite) {
if (!this.checkUser()) {
return;
}
console.log(annotation);
if (!this.checkUser()) {
return;
}
console.log(annotation);
let user = this.annotation_import.dst_user;
console.log(`Importing annotation to user ${this.annotation_import.dst_user} at ${this.annotation_import.dst_host}`);
let host = encodeURIComponent(btoa(this.annotation_import.dst_host));
let path = encodeURIComponent(btoa(this.annotation_import.dst_path));
let user = this.annotation_import.dst_user;
console.log(`Importing annotation to user ${this.annotation_import.dst_user} at ${this.annotation_import.dst_host}`);
let host = encodeURIComponent(btoa(this.annotation_import.dst_host));
let path = encodeURIComponent(btoa(this.annotation_import.dst_path));
let endpoint = `${atlasServerApiUrl}/annotations/${host}/${user}/${path}`;
if (overwrite) {
endpoint = `${endpoint}?overwrite=True`;
endpoint = `${endpoint}?overwrite=True`;
}
console.log(endpoint);
let _this = this;
......@@ -660,7 +672,7 @@ var app = new Vue({
data[annotation.section] = annotation.annotations;
// Disable buttons while importing
annotation.loading_state = true;
annotation.loading_state = true;
$.ajax({
url: endpoint,
type: "POST",
......@@ -670,30 +682,30 @@ var app = new Vue({
crossDomain: true,
success: function (data) {
// Remove annotation from list
_this.removeImportAnnotation(annotation);
_this.removeImportAnnotation(annotation);
},
error: function (jqXHR, textStatus, errorThrown) {
post_message(`Error importing annotation: ${textStatus} ${errorThrown}`);
},
complete: function(data) {
annotation.loading_state = false;
annotation.loading_state = false;
}
});
},
checkUser: function() {
let user_ok = this.annotation_import.dst_user !== null && this.annotation_import.dst_user !== ""
if (!user_ok) {
alert("Please enter a target user before importing annotations.");
return false;
}
return true;
let user_ok = this.annotation_import.dst_user !== null && this.annotation_import.dst_user !== ""
if (!user_ok) {
alert("Please enter a target user before importing annotations.");
return false;
}
return true;
},
removeImportAnnotation: function(annotation) {
for (let idx in this.annotation_import.annotation_items) {
if (this.annotation_import.annotation_items[idx] === annotation) {
this.annotation_import.annotation_items.splice(idx, 1);
}
}
for (let idx in this.annotation_import.annotation_items) {
if (this.annotation_import.annotation_items[idx] === annotation) {
this.annotation_import.annotation_items.splice(idx, 1);
}
}
}
},
created: function () {
......
......@@ -527,31 +527,44 @@
<div class="modal-body">
<div class="form">
<div class="form-row">
<label class="col-form-label">Source host</label>
<label class="col-form-label col-2">Source host</label>
<div class="col-4">
<input v-model="annotation_import.src_host" class="form-control" type="text"
data-toggle="tooltip" data-placement="top" title="Host of the machine to retrieve annotations from. If you do not know what this is, leave the default value untouched.">
</div>
<div class="col-4">
<input type="checkbox" v-model="annotation_import.project_import" id="atlas_ui_import_form_project_import"
data-toggle="tooltip" data-placement="top" title="Switch between import from user and import from predictions of specific task.">
<label for="atlas_ui_import_form_project_import">Import predictions</label>
</div>
</div>
<div class="form-row">
<label class="col-form-label">Source user</label>
<label class="col-form-label col-2" v-if="annotation_import.project_import">Project ID</label>
<label class="col-form-label col-2" v-else>Source user</label>
<div class="col-4">
<input v-model="annotation_import.src_user" type="text" class="form-control"
<input type="number" min="0" v-model="annotation_import.src_project" type="text" class="form-control" v-if="annotation_import.project_import"
data-toggle="tooltip" data-placement="top" title="ID of project to import predictions from.">
<input v-model="annotation_import.src_user" type="text" class="form-control" v-else
data-toggle="tooltip" data-placement="top" title="Microdraw user on source host to retrieve annotations from.">
</div>
<label class="col-form-label">Destination user</label>
<label class="col-form-label col-2">Destination user</label>
<div class="col-4">
<input v-model="annotation_import.dst_user" type="text" class="form-control"
data-toggle="tooltip" data-placement="top" title="Microdraw user to import annotations to.">
</div>
</div>
<div class="form-row">
<label class="col-form-label">Source path</label>
<label class="col-form-label col-2" v-if="annotation_import.project_import">Task ID</label>
<label class="col-form-label col-2" v-else>Source path</label>
<div class="col-4">
<input v-model="annotation_import.src_path" type="text" class="form-control"
<input type="number" min="0" v-model="annotation_import.src_task" type="text" class="form-control" v-if="annotation_import.project_import"
data-toggle="tooltip" data-placement="top" title="ID of task to import predictions from.">
<input v-model="annotation_import.src_path" type="text" class="form-control" v-else
data-toggle="tooltip" data-placement="top" title="Microdraw path to import annotations from.">
</div>
<label class="col-form-label">Destination path</label>
<label class="col-form-label col-2">Destination path</label>
<div class="col-4">
<input v-model="annotation_import.dst_path" type="text" class="form-control"
data-toggle="tooltip" data-placement="top" title="Microdraw path to import annotations to.">
......@@ -581,10 +594,10 @@
<input v-model="ann_item.section" class="form-control" type="text" readonly />
</div>
<label class="col-2 col-form-label text-right">Annotations</label>
<div class="col-1">
<div class="col-2">
<input v-model="ann_item.annotations.Regions.length" class="form-control" type="text" readonly />
</div>
<div class="col-3">
<div class="col-2">
</div>
<div class="col-3">
<div class="btn-group" role="group">
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment