NVIDIA / ai-assisted-annotation-client

Client side integration example source code and libraries for AI-Assisted Annotation SDK
Other
308 stars 64 forks source link

Slicer: Moving Server Input Fields To Application Settings #23

Closed SachidanandAlle closed 4 years ago

SachidanandAlle commented 5 years ago

From @bsmarine

Ideally, there would be a workflow possibly like this: user selects model they would like to use under "Auto Segmentation" and "Annotation" (which would only show those available), then the model is fetched when selected and a new Segment node is made automatically. Thoughts?

Currently, I think it's tough to move the AIAA Server Info off this screen since model needs to be fetched only after an organ segmentation is manually created that corresponds to an available model on the server.

Screen Shot 2019-08-13 at 4 52 16 PM
jcfr commented 5 years ago

user selects model they would like to use under "Auto Segmentation" and "Annotation" (which would only show those available), then the model is fetched when selected and a new Segment node is made automatically. Thoughts?

That makes sense.

Would it be possible to provide me with a sample document associated with the /v1/models end point ? I am currently failing to use the server. See #29

jcfr commented 5 years ago

@lassoan Since effect are activated only after creating a segment, I don't think the exact workflow described by @bsmarine will work.

To support this, I am thinking to update the segment editor effect infrastructure to support having effect selectable independently of the number of segment already created.

What do you think ?

This would enable the following workflow:

1 The extension would bundle a version of the Json file describing the models. User would have the possibility to fetch an updated one by going to the Settings panel and clicking Fetch model list

lassoan commented 5 years ago

The workflow is feasible, as you can activate an effect without having any segments if "perSegment" property of the effect is set to False.

We should probably have a button to create all the segments that are listed in the model but missing from the segmentation (in case the user deletes one of the segments).

bsmarine commented 5 years ago

If feasible, this proposed workflow would be a solid improvement

On Mon, Aug 26, 2019 at 5:48 PM Andras Lasso notifications@github.com wrote:

The workflow is feasible, as you can activate an effect without having any segments if "perSegment" property of the effect is set to False.

We should probably have a button to create all the segments that are listed in the model but missing from the segmentation (in case the user deletes one of the segments).

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/NVIDIA/ai-assisted-annotation-client/issues/23?email_source=notifications&email_token=AE7X5GPHKZIREJQUO7EK23LQGRFRZA5CNFSM4ILXREN2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD5FZGDY#issuecomment-525046543, or mute the thread https://github.com/notifications/unsubscribe-auth/AE7X5GPWDUI3F6ITWWCN7NLQGRFRZANCNFSM4ILXRENQ .

lassoan commented 5 years ago

We need to slightly tune the logic in qMRMLSegmentEditorWidget to enable perSegment effect when no segment is created. It is a single-line change in line 1596 (will commit today):

effectButton->setEnabled((segmentAvailable && segmentSelected) || !effect->perSegment());
lassoan commented 5 years ago

I ended up adding a new flag (requireSegments) instead of using perSegment to distinguish effects that do not require presence of input segments from those that do not require selection of input segments: https://github.com/NVIDIA/ai-assisted-annotation-client/commit/30227d4f923b55f9ea40a50435c6758ff04118c1

(I've removed the slicer fork of this repository that I've created as we have write access to this repository now)

lassoan commented 5 years ago

I've played with this yesterday quite a bit (added progress bars, made it work with both Slicer-4.10/Python2 and Slicer-4.11/Python3, etc.) and realized that this could be simplified.

  1. Server hostname and port number should be possible to set in the GUI as a single editbox, as it is more convenient to copy-paste a single string than a string and a number.

  2. A user may want to choose/switch between multiple servers, so we should be able to store multiple server addresses (with an enable/disable flag so that a server can be temporarily excluded from queries).

In application settings, we could store all server information in a single settings key in a json string:

'[{"host": "home.xxxyyyzzz.net:8123", "enabled": true}, {"host": "10.110.45.66:5678", "enabled": false}]'

This would be very flexible but not very convenient for users, so we could probably present it on the GUI with a simpler format that users can edit in a simple textbox:

home.xxxyyyzzz.net:8123 enabled
10.110.45.66:5678 disabled
  1. Query of models takes negligible amount of time, so we could quickly query each server for models each time we start the effect the first time after application startup and offer the list of all models from all servers.
SachidanandAlle commented 4 years ago

Closing this issue as the required changes are added to slicer