Skip to content

knopkem/dicom-dimse-native

Repository files navigation

Build Status GitHub issues FOSSA Status

Greenkeeper badge

dicom-dimse-native

Nodejs native addon for DICOM DIMSE services using the DCMTK DICOM c++ toolkit (v.3.6.8).

Supported DIMSE services

  • C-Echo as SCU and SCP
  • C-Find as SCU and SCP
  • C-Move as SCU and SCP
  • C-Get as SCU and SCP
  • C-Store as SCU and SCP

Features

  • build on robust c++ DICOM framework
  • prebuilds available for: macos, windows, linux
  • extended character set support
  • supports compression: JPEG, JPEG-LS, RLE, JPEG 2000
  • typescript support
  • simple to use

Roadmap:

  • Worklist SCP and SCU

How to install

This package uses prebuild to fetch precompiled binaries, so provided your platform is supported, all you need to do is:

npm i -s dicom-native-addon

Otherwise install will try to compile the sources for your platform, you will need:

  • CMake installed and in path
  • a working c++ compiler (vs 2015+ or g++5.3+)

Examples

run the examples: npm run example:[echoscu|findscu|getscu|movescu|storescu|storescp]

PACS-server

Features:

  • ECHO, FIND, MOVE, GET and STORE-SCP
  • sqlite db backend
  • multithreaded association handling
import { startStoreScp, storeScpOptions } from 'dicom-dimse-native';

const scpOptions: storeScpOptions = {
    source: {
        aet: "MY_AET",
        ip: "127.0.0.1",
        port: 9999,
    },
    peers: [
        {
            aet: "TARGET_AET",
            ip: "127.0.0.1",
            port: 5678
        }
    ],
    storagePath: "path_to_storage_dir",
};

startStoreScp(scpOptions, (result) => {
    console.log(JSON.parse(result));
});

Move-SCU

 import { moveScu, moveScuOptions } from 'dicom-dimse-native';

 const moveOptions: moveScuOptions =
    {
        source: {
            aet: "MY_AET",
            ip: "127.0.0.1",
            port: 9999
        },
        target: {
            aet: "TARGET_AET",
            ip: "127.0.0.1",
            port: 5678
        },
        tags: [
            {
                key: "0020000D",
                value: "1.3.46.670589.5.2.10.2156913941.892665384.993397",
            },
            {
                key: "00080052",
                value: "STUDY",
            },
        ],
        destination: "MY_AET", // e.g. sending to ourself
        verbose: true
    };
    moveScu(moveOptions, (result) => {
        console.log(JSON.parse(result));
    });

Find-SCU

import { findScu, findScuOptions } from 'dicom-dimse-native';

const options: findScuOptions = {
  source: {
    aet: "MY_AET",
    ip: "127.0.0.1",
    port: 9999
  },
  target: {
    aet: "TARGET_AET",
    ip: "127.0.0.1",
    port: 5678
  },
  tags: [
    {
      key: "0020000D",
      value: "1.3.46.670589.5.2.10.2156913941.892665384.993397",
    },
    {
      key: "00080052",
      value: "STUDY",
    },
    {
      key: "00100010",
      value: "",
    }
  ],
  verbose: true
};

findScu(options, (result) => {
  console.log(JSON.parse(result));
});

For more information see examples.

Result Format:

{
  code: 0 (success) / 1 (pending) / 2 (failure),
  container: null / 'DICOMJSON (only when using c-find)',
  messsage: 'request succeeded' / 'descriptive problem',
  status: 'success' / 'pending' / 'failure'
}

C-FIND results are returned in DICOMJSON format see https://www.dicomstandard.org/dicomweb/dicom-json-format/

License

FOSSA Status