Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
atlasui
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Container Registry
Model registry
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
INM-1
BDA
software
analysis
atlas
atlasui
Commits
ed0ac0be
Commit
ed0ac0be
authored
3 years ago
by
Schiffer, Christian
Browse files
Options
Downloads
Patches
Plain Diff
Implemented changes for import of predictions
parent
dd29083a
No related branches found
No related tags found
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
atlas_server/src/app.py
+8
-2
8 additions, 2 deletions
atlas_server/src/app.py
microdraw/src/atlas_ui.js
+77
-65
77 additions, 65 deletions
microdraw/src/atlas_ui.js
microdraw/src/microdraw.html
+22
-9
22 additions, 9 deletions
microdraw/src/microdraw.html
with
107 additions
and
76 deletions
atlas_server/src/app.py
+
8
−
2
View file @
ed0ac0be
...
...
@@ -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
,
}
...
...
This diff is collapsed.
Click to expand it.
microdraw/src/atlas_ui.js
+
77
−
65
View file @
ed0ac0be
...
...
@@ -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
()
{
...
...
This diff is collapsed.
Click to expand it.
microdraw/src/microdraw.html
+
22
−
9
View file @
ed0ac0be
...
...
@@ -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"
>
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment