Back to Projects List
Lightweight DICOMweb Server with CouchDB
Key Investigators
- Emel Alkim (Stanford)
- Steve Pieper (Isomics)
- Andrey Fedorov (BWH) - interested to deploy and test the resulting platform
- Markus Herrmann (CCDS)
- Tobias Stein (DKFZ)
- Marco Nolden (DKFZ) - optional CTK/C++ based client side testing
Project Description
This project aims to work on a prototype lightweight DICOM server that will support DICOMweb standard and host the DICOM files as JSON objects. It will leverage previous work on SlicerChronicle and dcmjs.
Objective
- Provide prototype of a lightweight DICOM server that supports DICOMweb queries
- Provide an example implementation of a proxy layer to transfer DICOMweb queries to CouchDB
Approach and Plan
- Review and define project ideas
- Consider how to encapsulate DICOMweb logic so that it facilitates use in servers, but also in testing and other scenarios
- Define a reasonable subset of DICOMweb that can be supported easily (at least basic QIDO/WADO/STOW RS)
- Pick a nice web server infastructure that can easily implement rest api proxies
- maybe build on express/pouchdb-server
- also look at fastify
- Find an easy way to host the service for development, testing, and demos
- Implement an example translation of a DICOMweb query to CouchDB map/reduce statements
- Implement translation of the CouchDB response to DICOMweb response
- Build a bridge between SlicerChronicle and dcmjs to host the DICOM files as JSON files and support CSTORE
Progress and Next Steps
- SlicerChronicle stores DICOM object instances as documents in CouchDB
- Repository created in https://github.com/emelalkim/dicomweb-server-js using fastify node.js framework
- DICOMweb queries and CouchDB views created for:
- QIDO
- {s}/studies endpoint: Query for studies
- {s}/studies/{study}/series endpoint: Query for series
- {s}/studies/{study}/series/{series}/instances endpoint: Query for instances
- WADO
- {s}/studies/{study}/series/{series}/instances/{instance} endpoint : WADO-URI Retrieve Instance
- {s}/studies/{study}/metadata endpoint: Retrieve study metadata
- JSON schemas defined for QIDO query responses for studies, series and instances level
-
Implemented STOW using some parts from Dicomweb-client (https://github.com/dcmjs-org/dicomweb-client) and dcmjs (https://github.com/dcmjs-org/dcmjs)
- Improve code base with documentation, organization and testing
- Handling different tag values throughout study
- If there are different values for different series: We are thinking of showing an interface to fix
- If same uid is used with different values: We will show user notification. Optinons are overwriting or letting the user fix. We will start with overwriting
- Handling multiframes and frames endpoints
- Handing compression
- Integrate Dicomzero code to dcmjs utils
- Message.js should be exported from dcmjs to be used in this project
Side project C++ : this made some progress in parsing the JSON query results in C++, next steps will be to refactor some methods inside CTK to use JSON objects instead of relying on DcmDataset for internal storage and passing around of DICOM meta information. experiment code
Illustrations
Background and References
- SlicerChronicle: https://github.com/pieper/Chronicle
- SlicerChronicle: https://github.com/pieper/SlicerChronicle
- dcmjs: https://github.com/dcmjs-org/dcmjs