imagingdatacommons / slim Goto Github PK
View Code? Open in Web Editor NEWInteroperable web-based slide microscopy viewer and annotation tool
Home Page: https://imagingdatacommons.github.io/slim/
License: Apache License 2.0
Interoperable web-based slide microscopy viewer and annotation tool
Home Page: https://imagingdatacommons.github.io/slim/
License: Apache License 2.0
The worklist does no longer number the pages of available studies, but only shows the studies of the first page.
Could you enable forking so I can experiment with IDC customizations of SliM?
from Steve: when zooming, sometimes some tiles are not rendered until there is another interaction (e.g. panning) and then they get rendered.
We will handles this as soon as we will have data provided by the HTAN project
Currently, the viewer directly interacts with keycloak API, passing props directly to the components.
We need to implement an authentication layer that will abstract authentication-related code. This layer could be a service or a manager that will be used by the whole application. It will provide user profile information.
It would make sense to parallel those to what is available in OHIF. This would be good to resolve for the IDC production release.
@hackermd I do not have the permission to create new labels. When you get a chance, can you make "IDC:priority" label and assign it to this issue?
Hi Guys,
I try to use docker-compose file to deploy slim on localhost.
After install complete and connect to http://localhost:8008, then the slim show "Request to search for studies failed."
How to fix the issue and upload wsi dcm data to slim ?
Any help will be sincerely appreciate.
Thanks.
Currently the dicom-miscroscopy-viewer and SLIM use the Optical Path Identifier to handles channels, apply the color functions, etc... However the Optical Path Identifier could not be always unique, see for more details:
#22 (comment)
We should introduce a new unique DICOM attribute OpticalPathUID.
Currently the viewer has hardcoded tools.
We should provide a service that would load tool definitions and hydrate a tool service that would be responsible to keep track of active tools and could be used by toolbar components in the app.
A tool standardized tool definition will be needed and it would allow the user to configure different flavors of tools by tuning dicom-microscopy-viewer draw options.
Hi Sir,
After install Slim and upload DICOM successfully, the Slim localhost main page as follow,
If we used remote browser to connect Slim, it replied error message as follow,
Did we miss something that cause the error?
Your attention to this matter and prompt reply would be highly appreciated.
Thank you very much for your great help.
Dear Sir,
In order to upload dcm files to slim, I try to use 3D Slicer 4.13.0 DICOMweb Browser to connect slim DICOMweb at http://localhost:8008/dicomweb .
But DICOMweb response the error message "500 Server Error: Internal Server Error for url: http://localhost:8008/dicomweb/studies?offset=0"
How to use the 3D Slicer 4.13.0 DICOMweb Browser to connect slim DICOMweb correctly ?
How to set slim config file for client to connect DICOMweb at http://localhost:8008/dicomweb ?
Any suggestion for upload dcm file to slim ?
Thanks a lot.
Dear Sir,
We try to deploy Slim on Apple MAC via Docker Compose.
Docker version is 20.10.8
Docker-Compose version is 1.29.2
After downloading dem4che, we try to build slim_app. But it did not work.
Here is error message,
We try to reboot MAC and redeploy Slim. But it replied same error message.
We are not sure whether the MAC HW spec., OS version is sufficient for Slim.
Here is our MAC spec.
Did we miss something that cause the error?
Dear Sir,
After draw and save ROI, the Slim store them as DICOM comprehensive 3D SR documents.
We use 3D Slicer DICOMweb browser to connect slim http://localhost:8008/dicomweb, the list of cases as follow,
We try to retrieve studies, but the 3D Slicer response the error as follow,
Here is 3D Slicer debug message,
Where is the location that slim saved the DICOM files and SR documents ?
How to read/write the SR document when AI training / inference ?
Could you recommend some tools to us to use DICOM SR document ?
Any help or suggestion will be sincerely appreciate.
Thanks a lot.
Slim is now available in the IDC dev tier, and there are some hopefully small configuration issues that would be good to resolve to avoid confusion, and make presentation consistent with the radiology viewer:
I am trying to have SliM served up from a non-root directory, so that I can have the same hostname for the two different viewers and route traffic based on the URL. (e.g. I want https://hostname.example.com/slim/studies/blah... to go to the SliM Bucket, and other paths to go to radiology).
I have followed the build output instructions to put "homepage"="/slim" into the top-level package.json file. And after putting it in the /slim bucket folder, and routing 404s and index calls to /slim/index.html, it does work, but only if I launch it from a URL like https://hostname.example.com/studies/blah... (no /slim). You can see that the calls are really going to /slim, but the initial call cannot have /slim in it. If it does, then I get the static content, and then it stalls with a blank screen.
I have tried changing the "path" argument in the local.js from "/" to "/slim" and back, but it does not seem to have an effect.
Hello,
I followed the instruction to deploy Slim locally using docker compose without -d flag, and here is the output from console:
db_1 | 2021-09-26 18:28:00.363 UTC [35] ERROR: relation "queue_msg" does not exist at character 8
db_1 | 2021-09-26 18:28:00.363 UTC [35] STATEMENT: update queue_msg set msg_status=$1 where msg_status=$2 and queue_name=$3
app_1 | 2021/09/26 18:28:59 [error] 10#10: *3 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 172.19.0.1, server: slim, request: "GET /dicomweb/studies?ModalitiesInStudy=SM HTTP/1.1", upstream: "http://172.19.0.4:8080/dcm4chee-arc/aets/DCM4CHEE/rs/studies?ModalitiesInStudy=SM", host: "localhost:8008", referrer: "http://localhost:8008/"
app_1 | 2021/09/26 18:28:59 [error] 10#10: *3 open() "/usr/share/nginx/html/50x.html" failed (2: No such file or directory), client: 172.19.0.1, server: slim, request: "GET /dicomweb/studies?ModalitiesInStudy=SM HTTP/1.1", upstream: "http://172.19.0.4:8080/dcm4chee-arc/aets/DCM4CHEE/rs/studies?ModalitiesInStudy=SM", host: "localhost:8008", referrer: "http://localhost:8008/"
app_1 | 172.19.0.1 - - [26/Sep/2021:18:28:59 +0000] "GET /dicomweb/studies?ModalitiesInStudy=SM HTTP/1.1" 404 555 "http://localhost:8008/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36" "-"
db_1 | 2021-09-26 18:29:33.040 UTC [39] ERROR: relation "export_task" does not exist at character 41
db_1 | 2021-09-26 18:29:33.040 UTC [39] STATEMENT: select exporttask0_.pk as col_0_0_ from export_task exporttask0_ where exporttask0_.device_name=$1 and exporttask0_.scheduled_time<current_timestamp and (exporttask0_.queue_msg_fk is null) limit $2
I tried to access http://localhost:8008/dicomweb but unfortunately, I got "404 Not Found" on the web page, and here is the output from console:
app_1 | 2021/09/26 21:00:54 [error] 10#10: *9 open() "/var/www/html/dicomweb" failed (2: No such file or directory), client: 172.19.0.1, server: slim, request: "GET /dicomweb HTTP/1.1", host: "localhost:8008"
app_1 | 172.19.0.1 - - [26/Sep/2021:21:00:54 +0000] "GET /dicomweb HTTP/1.1" 404 555 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36" "-"
I got in the slim_app docker container, but could not find dicomweb in /var/www/html. I am wondering if is there anything I did wrong in the deployment steps?
Best regards,
Dear Sir,
We downloaded the Slim latest version 0.3.0 and installed successfully.
After connected to the http://localhost:8008, the main page was blank as follow
Did we miss something that cause the error?
Copied from: OHIF/Viewers#2231. Not sure this has been tested in Slim.
This study was converted from SVS by @dclunie and has tiles in jp2k:
OHIF requests them as jpeg with this header:
accept: multipart/related; type="image/jpeg"; transfer-syntax=1.2.840.10008.1.2.4.50
But google responds with:
generic::invalid_argument: image cannot be transcoded from 1.2.840.10008.1.2.4.91 to image/jpeg; transfer-syntax=1.2.840.10008.1.2.4.50, cause (internal only): generic::invalid_argument: com.google.apps.framework.request.StatusException: generic::INVALID_ARGUMENT:
1.2.840.10008.1.2.4.91 is jp2k as documented here: http://dicom.nema.org/medical/dicom/current/output/chtml/part18/sect_8.7.3.html
A suggested solution is that when the server says it cannot provide jpeg, we read the jp2k and convert it on the client using one of the codecs provided by @chafey. Have not looked yet how easy or fast that would be.
https://github.com/MGHComputationalPathology/dicom-microscopy-viewer
See point (5) in ImagingDataCommons/dicom-microscopy-viewer#47
Waiting Danny finishing this project:
https://github.com/cornerstonejs/codecs
This will be useful also for IDC and dcmjs in general.
Relevant IDC/dcmjs issues:
dcmjs-org/dcmjs#169
OHIF/Viewers#2279
From the base git clone and setting the config for the hackathon:
servers: [
{
id: "local",
url: "https://test.j4care.com:8443/dcm4chee-arc/aets/DCM4CHEE/rs",
write: false
}
],
after running yarn start
I get the error:
craco: *** Cannot find ESLint loader (eslint-loader). ***
It seems that craco 5.8.0 is not compatible with react-scripts > 4
I tried downgrading react-scripts but then that set off a cascade of incompatibilities. So I tried the other way to fix this by upgrading craco to ^6 but then craco-less is not compatible.
After commenting out all craco-less config in craco.config.js leaving only:
module.exports = {
plugins: [
]
}
Now yarn start
works
Dear Sir,
I follow the user guide https://dicomweb-client.readthedocs.io/en/latest/usage.html to retrieve instance.
My python version is 3.8.5 and python code as follow,
After the python code executed, the HTTPError as follow,
Afterward, I try to use 3D Slicer DICOMweb Browser to retrieve the same instance, the HTTPError as follow,
The error is very interesting, because I can search the instance UID, but I can not retrieve it.
Did I miss something that cause the error?
When the viewer tries to retrieve the OVERVIEW image for display in "slides" menu section of the case viewer (lower menu item in the left sidebar), it may crash if the configured DICOMweb server doesn't support the "viewport" URL query parameter for the retrieve rendered transaction.
Dear Sir,
We try to use mobile device (for example: iPhone, iPad, Android phone, etc.) to connect Slim service.
But client web browser (for example: Safari, Chrome) display nothing.
The web browser error message as follow,
We try to fix error "out of memory", for example,
Do you have any experience dealing with these kinds of issue?
Dear Sir,
After upload WSI DICOM image to Slim successfully, we try to annotate ROI.
The image size is under 1G and follow supplement 145 standard.
Some cases enable annotated, but some cases unable annotated.
How to check the root cause that the Slim unable to annotate ROI ?
Any help or suggestion will be sincerely appreciate.
Thanks a lot.
Currently, the overview map also zooms when the user zooms on the main map. This behavior may not be desirable and should be either deactivated by default or made configurable.
From Steve: as Bill reported there's a shift to the down-right when high res tiles come in which may be a problem with the coordinate systems or maybe the data but probably the viewer.
From Steve: Let's also discuss performance improvement options, specifically try turning off request-rendered mode. Currently tiles are taking over 200 ms in some cases. It would be nice to have a silky smooth pan zoom experience if possible.
First step: just add a config file option to enable/disable the retrieveRendered option: https://github.com/MGHComputationalPathology/slim/blob/3e6be0190f1095e047cb6c6675718c9caa6cc5a6/src/components/SlideViewer.tsx#L347
to discuss
Find an optimal balance between caching frames (tiles) client-side and memory footprint. We may want to configure this differently depending on the size of a "slide" (i.e., the number of associated instances or frames) or handle it differently for different pyramid image resolution levels (e.g., cache top pyramid layer).
This may be critical if certain pyramid levels are missing server side. For example, some of the Aperio SVS files only contain 4x, 20x, and 40x images and lack a single-frame 1x or 2x image.
The idea would be to have widgets similar to link:
for passing the color functions/blending parameters:
for each chosen channel (optical path) to the logic (for ref: OHIF/Viewers#2199)
Currently for using google stores, one has to add http://localhost:3000 in the Authorized redirect URIs in his/her google ID. It would be great if we can add this OIDC property configurable in the client to avoid the need to change the redirect in gcloud. This is useful when one has not the permissions to change the redirect URIs in his/her google ID.
When SliM is running against the IDC proxy, it is possible that it will receive an HTTP status return of 429, which means that the daily quota has been exceeded. To make this comprehensible to the user, it is preferable that the viewer redirects to a page explaining the error. In general, having an error handler has more general use. This is a snippet from the OHIF viewer configuration page to show how this is handled there:
httpErrorHandler: error => {
if (error.status == 429) {
window.location = 'https://portal.example.com/quotaExceeded.html';
}
},
We need a logging abstraction to allows us to:
In the first iteration, it could be implemented as a simple proxy and later upgraded to include all these features.
Currently, the viewer passes dicomweb configuration from the environment variables directly to the app component.
We should create a public viewer configuration that would have server configuration in it that the correct server layer would consume.
The viewer could provide a mechanism to add different DICOM data sources through the same common interface. This way the viewer will interact with metadata in an indirect way.
At the moment the URI template /studies/:StudyInstanceUID/series/:SeriesInstanceUID
is assumed at several locations within the app's source code. If the template or routing mechanism ever gets changed, it could introduce bugs that are difficult to find. It would be nice to have an abstraction of the URI path that can be used to configure routing and access URI parameters.
https://github.com/MGHComputationalPathology/dicom-microscopy-viewer
See point (4) in ImagingDataCommons/dicom-microscopy-viewer#47:
For each channel/layer we need the following parameters:
A) opticalPathIdentifer (string, used as id of the channel).
B) opacity (float, range [0,1])
C) color (array[3], range [0,255])
D) thresholdValues (array[2], min and max. range [0,255])
E) visibility (boolean)
F) addToMap (boolean). It is different from the visibility, it is to know if we have to add the layer that corresponds to the channel to the OpenLayer map object.
the most promising DICOM module is the Advanced Blending Presentation State. Here some preliminary investigation for which I would like some feedback:
A) This is already a DICOM attribute - OK
B) unfortunately the Advanced Blending Presentation State (http://dicom.nema.org/medical/dicom/current/output/chtml/part03/sect_C.11.34.html) is not ideal for this. Since we have a specific opacity value for each channel. While the DICOM attributes allows only one opacity value (i.e. Relative Opacity) for N inputs (see Blending Mode = EQUAL in http://dicom.nema.org/medical/dicom/current/output/chtml/part04/sect_N.2.6.html).
P.S.: Blending Mode = FOREGROUND is only for 2 inputs.
C) I did not find a Palette Color Lookup Table Module in Advanced Blending Presentation State (while it is present in Blending Softcopy Presentation State CIOD), have I missed it?
D) we can use Threshold Type = RANGE_INCL and have the clipping/ContrastLimit values in Threshold Value Sequence. See http://dicom.nema.org/medical/dicom/current/output/chtml/part03/sect_C.11.33.html#table_C.11.33.1-1. - OK
E) I didn't find any relevant DICOM attribute for this.
F) This can be setup if the channel is present in the DICOM attribute Blending Display Input Sequence. - OK
NOTE: for (E) and (F), we could say that Visibility and AddToMap at DICOM level are the same attribute - OK
and last two pages in https://docs.google.com/document/d/1LM457qPBG1JIlwCDQQOQ1XbRC0Rz9Ea5QmN9aHny1lw/edit
This needs to be discussed with Markus and David.
Dear Sir,
We installed the latest version of Slim.
After uploading WSI DICOM to Slim, we try to open WSI viewer. But it did not work.
The Slim replied error message "An error occured. Image metadata could not be retrieved."
Did I miss something that cause the error?
Here is the docker log for your reference.
docker.log
Your attention to this matter and prompt reply would be highly appreciated.
Thank you very much for your great help.
I just realized that the Slim instances that are deployed on GCP for previews are configured with the config/local.js
file:
That is incorrect, since this configuration is intended for "local" development and testing with a DCM4CHE archive running in the a Docker container on localhost. It worked for a while, because the value of ServerSettings.url
was recently changed.
I would suggest adding a separate config/preview.js
file.
When a line is drawn, the user needs to double-click on the last vertex of the polyline to finish the drawing. This double click also triggers a map zoom event, which is confusing.
Original issue OHIF/Viewers#2199
issues is being tracked in https://docs.google.com/document/d/1LM457qPBG1JIlwCDQQOQ1XbRC0Rz9Ea5QmN9aHny1lw/edit?usp=sharing
PR in: ImagingDataCommons/dicom-microscopy-viewer#47
STATUS: waiting for PR merging.
https://github.com/MGHComputationalPathology/dicom-microscopy-viewer
See point (2) in ImagingDataCommons/dicom-microscopy-viewer#47
We will handles this as soon as we will have data provided by the HTAN project
Define guidelines for:
Currently, the CaseViewer
component assumes that each digital slide corresponds to a series (i.e., that there is a one-to-one mapping between series and slides) and consequently lists each series as a separate SlideItem
in the SlideList
(note that I already renamed the components with 0a9e43a).
In general, this assumption may not hold, since VL Whole Slide Microscopy Image instances corresponding to a digital slide may be split across multiple series. For example, each "channel" (optical path) of an iterative immunofluorescence image acquisition may be placed in a separate series.
Instead of assuming that all VL Whole Slide Microscopy Image instances of a digital slide are contained within a single series, we should group instances per slide (potentially across multiple series).
@Punzo as discussed, an elegant approach could be to add a groupInstances()
function to the dicom-microscopy-viewer library (preferably in metadata.js), which we could use in SliM and in the constructor of the VolumeImageViewer
.
For example:
interface InstanceGroup {
keywords: string[]
values: any[]
instances: Metadata[]
}
function groupInstances ({ keywords }: { keywords: string[] }): InstanceGroup[]
look into netlify as OIHF viewer
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.