Coder Social home page Coder Social logo

imagingdatacommons / slim Goto Github PK

View Code? Open in Web Editor NEW
111.0 10.0 36.0 72.94 MB

Interoperable web-based slide microscopy viewer and annotation tool

Home Page: https://imagingdatacommons.github.io/slim/

License: Apache License 2.0

Dockerfile 0.68% JavaScript 3.84% HTML 1.38% Less 0.30% TypeScript 93.70% CSS 0.11%
dicomweb oidc react digital-pathology idc-viewers

slim's Introduction

DOI Build Status

Slim: Interoperable slide microscopy viewer and annotation tool for imaging data science and computational pathology

Slim is a single-page application for interactive visualization and annotation of digital whole slide microscopy images and derived image analysis results in standard DICOM format. The application is based on the dicom-microscopy-viewer JavaScript library and runs fully client side without any custom server components. It relies on DICOMweb RESTful services to search for, retrieve, and store imaging data and can thereby simply be placed in front of any DICOMweb-conformant Image Management System (IMS), Picture Archiving and Communication (PACS), or Vendor Neutral Archive (VNA).

Explore

National Cancer Institute's Imaging Data Commons

Slim is used as the slide microscopy viewer by the National Cancer Institute's Imaging Data Commons (IDC).

IDC CPTAC C3L-00965-26

Explore public IDC cancer imaging data collections by visiting the IDC web portal: portal.imaging.datacommons.cancer.gov.

The IDC viewer uses the Google Cloud Healthcare API as DICOMweb server.

Demo

Below you will find links to the representative DICOM SM images opened in Slim viewer:

Features

Display of images

Slim enables interactive visualization of DICOM VL Whole Slide Microscopy Image instances in a vendor-neutral and device-independent manner.

Interoperability with various image acquisition and management systems was successfully demonstrated at the DICOM WG-26 Connectathon at Path Visions 2020 and the DICOM WG-26 Hackathon at Path Visions 2021. Shown below are screenshots of examples images that are publicly available on the NEMA FTP server at medical.nema.org.

Vendor Illumination Stain
NEMA Roche Brightfield Roche Tissue Diagnostics Brightfield Trichrome
NEMA 3DHISTECH Brightfield 3DHISTECH Brightfield H&E
NEMA 3DHISTECH Flourescence 3DHISTECH Fluorescence DAPI, FITC, Rhodamine
NEMA SamanTree Flourescence SamanTree Medical Fluorescence Histolog

Display of image annotations and analysis results

Slim further allows for interative visualization of image annotations and analysis results. The viewer currently supports the following types of DICOM instances:

Vector graphics:

Raster graphics:

DICOM IOD
IDC CPTAC Segmentation Segmentation
IDC CPTAC Parametric Map Parametric Map
IDC CPTAC Comprehensive 3D SR Comprehensive 3D SR
IDC TCGA Segmentation Segmentation
IDC TCGA Segmentation Microscopy Bulk Simple Annotations

Annotation of images

In addition to display, Slim provides annotation tools that allow users to create graphical image region of interest (ROI) annotations and store them as DICOM Comprehensive 3D SR instances using SR template TID 1500 "Measurement Report". ROIs are stored as 3D spatial coordinates (SCOORD3D) in millimeter unit according to SR template TID 1410 "Planar ROI Measurements and Qualitative Evaluations" together with measurements and qualitative evaluations (labels). Specifically, Image Region is used to store the vector graphic data and Finding is used to describe what has been annotated using a standard medical terminology such as SNOMED CT. The terms that can be chosen by a user can be configured (see AppConfig.d.ts).

Autentication and authorization

Users can authenticate and authorize the application to access data via OpenID Connect (OIDC) based on the OAuth 2.0 protocol using either the authorization code grant type (with Proof Key for Code Exchange (PKCE) extension) or the legacy implicit grant type.

Configuration

The app can be configured via a public/config/{name}.js JavaScript configuration file (see for example the default public/config/local.js). Please refer to the AppConfig.d.ts file for configuration options.

The configuration can be changed at build-time using the REACT_APP_CONFIG environment variable.

Deployment

Download the latest release from github.com/imagingdatacommons/slim/releases and then run the following commands to install build dependencies and build the app:

yarn install
PUBLIC_URL=/ yarn build

Once the app has been built, the content of the build folder can be directly served by a static web server at the location specified by PUBLIC_URL (in this case at /). The PUBLIC_URL must be either a full URL or a relative path to the location at which the viewer application will get deployed (e.g., PUBLIC_URL=https://imagingdatacommons.github.io/slim or PUBLIC_URL='/slim').

To learn how to deploy Slim as a Google Firebase webapp, consider this tutorial.

Local

The repository provides a Docker compose file to deploy a static web server and a dcm4chee-arc-light DICOMweb server on localhost for local app development and testing:

docker-compose up -d

The local deployment serves the app via an NGINX web server at http://localhost:8008 and exposes the DICOMweb services at http://localhost:8008/dcm4chee-arc/aets/DCM4CHEE/rs. Once the serives are up, one can store DICOM objects in the archive using the Store transaction of the DICOMweb Studies Service.

The command line interface of the dicomweb-client Python package makes storing DICOM files in the archive straight forward:

dicomweb_client -vv --url http://localhost:8008/dcm4chee-arc/aets/DCM4CHEE/rs store instances -h

The local deployment uses the default configuration file public/config/local.js:

window.config = {
  path: "/",
  servers: [
    {
      id: "local",
      url: "http://localhost:8008/dcm4chee-arc/aets/DCM4CHEE/rs",
      write: true
    }
  ],
  annotations: [
    {
      finding: {
        value: '85756007',
        schemeDesignator: 'SCT',
        meaning: 'Tissue'
      },
      style: {
        stroke: {
          color: [251, 134, 4, 1],
          width: 2
        },
        fill: {
          color: [255, 255, 255, 0.2]
        }
      }
    }
  ]
};

Customize the configuration according to your needs at either build-time or run-time.

Google Cloud Platform

Slim can be readily configured to connect to a secured DICOMweb endpoint of the Google Cloud Healthcare API with OIDC authentication:

const gcpProject = ""
const gcpLocation = ""
const gcpDataset = ""
const gcpStore = ""
const gcpClientID = ""

window.config = {
  path: "/",
  servers: [
    {
      id: "gcp",
      url: `https://healthcare.googleapis.com/v1/projects/${gcpProject}/locations/${gcpLocation}/datasets/${gcpDataset}/dicomStores/${gcpStore}/dicomWeb`,
      write: true
    }
  ],
  oidc: {
    authority: "https://accounts.google.com",
    clientId: gcpClientID,
    scope: "email profile openid https://www.googleapis.com/auth/cloud-healthcare",
    grantType: "implicit",
    endSessionEndpoint: "https://www.google.com/accounts/Logout"
  },
  annotations: [
    {
      finding: {
        value: '108369006',
        schemeDesignator: 'SCT',
        meaning: 'Neoplasm'
      },
      style: {
        stroke: {
          color: [251, 134, 4, 1],
          width: 2
        },
        fill: {
          color: [255, 255, 255, 0.2]
        }
      }
    },
    {
      finding: {
        value: '85756007',
        schemeDesignator: 'SCT',
        meaning: 'Tissue'
      },
      style: {
        stroke: {
          color: [255, 255, 0, 1],
          width: 2
        },
        fill: {
          color: [255, 255, 255, 0.2]
        }
      }
    }
  ]
};

OAuth 2.0 configuration

Create an OIDC client ID for web application.

Note that Google's OIDC implementation does currently not yet support the authorization code grant type with PKCE challenge for private clients. For the time being, the legacy implicit grand type has to be used.

Development

To install requirements and run the app for local development, run the following commands:

yarn install
yarn start

This will serve the app via a development server at http://localhost:3000 using the default local configuration.

The configuration can be specified using the REACT_APP_CONFIG environment variable, which can be set either in the .env file or directly in the command line:

REACT_APP_CONFIG=local yarn start

Citation

For more information about the motivation, design, and capabilities of Slim, please see the following article:

Interoperable slide microscopy viewer and annotation tool for imaging data science and computational pathology C. Gorman, D. Punzo, I. Octaviano, S. Pieper, W.J.R. Longabaugh, D.A. Clunie, R. Kikinis, A.Y. Fedorov, M.D. Herrmann Nature Communications 4:1572 (2023)

If you use Slim in your research, please cite the above article.

DICOM Conformance Statement

The DICOM conformance statement for Slim is available in this repository here

slim's People

Contributors

cgorman avatar dependabot[bot] avatar fedorov avatar gitanjalichhetri avatar hackermd avatar igoroctaviano avatar jasonklotzer avatar pedrokohler avatar punzo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

slim's Issues

Define code guidelines

Define guidelines for:

  • Styling
  • Documentation
  • Code
  • TypeScript
  • Git flow / branching / commits

JPEG 2000 tiles need to work

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:

https://idc-sandbox-000.firebaseapp.com/projects/idc-tcia/locations/us-central1/datasets/tcia-idc-datareviewcoordination/dicomStores/DICOM_WSI-20210108/study/1.3.6.1.4.1.5962.99.1.3802655970.225997140.1610120457442.3.0

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.

Improve configuration for IDC deployment

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:

  • annotations toolbar should be hidden, since this is a read-only view of the data
  • study selector button should be disabled, since the user will get to the viewer from the portal
  • IDC logo should be added as in OHIF viewer

Application crashes when trying to retrieve OVERVIEW image

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.

3D Slicer DICOMweb Browser connect to slim error

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.

Themeing configuration

  • Define a consistent color palette.
  • Define colors even for things like highlighting when selected.
  • The value should probably come from the theme, i.e., craco.config.js.

Configurable servers

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.

An error occured. Image metadata could not be retrieved.

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."
Screenshot from 2021-08-13 10-47-12

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.

Disable zoom of overview map

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.

Allow disabling of retrieved rendered to improve performance

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

Abstract routing configuration and access to URI parameters

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.

Improve client-side caching of frames

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.

Handle errors upon attempt to load and parse annotations

When there are SR documents available that don't conform with the format expected by Slim, the viewer displays an error message.

image

Not all errors may be worth bringing to the attention of the user. Let's try add checks to determine whether an existing SR does represent a displayable annotation.

Delay in tile rendering

from Steve: when zooming, sometimes some tiles are not rendered until there is another interaction (e.g. panning) and then they get rendered.

How to get Slim DICOM SR document ?

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,
Screenshot from 2021-07-19 09-26-52
We try to retrieve studies, but the 3D Slicer response the error as follow,
Screenshot from 2021-07-21 11-42-23
Here is 3D Slicer debug message,
Screenshot from 2021-07-21 14-47-22

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 0.4.1 Service 'app' failed to build

Dear Sir,

We try to download the Slim latest version 0.4.1 and build the app image.
But we failed to build service 'app' as follow,
Screenshot from 2021-10-20 16-55-02

Did we miss something that cause the error?

OIDC clients POC

  • Verify if keycloak auth client supports auth with Google and Azure OIDC + other protocols, otherwise implement auth flow using oidc-client.

Required

  • Google OIDC
  • Azure OIDC

Tile grid shifts upon zooming

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.

Remote browser access error

Hi Sir,
After install Slim and upload DICOM successfully, the Slim localhost main page as follow,
Screenshot from 2021-09-01 16-36-17

If we used remote browser to connect Slim, it replied error message as follow,
messageImage_1630484915959
slim

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.

The endpoint /dicomweb does not work (locally) using docker compose

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,

How to upload WSI DICOM data to slim ?

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.

Problems hosting content with /slim in path.

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.

Refactor display of slides in CaseViewer

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[]

Mobile device connect to Slim

Dear Sir,

We try to use mobile device (for example: iPhone, iPad, Android phone, etc.) to connect Slim service.
mobile

But client web browser (for example: Safari, Chrome) display nothing.
The web browser error message as follow,
截圖 2021-09-06 上午9 44 52
截圖 2021-09-06 上午9 46 07

We try to fix error "out of memory", for example,

  1. Close less useful tabs
  2. Force quit Safari
  3. Clear Browser Cache
  4. Reboot iPhone, iPad
    But it did not work.

Do you have any experience dealing with these kinds of issue?

About image annotation

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.

Graceful handling of possible HTTP error status codes

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';
    }
 },

Difficulty Starting up

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

Add "Debug info" and "About" features

It would make sense to parallel those to what is available in OHIF. This would be good to resolve for the IDC production release.

image

image

@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?

Wrong configuration for Slim preview on GCP

I just realized that the Slim instances that are deployed on GCP for previews are configured with the config/local.js file:

Screen Shot 2021-08-10 at 12 59 14 PM

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.

Deploy Slim on MAC

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,
截圖 2021-09-03 下午3 36 38

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.
截圖 2021-09-03 下午3 36 00

Did we miss something that cause the error?

HTTPError: 500 Server Error: Internal Server Error

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,
code

After the python code executed, the HTTPError as follow,
Screenshot from 2021-07-23 12-54-21

Afterward, I try to use 3D Slicer DICOMweb Browser to retrieve the same instance, the HTTPError as follow,
Screenshot from 2021-07-23 12-55-45

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?

Configurable tools

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.

Skill to customize the redirect URI

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.

Extend dicom-microscopy-viewer API to use DICOM presentation state

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.

Authentication layer

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.

Logging wrapper / Log service

We need a logging abstraction to allows us to:

  • Enable/disable application logging
  • Filter logging
  • Adding hooks (to attach things like Rollup)

In the first iteration, it could be implemented as a simple proxy and later upgraded to include all these features.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.