IngestTranscoding not working

Hi,

I’m trying to enable DICOM decompression on ingestion using the config below. My DICOM has a JPEG 2000 Lossless codec (1.2.840.10008.1.2.4.90) and is correctly transcoded by gdcmconv. However, when I use “IngestTranscoding” and upload a DICOM, the TransferSyntax remains 1.2.840.10008.1.2.4.90. Is there something wrong with my configuration?

Thanks,

Rogier

{
"Plugins" : [
"./libOrthancDicomWeb.dylib",
"./libOrthancGdcm.dylib"
],

"Gdcm" : {
"Enable" : true,
"RestrictTransferSyntaxes" : [
"1.2.840.10008.1.2.4.90", // JPEG 2000 Image Compression (Lossless Only)
"1.2.840.10008.1.2.4.91", // JPEG 2000 Image Compression
"1.2.840.10008.1.2.4.92", // JPEG 2000 Part 2 Multicomponent Image Compression (Lossless Only)
"1.2.840.10008.1.2.4.93" // JPEG 2000 Part 2 Multicomponent Image Compression
]
},

// Transcode
"IngestTranscoding": "1.2.840.10008.1.2.1",
"BuiltinDecoderTranscoderOrder" : "After"
}

Hello,

Please provide a sample DICOM file and your Orthanc logs in “–verbose” mode, without whose the community cannot help you:
https://book.orthanc-server.com/users/support.html#discussing-a-minimal-working-example

Sébastien-

The output of the logs can be found below, and the DICOM is attached to this message. Thanks!

W0719 09:33:02.799278 main.cpp:1436] Orthanc version: mainline (20190304T114932)
W0719 09:33:02.801442 OrthancConfiguration.cpp:61] Reading the configuration from: “default.json”
I0719 09:33:02.801909 Toolbox.cpp:1370] Using locale: “en_US.UTF-8” for case-insensitive comparison of strings
I0719 09:33:02.802619 Enumerations.cpp:2217] Default encoding for DICOM was changed to: Latin1
I0719 09:33:02.802848 FromDcmtkBridge.cpp:233] Using DCTMK version: 364
I0719 09:33:02.802909 FromDcmtkBridge.cpp:241] Loading the embedded dictionaries
I0719 09:33:02.817003 FromDcmtkBridge.cpp:253] Loading the embedded dictionary of private tags
I0719 09:33:02.827975 FromDcmtkBridge.cpp:2175] Registering JPEG Lossless codecs in DCMTK
I0719 09:33:02.828002 FromDcmtkBridge.cpp:2180] Registering JPEG codecs in DCMTK
W0719 09:33:02.835340 main.cpp:700] Loading plugin(s) from: ./libOrthancDicomWeb.dylib
W0719 09:33:02.853455 PluginsManager.cpp:269] Registering plugin ‘dicom-web’ (version mainline)
W0719 09:33:02.853619 PluginsManager.cpp:168] URI to the DICOMweb REST API: /dicom-web/
I0719 09:33:02.853633 OrthancPlugins.cpp:1273] Plugin has registered a REST callback without mutual exclusion on: /dicom-web/instances
I0719 09:33:02.853649 OrthancPlugins.cpp:1273] Plugin has registered a REST callback without mutual exclusion on: /dicom-web/series
I0719 09:33:02.853659 OrthancPlugins.cpp:1273] Plugin has registered a REST callback without mutual exclusion on: /dicom-web/studies
I0719 09:33:02.853669 OrthancPlugins.cpp:1273] Plugin has registered a REST callback without mutual exclusion on: /dicom-web/studies/([^/])
I0719 09:33:02.853690 OrthancPlugins.cpp:1273] Plugin has registered a REST callback without mutual exclusion on: /dicom-web/studies/([^/]
)/instances
I0719 09:33:02.853704 OrthancPlugins.cpp:1273] Plugin has registered a REST callback without mutual exclusion on: /dicom-web/studies/([^/])/metadata
I0719 09:33:02.853716 OrthancPlugins.cpp:1273] Plugin has registered a REST callback without mutual exclusion on: /dicom-web/studies/([^/]
)/series
I0719 09:33:02.853729 OrthancPlugins.cpp:1273] Plugin has registered a REST callback without mutual exclusion on: /dicom-web/studies/([^/])/series/([^/])
I0719 09:33:02.853742 OrthancPlugins.cpp:1273] Plugin has registered a REST callback without mutual exclusion on: /dicom-web/studies/([^/])/series/([^/])/instances
I0719 09:33:02.853756 OrthancPlugins.cpp:1273] Plugin has registered a REST callback without mutual exclusion on: /dicom-web/studies/([^/])/series/([^/])/instances/([^/])
I0719 09:33:02.853774 OrthancPlugins.cpp:1273] Plugin has registered a REST callback without mutual exclusion on: /dicom-web/studies/([^/]
)/series/([^/])/instances/([^/])/bulk/(.)
I0719 09:33:02.853802 OrthancPlugins.cpp:1273] Plugin has registered a REST callback without mutual exclusion on: /dicom-web/studies/([^/]
)/series/([^/])/instances/([^/])/metadata
I0719 09:33:02.853822 OrthancPlugins.cpp:1273] Plugin has registered a REST callback without mutual exclusion on: /dicom-web/studies/([^/])/series/([^/])/metadata
I0719 09:33:02.853835 OrthancPlugins.cpp:1273] Plugin has registered a REST callback without mutual exclusion on: /dicom-web/studies/([^/])/series/([^/])/instances/([^/])/frames
I0719 09:33:02.853854 OrthancPlugins.cpp:1273] Plugin has registered a REST callback without mutual exclusion on: /dicom-web/studies/([^/]
)/series/([^/])/instances/([^/])/frames/([^/])
I0719 09:33:02.853871 OrthancPlugins.cpp:1273] Plugin has registered a REST callback without mutual exclusion on: /dicom-web/servers
I0719 09:33:02.853881 OrthancPlugins.cpp:1273] Plugin has registered a REST callback without mutual exclusion on: /dicom-web/servers/([^/]
)
I0719 09:33:02.853892 OrthancPlugins.cpp:1273] Plugin has registered a REST callback without mutual exclusion on: /dicom-web/servers/([^/])/stow
I0719 09:33:02.853905 OrthancPlugins.cpp:1273] Plugin has registered a REST callback without mutual exclusion on: /dicom-web/servers/([^/]
)/get
I0719 09:33:02.853918 OrthancPlugins.cpp:1273] Plugin has registered a REST callback without mutual exclusion on: /dicom-web/servers/([^/]*)/retrieve
W0719 09:33:02.853931 PluginsManager.cpp:168] URI to the WADO-URI API: /wado
I0719 09:33:02.853937 OrthancPlugins.cpp:1273] Plugin has registered a REST callback without mutual exclusion on: /wado
W0719 09:33:02.853948 main.cpp:700] Loading plugin(s) from: ./libOrthancGdcm.dylib
W0719 09:33:02.865968 PluginsManager.cpp:269] Registering plugin ‘gdcm’ (version 1.2)
W0719 09:33:02.866087 PluginsManager.cpp:168] Orthanc will use GDCM to decode transfer syntax: 1.2.840.10008.1.2.4.90
W0719 09:33:02.866098 PluginsManager.cpp:168] Orthanc will use GDCM to decode transfer syntax: 1.2.840.10008.1.2.4.91
W0719 09:33:02.866104 PluginsManager.cpp:168] Orthanc will use GDCM to decode transfer syntax: 1.2.840.10008.1.2.4.92
W0719 09:33:02.866110 PluginsManager.cpp:168] Orthanc will use GDCM to decode transfer syntax: 1.2.840.10008.1.2.4.93
W0719 09:33:02.866118 PluginsManager.cpp:168] Version of GDCM: 3.0.8
W0719 09:33:02.866124 PluginsManager.cpp:168] GDCM throttling is disabled
I0719 09:33:02.866131 OrthancPlugins.cpp:1371] Plugin has registered a callback to decode DICOM images (1 decoder(s) now active)
E0719 09:33:02.866143 PluginsManager.cpp:204] Plugin invoking unknown service: 1015
W0719 09:33:02.866155 OrthancInitialization.cpp:301] SQLite index directory: “OrthancStorage”
W0719 09:33:02.866526 OrthancInitialization.cpp:376] Storage directory: “OrthancStorage”
I0719 09:33:02.867335 SQLiteDatabaseWrapper.cpp:394] Version of the Orthanc database: 6
W0719 09:33:02.867368 HttpClient.cpp:739] No certificates are provided to validate peers, set “HttpsCACertificates” if you need to do HTTPS requests
I0719 09:33:02.867378 HttpClient.cpp:152] Setting the default timeout for HTTP client connections: 0 seconds
I0719 09:33:02.867388 HttpClient.cpp:136] Setting the default proxy for HTTP client connections:
I0719 09:33:02.867396 DicomUserConnection.cpp:1346] Default timeout for DICOM connections if Orthanc acts as SCU (client): 10 seconds (0 = no timeout)
I0719 09:33:02.867502 ServerIndex.cpp:481] Starting the database flushing thread (sleep = 10)
I0719 09:33:02.867530 ServerIndex.cpp:2069] Starting the monitor for stable resources (stable age = 60)
I0719 09:33:02.867660 LuaJobManager.cpp:76] Lua: DICOM associations will be closed after 5 seconds of inactivity
I0719 09:33:02.867676 LuaScripting.cpp:616] Initializing Lua for the event handler
W0719 09:33:02.867810 LuaContext.cpp:103] Lua says: Lua toolbox installed
I0719 09:33:02.867915 LuaJobManager.cpp:76] Lua: DICOM associations will be closed after 5 seconds of inactivity
I0719 09:33:02.867927 LuaScripting.cpp:616] Initializing Lua for the event handler
W0719 09:33:02.868028 LuaContext.cpp:103] Lua says: Lua toolbox installed
W0719 09:33:02.868060 ServerContext.cpp:316] Disk compression is disabled
I0719 09:33:02.868068 ServerContext.cpp:676] Storing MD5 for attachments: yes
W0719 09:33:02.868077 ServerIndex.cpp:1613] No limit on the number of stored patients
W0719 09:33:02.868086 ServerIndex.cpp:1630] No limit on the size of the storage area
W0719 09:33:02.868296 ServerContext.cpp:168] Reloading the jobs from the last execution of Orthanc
W0719 09:33:02.868390 JobsEngine.cpp:283] The jobs engine has started with 2 threads
I0719 09:33:02.868400 JobsEngine.cpp:136] Worker thread 0 has started
I0719 09:33:02.868423 DicomServer.cpp:125] Setting timeout for DICOM connections if Orthanc acts as SCP (server): 30 seconds (0 = no timeout)
I0719 09:33:02.868479 JobsEngine.cpp:136] Worker thread 1 has started
W0719 09:33:02.868728 main.cpp:932] DICOM server listening with AET ORTHANC on port: 4242
I0719 09:33:02.868753 HttpServer.cpp:967] This Orthanc server uses CivetWeb as its embedded HTTP server
I0719 09:33:02.868761 HttpServer.cpp:1206] The embedded HTTP server will use 50 threads
I0719 09:33:02.868769 HttpServer.cpp:1122] HTTP keep alive is enabled
W0719 09:33:02.868774 HttpServer.cpp:1155] HTTP compression is enabled
I0719 09:33:02.868780 HttpServer.cpp:1214] TCP_NODELAY for the HTTP sockets is set to true
I0719 09:33:02.868786 HttpServer.cpp:999] Starting embedded Web server using Civetweb
I0719 09:33:02.868734 DicomServer.cpp:62] DICOM server started
W0719 09:33:02.869392 HttpServer.cpp:1062] HTTP server listening on port: 8042 (HTTPS encryption is disabled, remote access is not allowed)
W0719 09:33:02.869413 main.cpp:712] Orthanc has started
I0719 09:33:02.869419 LuaScripting.cpp:673] Starting the Lua engine

emri_small_jpeg_2k_lossless.dcm (39.4 KB)

Hello,

Using your configuration file, your DICOM instance is correctly transcoded to “1.2.840.10008.1.2.1” if using Orthanc 1.9.5 with GDCM plugin 1.4.

The problem is indicated in your log:

W0719 09:33:02.799278 main.cpp:1436] Orthanc version: mainline (20190304T114932)

As can be seen, you are using a version of Orthanc that was built in March 2019, whereas support for transcoding was introduced in Orthanc 1.7.0 that was only released in May 2020:
https://book.orthanc-server.com/faq/transcoding.html

So, the solution is to update your version of Orthanc. Note that Osimis provides precompiled macOS binaries with the latest version of Orthanc:
https://www.osimis.io/en/download.html

Sébastien-