Existing Web application integration with 3D Slicer

I have an existing web application where we are able to search for images and display it in OHIF viewer. We have a new requirement where we need to integrate the 3D slicer viewer as well. Can I know how can I run it in the web browser and also have it customized to pass the images information so that it can display those images?

Any help would be appreciated. Thanks.

This should be no problem at all. See this post for details: New DICOMweb features: launch Slicer from web browser and download/upload data sets to the cloud using DICOMweb

@pieper as far as I remember, you have already experimented with adding a Slicer launcher button in OHIF viewer (similar to the one in Kheops). Can you give some more details about it?

Thanks for the quick reply. I need to launch 3D slicer in the browser in a new window itself from another custom web application - let’s say on the click of view button for Study 1. When this view button is clicked, it should open 3D slicer in the new browser window. In the previous link, I see it launched the 3D slicer locally from a web application. My aim is to view it in the browser itself and I should be able to pass the image’s metadata from my end. Any idea?

Also OHIF viewer has this slicer functionality? We have already integrated the OHIF viewer.

You can either launch a locally installed Slicer (using a custom URL as shown in the linked post above) or a cloud-hosted Slicer (by spinning up a virtual machine or docker container, and instruct Slicer to load data from a URL using SlicerWeb).

Launching a locally installed Slicer has the advantages that you offload computationally intensive tasks to the user computer (you don’t need to set up servers with strong graphics capabilities) and interactions will be very smooth. The disadvantages are that images must be transferred to the user computer (same way as for the OHIF viewer or other viewers that run locally) and that the user needs to download and install Slicer.

@klm-1992 it sounds like you want something like what is shown in this video:

Here the Slicer instance is running in a docker instance that is monitoring a database where job requests are placed. The job request is basically just a json object with the urls and access tokens passed from the web app to Slicer so it can open the data selected in the web app. This example used a Siemens commercial system dicom archive, but the same thing can be set up with DICOMweb stores (e.g. running on Google or elsewhere).

1 Like

Thanks @pieper. WIll check this out. Meanwhile any idea if you ever integrated slicer button with OHIF viewer?

The last time we had a chance to work on this together was a Project Week in Las Palmas and I had a mostly working prototype that adds a tool button to OHIF that launches a containerized Slicer instance in Google Cloud. I didn’t finish up passing the data reference to the Slicer instance, but this can be set so that Slicer can communicate with the same DICOMweb endpoint that OHIF uses. Now that we have better DICOMweb support in Slicer it would be great to flesh this out, perhaps at the upcoming Project Week.

Hi @pieper ,

Thanks for the update. Wanted to know more related to the example of siemens commercial system…Do you have any more idea related to this to whom we can reach out to so that we can clarify our doubts? I’m a bit unclear as to how are we passing the json object with the urls and access tokens from the UI or do you have any documentation link? Any help would be appreciated. Thanks!!

Hi @klm-1992 -

The Siemens prototype was based on their APIs at the time, which were internal and subject to change. I believe though that they were moving towards standards-based APIs like DICOMweb. Probably a site like this would have good contact info to start with.

For that prototype it was a bit ad hoc. I set up a dedicated database where the teamplay client could post requests (json documents containing credentials) that were tagged by userID which the slicer instances could claim if they were owned by that user. A better design would be to allocate Slicer instances as needed but that hasn’t been fleshed out yet. I’ll probably keep working on it as part of this project.