Mercurial > hg > orthanc
view TODO @ 4796:94616af363ec filter-store-instance
added ReceivedCStoreInstanceFilter lua callback + OrthancPluginRegisterIncomingCStoreInstanceFilter in sdk
author | Alain Mazy <am@osimis.io> |
---|---|
date | Fri, 01 Oct 2021 18:36:45 +0200 |
parents | 9a1f106e175c |
children | 1eca4378d761 |
line wrap: on
line source
======================= === Orthanc Roadmap === ======================= For higher-level ideas in the roadmap, please first read the "Contributing to Orthanc" section of the Orthanc Book: https://book.orthanc-server.com/contributing.html ======= General ======= * Configure an user-defined site UID root if generating DICOM UIDs ("FromDcmtkBridge::GenerateUuid()") * Improve handling of errors in the command queue: https://groups.google.com/d/msg/orthanc-users/--njEbqcDDI/rBu8XL-Mm-cJ * Support partial file retrieval in Orthanc::HttpClient * Support retry counter in Orthanc::HttpClient * Option to enable DNS lookups in DICOM: https://hg.orthanc-server.com/orthanc/file/Orthanc-1.9.3/OrthancFramework/Sources/OrthancFramework.cpp#l88 * Toolbox::ComputeMD5() fails on files larger than 4GB ============================ Documentation (Orthanc Book) ============================ * Explain how log rotation can be achieved (no built-in support in Orthanc) * Explain how to interface with Mirth/NextGen Connect https://en.wikipedia.org/wiki/NextGen_Connect * How to reproduce issues by replacing Orthanc with storescp or wlmscpfs * How to capture TCP traffic of DICOM protocol using tcpdump and Wireshark * Add more configurations of viewers (Weasis, Slicer...): https://book.orthanc-server.com/integrations.html * Discuss HL7 in a dedicated page: https://groups.google.com/d/msg/orthanc-users/4dt4992O0lQ/opTjTFU2BgAJ https://groups.google.com/g/orthanc-users/c/Spjtcj9vSPo/m/ktUArWxUDQAJ ======== REST API ======== -------- Mid-term -------- * Archive jobs: Resume downloads using "range requests": https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests * Create DICOM from DICOMweb JSON ("application/dicom+json") with "/tools/create-dicom" * Create multi-frame images with /tools/create-dicom (by adding a "MultiFrame" flag to avoid creating a series), or modify PixelData of a multi-frame image: https://groups.google.com/g/orthanc-users/c/y3-xa_GcdLM/m/m0Kr5G5UPAAJ * Specify the transfer syntax in /tools/create-dicom * In the /studies/{id}/anonymize route, add an option to remove secondary captures. They usually contains Patient info in the image. The SOPClassUID might be used to identify such secondary captures. * Support "/preview" and "/matlab" for LUT color images * Add asynchronous mode in "/modalitities/.../move" for C-MOVE SCU: https://groups.google.com/g/orthanc-users/c/G3_jBy4X4NQ/m/8BanTsdMBQAJ * Ranges of DICOM tags for "Keep" and "Remove" in ".../modify" and ".../anonymize": https://groups.google.com/g/orthanc-users/c/6dETktKo9v8/m/b0LUvSfwAgAJ --------- Long-term --------- * Stick to the JSONapi or JAREST guidelines for a "v2" of the API: https://groups.google.com/forum/#!msg/orthanc-users/Bag-SwEE9ZI/-w7QXI6p7-oJ http://www.admiraalit.nl/jarest/ ===== DICOM ===== -------- Mid-term -------- * Support C-GET SCU (note that C-GET SCP was introduced in Orthanc 1.7.0) * Support "Retrieve AE Title" (0008,0054) in C-FIND: - On SCP side: done by https://hg.orthanc-server.com/orthanc/rev/1ec3e1e18f50 - On SCU side: https://groups.google.com/d/msg/orthanc-users/wPl0g5mqZco/5X1Z8tEzBgAJ * Support "Instance Availability" (0008,0056) in C-FIND: http://dicom.nema.org/medical/DICOM/2019a/output/chtml/part04/sect_C.4.html#sect_C.4.1.1.3.2 https://groups.google.com/d/msg/orthanc-users/hteDgE6igo8/j-ArqD7pBQAJ * Check Big Endian transfer syntax in ParsedDicomFile::EmbedImage and DicomImageDecoder * Strict hierarchical C-FIND: https://groups.google.com/d/msg/orthanc-users/VBHpeGVSNKM/tkaVvjWFBwAJ --------- Long-term --------- * Support extended association: https://groups.google.com/d/msg/orthanc-users/xD4d3mpc6ms/srF7E2goAAAJ * Support C-MOVE-CANCEL: https://groups.google.com/d/msg/orthanc-users/KnduYBFd06A/o86cl5SeCAAJ -------------------- Internationalization -------------------- * Support multiple specific character sets (cf. "SCSH32" in orthanc-tests) - http://dicom.nema.org/medical/dicom/current/output/chtml/part03/sect_C.12.html#sect_C.12.1.1.2 - Japanese test: http://dicom.nema.org/MEDICAL/dicom/2017c/output/chtml/part05/sect_H.3.2.html * Support Supplementary Kanji set (ISO 2022 IR 159) * Create DICOM files with multibyte encodings (Korean, JapaneseKanji, SimplifiedChinese) =========== Performance =========== * StorageAccessor => add a memory cache using MemoryStringCache, for instance to speed up WADO-RS Retrieve Frames in DICOMweb plugin * ServerContext::DicomCacheLocker => give access to the raw buffer, useful in ServerContext::DecodeDicomInstance() * DicomMap: create a cache to the main DICOM tags index * Check out rapidjson: https://github.com/miloyip/nativejson-benchmark ======== Database ======== * Integration test searching for "\" and "%" in PatientName, PatientID... ======= Plugins ======= --- SDK --- * Implement PluginsJob::GetOutput() to allow user-defined jobs to provide output: https://groups.google.com/g/orthanc-users/c/GZ7u0bTTVoo/m/Z7iTNTi2BgAJ * Add plugins for normalized operations (notably so as to support Print SCU/SCP, cf. "dcmprscp"): https://web.archive.org/web/20170923150432/https://www.medicalconnections.co.uk/kb/DICOM_Print_Service * Provide access to the Orthanc::DicomUserConnection class in plugins: https://groups.google.com/d/msg/orthanc-users/ycDA1xPuTRY/nsT2_GOtEgAJ * Provide a C++ callback similar to "ReceivedInstanceFilter()" in Lua https://book.orthanc-server.com/users/lua.html#filtering-incoming-dicom-instances https://groups.google.com/d/msg/orthanc-users/BtvLTE5Ni8A/vIMhmMgfBAAJ * In "OrthancPluginLog[Error|Warning|Info]()", prefix the log line with the name of the plugin, as retrieved by "OrthancPluginGetName()" ---------------- Ideas of plugins ---------------- * DICOM-RT primitives (RT-STRUCT, RT-PLAN, RT-DOSE) * Converter to/from NIfTI * Decode JPEG2k with grok: https://github.com/GrokImageCompression/grok * Generate dynamic HTTP content using Lua: https://groups.google.com/d/msg/orthanc-users/KompazkxRSs/5Rh03mzgDAAJ * More generally, expose more callbacks of the plugin SDK in Lua: https://groups.google.com/d/msg/orthanc-users/_FbiRHuXPGM/J-OAv7zaCAAJ * Configuration interface plugin * Delayed deletion plugin: https://bugs.orthanc-server.com/show_bug.cgi?id=186#c2 === Lua === * Configure HTTP headers from Lua (in HttpGet(), HttpPost(), HttpPut(), HttpDelete(), RestApiGet(), RestApiPost(), RestApiPut() and RestApiDelete(). https://groups.google.com/forum/#!msg/orthanc-users/WNnW187OILM/6XX_bm96BwAJ ================ Code refactoring ================ * Use Semaphore::Locker everywhere (instead of explicit Release() and Acquire()) * Avoid direct calls to FromDcmtkBridge (make most of its methods private), go through ParsedDicomFile wherever possible ================= Platform-specific ================= --------- Packaging --------- * RHEL through EPEL (as of 2021, CentOS seems to be over): http://fedoraproject.org/wiki/EPEL_Package_Maintainers * Fedora: Are DICOM dictionaries correctly located? https://groups.google.com/g/orthanc-users/c/YB_LTBuUQNA/m/3H1xsrZJDgAJ ------------------------ Big-endian architectures ------------------------ * Check the generated 16bpp PNG images ----------------- Microsoft Windows ----------------- * Add compatibility with non-ASCII paths (Orthanc expresses its paths as UTF-8 strings, but Windows expects them to be translated to the system locale) ==== Misc ==== ----------------- Maintenance tools ----------------- * Standalone tool to detect corrupted files: https://groups.google.com/g/orthanc-users/c/KASEJ9Gx3vQ/m/MIJFJdRhAwAJ * Standalone tool to detect orphan files in OrthancStorage ---------------------------------- Code quality and integration tests ---------------------------------- * Have a look at openQA (cf. GNU Health) * Add integration tests for LUT --------------------- External applications --------------------- * Create REST bindings with Slicer * Create REST bindings with Horos/OsiriX