Can someone simply explain how can I Implement the OHIF with a external API (NodeJs). I am a Noob.
To simplify the process I have taken a JSON example that is given on the Documentation.
Now I am simply creating the necessary APIs.
And last I implemented the api on the OHIF viewer.
Here is the NodeJS server I created.
// Read the JSON file containing DICOM data
const dicomData = JSON.parse(fs.readFileSync(path.join(__dirname, 'dicom_data.json'), 'utf8'));
// QIDO-RS endpoint for studies
app.get('/dicomweb/studies', (req, res) => {
res.set('Content-Type', 'application/dicom+json');
res.json(dicomData.studies);
});
// QIDO-RS endpoint for series
app.get('/dicomweb/studies/:studyInstanceUID/series', (req, res) => {
res.set('Content-Type', 'application/dicom+json');
res.json(dicomData.studies.series);
});
// QIDO-RS endpoint for instances
app.get('/dicomweb/studies/:studyInstanceUID/series/:seriesInstanceUID/instances', (req, res) => {
res.set('Content-Type', 'application/dicom+json');
res.json(dicomData.studies.series.instances);
});
// Metadata endpoint
app.get('/dicomweb/studies/:studyInstanceUID/series/:seriesInstanceUID/instances/:sopInstanceUID/metadata', (req, res) => {
res.set('Content-Type', 'application/dicom+json');
res.json(dicomData.studies.series.instances[0]);
});
app.listen(port, () => {
console.log(`DICOM Web Server running on port ${port}`);
});
My JSON Data Looks like this
{
"studies": [
{
"StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.6279.6001.298806137288633453246975630178",
"StudyDate": "20000101",
"StudyTime": "",
"PatientName": "",
"PatientID": "LIDC-IDRI-0001",
"AccessionNumber": "",
"PatientAge": "",
"PatientSex": "",
"series": [
{
"SeriesInstanceUID": "1.3.6.1.4.1.14519.5.2.1.6279.6001.179049373636438705059720603192",
"SeriesNumber": 3000566,
"Modality": "CT",
"SliceThickness": 2.5,
"instances": [
{
"metadata": {
"Columns": 512,
"Rows": 512,
"InstanceNumber": 1,
"SOPClassUID": "1.2.840.10008.5.1.4.1.1.2",
"PhotometricInterpretation": "MONOCHROME2",
"BitsAllocated": 16,
"BitsStored": 16,
"PixelRepresentation": 1,
"SamplesPerPixel": 1,
"PixelSpacing": [0.703125, 0.703125],
"HighBit": 15,
"ImageOrientationPatient": [1, 0, 0, 0, 1, 0],
"ImagePositionPatient": [-166, -171.699997, -10],
"FrameOfReferenceUID": "1.3.6.1.4.1.14519.5.2.1.6279.6001.229925374658226729607867499499",
"ImageType": ["ORIGINAL", "PRIMARY", "AXIAL"],
"Modality": "CT",
"SOPInstanceUID": "1.3.6.1.4.1.14519.5.2.1.6279.6001.262721256650280657946440242654",
"SeriesInstanceUID": "1.3.6.1.4.1.14519.5.2.1.6279.6001.179049373636438705059720603192",
"StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.6279.6001.298806137288633453246975630178",
"WindowCenter": -600,
"WindowWidth": 1600,
"SeriesDate": "20000101"
},
"url": "dicomweb:http://localhost:8000/1-001.dcm"
}
]
}
],
"NumInstances": 5,
"Modalities": "CT"
}
]
}
Implementation on the OHIF looks Like this(Its in the DefaultJs), I haven’t done anything to other files yet. Just the DefaultJs
dataSources: [
{
namespace: '@ohif/extension-default.dataSourcesModule.dicomweb',
sourceName: 'dicomweb',
configuration: {
friendlyName: 'Local DICOMWeb Server',
name: 'LocalDICOMWeb',
wadoUriRoot: 'http://localhost:8000/dicomweb',
qidoRoot: 'http://localhost:8000/dicomweb',
wadoRoot: 'http://localhost:8000/dicomweb',
qidoSupportsIncludeField: true,
supportsReject: false,
imageRendering: 'wadors',
thumbnailRendering: 'wadors',
enableStudyLazyLoad: true,
supportsFuzzyMatching: false,
supportsWildcard: false,
},
},