From d4209ce0026584ee8316bdeb48c5249fc3f781c9 Mon Sep 17 00:00:00 2001 From: Andres Diaz-Pinto Date: Tue, 10 Oct 2023 21:02:58 +0100 Subject: [PATCH] Ohifv3 (#1562) * Add extension and mode for MONAI Label Signed-off-by: Andres * Add toolGroups to mode Signed-off-by: Andres * Extension and model working in class format Signed-off-by: Andres * Connection to MONAI Label server and label fetching are working now Signed-off-by: Andres * Add probe tool Signed-off-by: Andres * add segmentation load/rendering for OHIF v3 (#1525) * working segmentation load * segmentation panel * add frame of reference uid to monai segs * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Signed-off-by: Andres Diaz-Pinto Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Andres Diaz-Pinto * Update segmentatio reader function Signed-off-by: Andres * Model inference and label rendering working Signed-off-by: Andres * Convert points from world to ijk - remove all clicks Signed-off-by: Andres * Increase caching files when connecting to DICOM server Signed-off-by: Andres * Add active learning tab Signed-off-by: Andres * Update style for active learning tab Signed-off-by: Andres * Hide the right panel Signed-off-by: Andres * Send centroids to viewer Signed-off-by: Andres * Send segmentation to DICOM Web Signed-off-by: Andres * Fix centroids - json compatible Signed-off-by: Andres * Update gitignore - add build script Signed-off-by: Andres * feat(ohifv3): parse segment centroids for jump and make smartEdit work (#1531) * working segmentation load * segmentation panel * add frame of reference uid to monai segs * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * make probe tool grab color for selected segment * parse centroids and add to segmentation * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Signed-off-by: Andres Diaz-Pinto Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Andres Diaz-Pinto * Fix indexes for centroids Signed-off-by: Andres * Add image Signed-off-by: Andres * Add segmentation panel Signed-off-by: Andres * DICOM-SEG writer is working Signed-off-by: Andres * DeepEdit working on OHIFv3 Signed-off-by: Andres * Update tab name Signed-off-by: Andres * Update gitignore Signed-off-by: Andres * OHIFv3 working Signed-off-by: Andres * Update bash scrip to build OHIFv3 Signed-off-by: Andres * COOP solved - using orthanc instead of proxy Signed-off-by: Andres * Update print statement Signed-off-by: Andres * Change tab background Signed-off-by: Andres * feat(segmentation tools): working new segmentation panel and brushes (#1545) * working segmentation load * segmentation panel * add frame of reference uid to monai segs * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * make probe tool grab color for selected segment * parse centroids and add to segmentation * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * initial commit for toolbox * fix merge * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Signed-off-by: Andres Diaz-Pinto Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Andres Diaz-Pinto * feat(labels): add initial labels from the server as starting point (#1546) * working segmentation load * segmentation panel * add frame of reference uid to monai segs * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * make probe tool grab color for selected segment * parse centroids and add to segmentation * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * initial commit for toolbox * fix merge * add initial segments from the server * fix after pull * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Signed-off-by: Andres Diaz-Pinto Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Andres Diaz-Pinto * Add batch infer Signed-off-by: Andres * Change background colors and fix click edition Signed-off-by: Andres * change ohif image Signed-off-by: Andres * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Proxy Headers Signed-off-by: Andres --------- Signed-off-by: Andres Signed-off-by: Andres Diaz-Pinto Co-authored-by: Alireza Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .gitignore | 4 + monailabel/config.py | 2 +- monailabel/datastore/utils/convert.py | 2 +- monailabel/endpoints/ohif.py | 9 + monailabel/endpoints/proxy.py | 9 + monailabel/tasks/infer/basic_infer.py | 11 + .../src/components/MonaiLabelPanel.js | 4 + plugins/ohifv3/README.md | 149 +++++ plugins/ohifv3/build.sh | 75 +++ .../ohifv3/extension-monai-label/.gitignore | 104 +++ .../ohifv3/extension-monai-label/.prettierrc | 8 + .../.webpack/webpack.prod.js | 63 ++ plugins/ohifv3/extension-monai-label/LICENSE | 9 + .../ohifv3/extension-monai-label/README.md | 7 + .../extension-monai-label/babel.config.js | 66 ++ .../ohifv3/extension-monai-label/package.json | 88 +++ .../src/components/ModelSelector.styl | 33 + .../src/components/ModelSelector.tsx | 116 ++++ .../src/components/MonaiLabelPanel.styl | 146 +++++ .../src/components/MonaiLabelPanel.tsx | 403 ++++++++++++ .../src/components/MonaiSegmentation.tsx | 316 +++++++++ .../src/components/SegmentationToolbox.tsx | 368 +++++++++++ .../src/components/SettingsTable.styl | 53 ++ .../src/components/SettingsTable.tsx | 90 +++ .../Toolbox/ThresholdSettingsPreset.tsx | 88 +++ .../components/actions/ActiveLearning.styl | 14 + .../src/components/actions/ActiveLearning.tsx | 331 ++++++++++ .../components/actions/AutoSegmentation.styl | 14 + .../components/actions/AutoSegmentation.tsx | 111 ++++ .../src/components/actions/BaseTab.styl | 14 + .../src/components/actions/BaseTab.tsx | 39 ++ .../components/actions/NextSampleForm.styl | 54 ++ .../src/components/actions/NextSampleForm.tsx | 95 +++ .../src/components/actions/OptionTable.styl | 35 + .../src/components/actions/OptionTable.tsx | 218 +++++++ .../src/components/actions/SmartEdit.styl | 14 + .../src/components/actions/SmartEdit.tsx | 326 ++++++++++ .../src/components/callInputDialog.tsx | 62 ++ .../src/components/colorPickerDialog.css | 3 + .../src/components/colorPickerDialog.tsx | 58 ++ .../src/getCommandsModule.ts | 47 ++ .../src/getPanelModule.tsx | 33 + .../ohifv3/extension-monai-label/src/id.js | 5 + .../extension-monai-label/src/index.tsx | 57 ++ .../ohifv3/extension-monai-label/src/init.ts | 15 + .../src/services/MonaiLabelClient.js | 208 ++++++ .../src/tools/ProbeMONAILabelTool.ts | 83 +++ .../src/utils/GenericAnatomyColors.js | 549 ++++++++++++++++ .../src/utils/GenericUtils.js | 100 +++ .../src/utils/SegmentationReader.js | 98 +++ .../src/utils/SegmentationUtils.tsx | 57 ++ .../src/utils/addToolInstance.ts | 12 + plugins/ohifv3/images/ohifv3.png | Bin 0 -> 408112 bytes plugins/ohifv3/mode-monai-label/.gitignore | 104 +++ plugins/ohifv3/mode-monai-label/.prettierrc | 8 + .../mode-monai-label/.webpack/webpack.prod.js | 62 ++ plugins/ohifv3/mode-monai-label/LICENSE | 9 + plugins/ohifv3/mode-monai-label/README.md | 7 + .../ohifv3/mode-monai-label/babel.config.js | 44 ++ plugins/ohifv3/mode-monai-label/package.json | 64 ++ plugins/ohifv3/mode-monai-label/src/id.js | 5 + plugins/ohifv3/mode-monai-label/src/index.tsx | 206 ++++++ .../mode-monai-label/src/initToolGroups.js | 209 ++++++ .../mode-monai-label/src/toolbarButtons.js | 608 ++++++++++++++++++ plugins/ohifv3/requirements.sh | 22 + sample-apps/radiology/lib/infers/deepedit.py | 6 +- .../radiology/lib/infers/segmentation.py | 16 +- .../radiology/lib/transforms/transforms.py | 1 - tests/unit/datastore/test_convert.py | 2 +- 69 files changed, 6237 insertions(+), 11 deletions(-) create mode 100644 plugins/ohifv3/README.md create mode 100755 plugins/ohifv3/build.sh create mode 100644 plugins/ohifv3/extension-monai-label/.gitignore create mode 100644 plugins/ohifv3/extension-monai-label/.prettierrc create mode 100644 plugins/ohifv3/extension-monai-label/.webpack/webpack.prod.js create mode 100644 plugins/ohifv3/extension-monai-label/LICENSE create mode 100644 plugins/ohifv3/extension-monai-label/README.md create mode 100644 plugins/ohifv3/extension-monai-label/babel.config.js create mode 100644 plugins/ohifv3/extension-monai-label/package.json create mode 100644 plugins/ohifv3/extension-monai-label/src/components/ModelSelector.styl create mode 100644 plugins/ohifv3/extension-monai-label/src/components/ModelSelector.tsx create mode 100644 plugins/ohifv3/extension-monai-label/src/components/MonaiLabelPanel.styl create mode 100644 plugins/ohifv3/extension-monai-label/src/components/MonaiLabelPanel.tsx create mode 100644 plugins/ohifv3/extension-monai-label/src/components/MonaiSegmentation.tsx create mode 100644 plugins/ohifv3/extension-monai-label/src/components/SegmentationToolbox.tsx create mode 100644 plugins/ohifv3/extension-monai-label/src/components/SettingsTable.styl create mode 100644 plugins/ohifv3/extension-monai-label/src/components/SettingsTable.tsx create mode 100644 plugins/ohifv3/extension-monai-label/src/components/Toolbox/ThresholdSettingsPreset.tsx create mode 100644 plugins/ohifv3/extension-monai-label/src/components/actions/ActiveLearning.styl create mode 100644 plugins/ohifv3/extension-monai-label/src/components/actions/ActiveLearning.tsx create mode 100644 plugins/ohifv3/extension-monai-label/src/components/actions/AutoSegmentation.styl create mode 100644 plugins/ohifv3/extension-monai-label/src/components/actions/AutoSegmentation.tsx create mode 100644 plugins/ohifv3/extension-monai-label/src/components/actions/BaseTab.styl create mode 100644 plugins/ohifv3/extension-monai-label/src/components/actions/BaseTab.tsx create mode 100644 plugins/ohifv3/extension-monai-label/src/components/actions/NextSampleForm.styl create mode 100644 plugins/ohifv3/extension-monai-label/src/components/actions/NextSampleForm.tsx create mode 100644 plugins/ohifv3/extension-monai-label/src/components/actions/OptionTable.styl create mode 100644 plugins/ohifv3/extension-monai-label/src/components/actions/OptionTable.tsx create mode 100644 plugins/ohifv3/extension-monai-label/src/components/actions/SmartEdit.styl create mode 100644 plugins/ohifv3/extension-monai-label/src/components/actions/SmartEdit.tsx create mode 100644 plugins/ohifv3/extension-monai-label/src/components/callInputDialog.tsx create mode 100644 plugins/ohifv3/extension-monai-label/src/components/colorPickerDialog.css create mode 100644 plugins/ohifv3/extension-monai-label/src/components/colorPickerDialog.tsx create mode 100644 plugins/ohifv3/extension-monai-label/src/getCommandsModule.ts create mode 100644 plugins/ohifv3/extension-monai-label/src/getPanelModule.tsx create mode 100644 plugins/ohifv3/extension-monai-label/src/id.js create mode 100644 plugins/ohifv3/extension-monai-label/src/index.tsx create mode 100644 plugins/ohifv3/extension-monai-label/src/init.ts create mode 100644 plugins/ohifv3/extension-monai-label/src/services/MonaiLabelClient.js create mode 100644 plugins/ohifv3/extension-monai-label/src/tools/ProbeMONAILabelTool.ts create mode 100644 plugins/ohifv3/extension-monai-label/src/utils/GenericAnatomyColors.js create mode 100644 plugins/ohifv3/extension-monai-label/src/utils/GenericUtils.js create mode 100644 plugins/ohifv3/extension-monai-label/src/utils/SegmentationReader.js create mode 100644 plugins/ohifv3/extension-monai-label/src/utils/SegmentationUtils.tsx create mode 100644 plugins/ohifv3/extension-monai-label/src/utils/addToolInstance.ts create mode 100644 plugins/ohifv3/images/ohifv3.png create mode 100644 plugins/ohifv3/mode-monai-label/.gitignore create mode 100644 plugins/ohifv3/mode-monai-label/.prettierrc create mode 100644 plugins/ohifv3/mode-monai-label/.webpack/webpack.prod.js create mode 100644 plugins/ohifv3/mode-monai-label/LICENSE create mode 100644 plugins/ohifv3/mode-monai-label/README.md create mode 100644 plugins/ohifv3/mode-monai-label/babel.config.js create mode 100644 plugins/ohifv3/mode-monai-label/package.json create mode 100644 plugins/ohifv3/mode-monai-label/src/id.js create mode 100644 plugins/ohifv3/mode-monai-label/src/index.tsx create mode 100644 plugins/ohifv3/mode-monai-label/src/initToolGroups.js create mode 100644 plugins/ohifv3/mode-monai-label/src/toolbarButtons.js create mode 100755 plugins/ohifv3/requirements.sh diff --git a/.gitignore b/.gitignore index 59af1f056..69f5d3f66 100644 --- a/.gitignore +++ b/.gitignore @@ -166,3 +166,7 @@ junit test-output.xml studies tests/data +yarn.lock +# Packages +node_modules +yarn.lock diff --git a/monailabel/config.py b/monailabel/config.py index 39c5db3a4..e041cacce 100644 --- a/monailabel/config.py +++ b/monailabel/config.py @@ -62,7 +62,7 @@ class Settings(BaseSettings): MONAI_LABEL_DICOMWEB_FETCH_BY_FRAME: bool = False MONAI_LABEL_DICOMWEB_CONVERT_TO_NIFTI: bool = True MONAI_LABEL_DICOMWEB_SEARCH_FILTER: Dict[str, Any] = {"Modality": "CT"} - MONAI_LABEL_DICOMWEB_CACHE_EXPIRY: int = 180 + MONAI_LABEL_DICOMWEB_CACHE_EXPIRY: int = 7200 MONAI_LABEL_DICOMWEB_PROXY_TIMEOUT: float = 30.0 MONAI_LABEL_DICOMWEB_READ_TIMEOUT: float = 5.0 diff --git a/monailabel/datastore/utils/convert.py b/monailabel/datastore/utils/convert.py index 2d6b0ea94..a0403e1d7 100644 --- a/monailabel/datastore/utils/convert.py +++ b/monailabel/datastore/utils/convert.py @@ -60,7 +60,7 @@ def dicom_to_nifti(series_dir, is_seg=False): return output_file -def binary_to_image(reference_image, label, dtype=np.uint16, file_ext=".nii.gz"): +def binary_to_image(reference_image, label, dtype=np.uint8, file_ext=".nii.gz"): start = time.time() image_np, meta_dict = LoadImage(image_only=False)(reference_image) diff --git a/monailabel/endpoints/ohif.py b/monailabel/endpoints/ohif.py index b4d9ad68f..55a4ea597 100644 --- a/monailabel/endpoints/ohif.py +++ b/monailabel/endpoints/ohif.py @@ -38,8 +38,17 @@ def get_ohif(path: str): if not os.path.exists(file): logger.info(file) raise HTTPException(status_code=404, detail="Resource NOT Found") + return FileResponse(file, media_type=get_mime_type(file)) + # headers = { + # "Cross-Origin-Opener-Policy": "same-origin", + # "Cross-Origin-Embedder-Policy": "require-corp", + # "Cross-Origin-Resource-Policy": "same-site", + # } + + # return FileResponse(file, media_type=get_mime_type(file), headers=headers) + @router.get("/{path:path}", include_in_schema=False) async def api_get_ohif(path: str, user: User = Depends(RBAC(settings.MONAI_LABEL_AUTH_ROLE_USER))): diff --git a/monailabel/endpoints/proxy.py b/monailabel/endpoints/proxy.py index 0dc4709ed..8b2529832 100644 --- a/monailabel/endpoints/proxy.py +++ b/monailabel/endpoints/proxy.py @@ -65,6 +65,9 @@ async def proxy_dicom(op: str, path: str, response: Response): ) # some version of ohif requests metadata using qido so change it to wado + print( + f"This is the server {server} - This is the op {op} - This is the prefix {prefix} - This is the path {path}" + ) if path.endswith("metadata") and op == "qido": prefix = settings.MONAI_LABEL_WADO_PREFIX @@ -78,10 +81,16 @@ async def proxy_dicom(op: str, path: str, response: Response): settings.MONAI_LABEL_DICOMWEB_PROXY_TIMEOUT, read=settings.MONAI_LABEL_DICOMWEB_READ_TIMEOUT, ) + + print(f"This is the proxy path: {proxy_path}") proxy = await client.get(proxy_path, timeout=timeout) response.body = proxy.content response.status_code = proxy.status_code + # response.headers["Cross-Origin-Opener-Policy"] = "same-origin" + # response.headers["Cross-Origin-Embedder-Policy"] = "require-corp" + # response.headers["Cross-Origin-Resource-Policy"] = "same-site" + # response.headers["Cross-Origin-Resource-Policy"] = "cross-origin" return response diff --git a/monailabel/tasks/infer/basic_infer.py b/monailabel/tasks/infer/basic_infer.py index 2c335d353..e0b12eddc 100644 --- a/monailabel/tasks/infer/basic_infer.py +++ b/monailabel/tasks/infer/basic_infer.py @@ -355,6 +355,17 @@ def __call__( "transform": data.get("latencies"), } + # Add Centroids to the result json to consume in OHIF v3 + centroids = data.get("centroids", None) + if centroids is not None: + centroids_dict = dict() + for c in centroids: + all_items = list(c.items()) + centroids_dict[all_items[0][0]] = [str(i) for i in all_items[0][1]] # making it json compatible + result_json["centroids"] = centroids_dict + else: + result_json["centroids"] = dict() + if result_file_name is not None and isinstance(result_file_name, str): logger.info(f"Result File: {result_file_name}") logger.info(f"Result Json Keys: {list(result_json.keys())}") diff --git a/plugins/ohif/monai-label/src/components/MonaiLabelPanel.js b/plugins/ohif/monai-label/src/components/MonaiLabelPanel.js index 6ed5a442e..c17675044 100644 --- a/plugins/ohif/monai-label/src/components/MonaiLabelPanel.js +++ b/plugins/ohif/monai-label/src/components/MonaiLabelPanel.js @@ -39,6 +39,10 @@ export default class MonaiLabelPanel extends Component { super(props); const { viewports, studies, activeIndex } = props; + /* setTimeout(() => { + this.viewConstants = this.getViewConstants(viewports, studies, activeIndex); + }, 2000) */ + this.viewConstants = this.getViewConstants(viewports, studies, activeIndex); console.debug(this.viewConstants); diff --git a/plugins/ohifv3/README.md b/plugins/ohifv3/README.md new file mode 100644 index 000000000..f7b1920d7 --- /dev/null +++ b/plugins/ohifv3/README.md @@ -0,0 +1,149 @@ + + +## MONAI Label Plugin for OHIF Viewer +The Open Health Imaging Foundation (OHIF) Viewer is an open-source, web-based platform for medical imaging. OHIF Viewer provides a framework for building complex imaging applications with user-friendly interfaces. MONAI Label supports the web-based OHIF viewer with connectivity to a remote DICOM server via DICOMweb. + + + +### Table of Contents +- [Supported Applications](#supported-applications) +- [Installing OHIF](#installing-ohif) +- [Installing Orthanc](#installing-orthanc-dicomweb) +- [Converting NIFTI Images to DICOM](#converting-nifti-images-to-dicom) +- [Converting NIFTI Annotations to DICOM-SEG](#converting-nifti-annotations-to-dicom-seg) +- [Uploading DICOM to Orthanc](#uploading-dicom-to-orthanc) + +### Supported Applications +Supported applications can be found in the [sample-apps](../../sample-apps/radiology/) folder under the radiology section. These applications include models like DeepEdit, DeepGrow, Segmentation, and more, which can be used to create and refine labels for various medical imaging tasks. + +### Installing OHIF +When installing MONAI Label with `pip install monailabel`, a version of OHIF that is pre-built with the MONAI Label library is automatically installed. OHIF will be accessible at http://127.0.0.1:8000/ohif/ when you start the MONAI Label server and connect to local/remote DICOM-web storage. + +#### Development setup + +To build the OHIF plugin for development, follow these steps: + ```bash + sudo sh requirements.sh # installs yarn + sh build.sh + ``` + +To run Orthanc from the submodule and avoid building the OHIF package for every code change, use the following commands: +```bash +cd plugins/ohif/Viewers + +yarn run dev:orthanc + +# OHIF will run at http://127.0.0.1:3000/ +``` +You can then visit http://127.0.0.1:3000/ on your browser to see the running OHIF. + +### Installing Orthanc (DICOMWeb) + +#### Ubuntu 20.x + +```bash +# Install Orthanc and DICOMweb plugin +sudo apt-get install orthanc orthanc-dicomweb -y + +# Install Plastimatch +sudo apt-get install plastimatch -y +``` + +However, you must upgrade to the latest version by following the steps mentioned on the [Orthanc Installation Guide](https://book.orthanc-server.com/users/debian-packages.html#replacing-the-package-from-the-service-by-the-lsb-binaries) + +```bash +sudo service orthanc stop +sudo wget https://lsb.orthanc-server.com/orthanc/1.9.7/Orthanc --output-document /usr/sbin/Orthanc +sudo rm -f /usr/share/orthanc/plugins/*.so + +sudo wget https://lsb.orthanc-server.com/orthanc/1.9.7/libServeFolders.so --output-document /usr/share/orthanc/plugins/libServeFolders.so +sudo wget https://lsb.orthanc-server.com/orthanc/1.9.7/libModalityWorklists.so --output-document /usr/share/orthanc/plugins/libModalityWorklists.so +sudo wget https://lsb.orthanc-server.com/plugin-dicom-web/1.6/libOrthancDicomWeb.so --output-document /usr/share/orthanc/plugins/libOrthancDicomWeb.so + +sudo service orthanc restart +``` + +#### Windows/Others _(latest version)_ + +- Download and Install Orthanc from https://www.orthanc-server.com/download.php + +### Converting NIFTI images to DICOM +To use Orthanc, your files need to be in DICOM format. You can convert any Nifti files to DICOM using the following command: +```bash +plastimatch convert --patient-id patient1 --input image.nii.gz --output-dicom test +``` +- `plastimatch convert`: This is the command to run the conversion tool. +- `--patient-id patient1`: This option specifies the ID of the patient to be associated with the DICOM files. In this example, it is set to `patient1`. +- `--input image.nii.gz`: This option specifies the path to the input Nifti file that you want to convert to DICOM. In this example, the input file is `image.nii.gz`. +- `--output-dicom test`: This option specifies the path to the output folder where the DICOM files will be saved. In this example, the output folder is named `test`. + +When you run this command, plastimatch will read the input Nifti file and convert it to a series of DICOM files with the specified patient ID. These files will be saved in the test folder in DICOM format, which can be uploaded to an Orthanc server. + +### Converting NIFTI Annotations to DICOM-SEG + +If you want to upload image annotations to the DICOMWeb server (such as Orthanc), you should use DICOM-SEG format. DICOM-SEG is a DICOM standard format for image segmentation. To convert NIFTI annotations to DICOM-SEG, you can use the itkimage2segimage tool from ITK (Insight Toolkit). + +Here's how to use itkimage2segimage to convert NIFTI annotations to DICOM-SEG: + +1. Install ITK: You can download and install ITK from their website, or use a package manager such as pip or conda to install it. +2. Convert NIFTI annotations to NIFTI-Segmentations: Use the `plastimatch convert` command to convert the NIFTI annotations to NIFTI-Segmentations format. This format is required as an input to `itkimage2segimage`. The command is similar to the one used to convert NIFTI images to DICOM, but with an additional option: + +```bash +plastimatch convert --input annotations.nii.gz --output-nifti-seg annotations-seg.nii.gz +``` +This command will convert the NIFTI annotations file named `annotations.nii.gz` to NIFTI-Segmentations format and save the result in a file named `annotations-seg.nii.gz`. + +3. Convert NIFTI-Segmentations to DICOM-SEG: Use the `itkimage2segimage` command to convert the NIFTI-Segmentations file to DICOM-SEG format. Here's an example command: + +```bash +itkimage2segimage --inputImage annotations-seg.nii.gz --outputDICOM annotations-seg.dcm --patientID patient1 +``` +This command will convert the `annotations-seg.nii.gz` file to DICOM-SEG format and save the result in a file named `annotations-seg.dcm`. The `--patientID` option specifies the ID of the patient to be associated with the DICOM-SEG file. + +After conversion, you can upload the DICOM-SEG file to the DICOMWeb server such as Orthanc. + + +### Uploading DICOM to Orthanc + +#### Use Orthanc Browser +You can use the Orthanc browser located at http://127.0.0.1:8042/app/explorer.html#upload to upload files. + +#### Using STORE SCP/SCU +To upload files using STORE SCP/SCU, you need to enable AET by editing the `orthanc.json` file: +`sudo vim /etc/orthanc/orthanc.json` + +```json5 +// The list of the known DICOM modalities +"DicomModalities" : { +/** + * Uncommenting the following line would enable Orthanc to + * connect to an instance of the "storescp" open-source DICOM + * store (shipped in the DCMTK distribution) started by the + * command line "storescp 2000". + **/ +"sample": ["MONAILABEL", "127.0.0.1", 104] +``` +Then, restart Orthanc: + +``` +sudo service orthanc restart +``` + +#### Upload Files +To upload files, use the following command: + +```bash +python -m pynetdicom storescu 127.0.0.1 4242 test -aet MONAILABEL -r +``` +That's it! With these steps, you should have successfully installed MONAI Label with the OHIF viewer plugin and connected it to a remote DICOM server via DICOMweb. diff --git a/plugins/ohifv3/build.sh b/plugins/ohifv3/build.sh new file mode 100755 index 000000000..a47134569 --- /dev/null +++ b/plugins/ohifv3/build.sh @@ -0,0 +1,75 @@ +#!/bin/bash + +# Copyright (c) MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +curr_dir="$(pwd)" +my_dir="$(dirname "$(readlink -f "$0")")" + +echo "Installing requirements..." +sh $my_dir/requirements.sh + +install_dir=${1:-$my_dir/../../monailabel/endpoints/static/ohif} + +echo "Current Dir: ${curr_dir}" +echo "My Dir: ${my_dir}" +echo "Installing OHIF at: ${install_dir}" + +cd ${my_dir} +rm -rf Viewers +git clone https://github.com/OHIF/Viewers.git +cd Viewers +git checkout feat/monai-label + + +sed -i "s|routerBasename: '/'|routerBasename: '/ohif/'|g" ./platform/app/public/config/default.js +sed -i "s|name: 'aws'|name: 'Orthanc'|g" ./platform/app/public/config/default.js +sed -i "s|wadoUriRoot: 'https://d33do7qe4w26qo.cloudfront.net/dicomweb'|wadoUriRoot: 'http://localhost/dicom-web'|g" ./platform/app/public/config/default.js +sed -i "s|wadoRoot: 'https://d33do7qe4w26qo.cloudfront.net/dicomweb'|wadoRoot: 'http://localhost/dicom-web'|g" ./platform/app/public/config/default.js +sed -i "s|qidoRoot: 'https://d33do7qe4w26qo.cloudfront.net/dicomweb'|qidoRoot: 'http://localhost/dicom-web'|g" ./platform/app/public/config/default.js + +sed -i "s|PUBLIC_URL=/|PUBLIC_URL=/ohif/|g" ./platform/app/.env + + +yarn install + +# Link the mode and extension HERE +echo "Linking extension and mode at: $(pwd)" +yarn run cli link-extension ../extension-monai-label +yarn run cli link-mode ../mode-monai-label + +cd ../extension-monai-label + +echo "Running install again at: $(pwd)" + +yarn install + +echo "Moving nrrd-js and itk node modules to Viewersnode_modules/" + +cp -r ./node_modules/nrrd-js ../Viewers/node_modules/ + +cp -r ./node_modules/itk ../Viewers/node_modules/ + +echo "Moving to Viewers folder to build OHIF" + +cd ../Viewers + +echo "Viewers folder before building OHIF $(pwd)" + +QUICK_BUILD=true yarn run build + +rm -rf ${install_dir} +mv ./platform/app/dist/ ${install_dir} +echo "Copied OHIF to ${install_dir}" + +rm -rf ../Viewers + +cd ${curr_dir} diff --git a/plugins/ohifv3/extension-monai-label/.gitignore b/plugins/ohifv3/extension-monai-label/.gitignore new file mode 100644 index 000000000..67045665d --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/.gitignore @@ -0,0 +1,104 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and *not* Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port diff --git a/plugins/ohifv3/extension-monai-label/.prettierrc b/plugins/ohifv3/extension-monai-label/.prettierrc new file mode 100644 index 000000000..b80ec6b34 --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/.prettierrc @@ -0,0 +1,8 @@ +{ + "trailingComma": "es5", + "printWidth": 80, + "proseWrap": "always", + "tabWidth": 2, + "semi": true, + "singleQuote": true +} diff --git a/plugins/ohifv3/extension-monai-label/.webpack/webpack.prod.js b/plugins/ohifv3/extension-monai-label/.webpack/webpack.prod.js new file mode 100644 index 000000000..070a723e3 --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/.webpack/webpack.prod.js @@ -0,0 +1,63 @@ +const path = require('path'); +const pkg = require('../package.json'); + +const outputFile = 'index.umd.js'; +const rootDir = path.resolve(__dirname, '../'); +const outputFolder = path.join(__dirname, `../dist/umd/${pkg.name}/`); + +// Todo: add ESM build for the extension in addition to umd build + +const config = { + mode: 'production', + entry: rootDir + '/' + pkg.module, + devtool: 'source-map', + output: { + path: outputFolder, + filename: outputFile, + library: pkg.name, + libraryTarget: 'umd', + chunkFilename: '[name].chunk.js', + umdNamedDefine: true, + globalObject: "typeof self !== 'undefined' ? self : this", + }, + externals: [ + { + react: { + root: 'React', + commonjs2: 'react', + commonjs: 'react', + amd: 'react', + }, + '@ohif/core': { + commonjs2: '@ohif/core', + commonjs: '@ohif/core', + amd: '@ohif/core', + root: '@ohif/core', + }, + '@ohif/ui': { + commonjs2: '@ohif/ui', + commonjs: '@ohif/ui', + amd: '@ohif/ui', + root: '@ohif/ui', + }, + }, + ], + module: { + rules: [ + { + test: /(\.jsx|\.js|\.tsx|\.ts)$/, + loader: 'babel-loader', + exclude: /(node_modules|bower_components)/, + resolve: { + extensions: ['.js', '.jsx', '.ts', '.tsx'], + }, + }, + ], + }, + resolve: { + modules: [path.resolve('./node_modules'), path.resolve('./src')], + extensions: ['.json', '.js', '.jsx', '.tsx', '.ts'], + }, +}; + +module.exports = config; diff --git a/plugins/ohifv3/extension-monai-label/LICENSE b/plugins/ohifv3/extension-monai-label/LICENSE new file mode 100644 index 000000000..f0f1d2279 --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/LICENSE @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) 2023 extension-monai-label (adiazpinto@nvidia.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/plugins/ohifv3/extension-monai-label/README.md b/plugins/ohifv3/extension-monai-label/README.md new file mode 100644 index 000000000..a8b628c56 --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/README.md @@ -0,0 +1,7 @@ +# extension-monai-label +## Description +OHIFv3 extension for MONAI Label +## Author +OHIF,NVIDIA,KCL +## License +MIT diff --git a/plugins/ohifv3/extension-monai-label/babel.config.js b/plugins/ohifv3/extension-monai-label/babel.config.js new file mode 100644 index 000000000..371f77fcf --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/babel.config.js @@ -0,0 +1,66 @@ +// https://babeljs.io/docs/en/options#babelrcroots +const { extendDefaultPlugins } = require('svgo'); + +module.exports = { + plugins: [ + [ + 'inline-react-svg', + { + svgo: { + plugins: extendDefaultPlugins([ + { + name: 'removeViewBox', + active: false, + }, + ]), + }, + }, + ], + ['@babel/plugin-proposal-class-properties', { loose: true }], + '@babel/plugin-transform-typescript', + ['@babel/plugin-proposal-private-property-in-object', { loose: true }], + ['@babel/plugin-proposal-private-methods', { loose: true }], + ], + env: { + test: { + presets: [ + [ + // TODO: https://babeljs.io/blog/2019/03/19/7.4.0#migration-from-core-js-2 + '@babel/preset-env', + { + modules: 'commonjs', + debug: false, + }, + ], + '@babel/preset-react', + '@babel/preset-typescript', + ], + plugins: [ + '@babel/plugin-proposal-object-rest-spread', + '@babel/plugin-syntax-dynamic-import', + '@babel/plugin-transform-regenerator', + '@babel/plugin-transform-runtime', + '@babel/plugin-transform-typescript', + ], + }, + production: { + presets: [ + // WebPack handles ES6 --> Target Syntax + ['@babel/preset-env', { modules: false }], + '@babel/preset-react', + '@babel/preset-typescript', + ], + ignore: ['**/*.test.jsx', '**/*.test.js', '__snapshots__', '__tests__'], + }, + development: { + presets: [ + // WebPack handles ES6 --> Target Syntax + ['@babel/preset-env', { modules: false }], + '@babel/preset-react', + '@babel/preset-typescript', + ], + plugins: ['react-hot-loader/babel'], + ignore: ['**/*.test.jsx', '**/*.test.js', '__snapshots__', '__tests__'], + }, + }, +}; diff --git a/plugins/ohifv3/extension-monai-label/package.json b/plugins/ohifv3/extension-monai-label/package.json new file mode 100644 index 000000000..6b82ff88c --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/package.json @@ -0,0 +1,88 @@ +{ + "name": "@ohif/extension-monai-label", + "version": "0.0.1", + "description": "OHIFv3 extension for MONAI Label", + "author": "OHIF,NVIDIA,KCL", + "license": "MIT", + "main": "dist/umd/extension-monai-label/index.umd.js", + "files": [ + "dist/**", + "public/**", + "README.md" + ], + "repository": "OHIF/Viewers", + "keywords": [ + "ohif-extension" + ], + "module": "src/index.tsx", + "publishConfig": { + "access": "public" + }, + "engines": { + "node": ">=14", + "npm": ">=6", + "yarn": ">=1.18.0" + }, + "scripts": { + "dev": "cross-env NODE_ENV=development webpack --config .webpack/webpack.dev.js --watch --output-pathinfo", + "dev:my-extension": "yarn run dev", + "build": "cross-env NODE_ENV=production webpack --config .webpack/webpack.prod.js", + "build:package": "yarn run build", + "start": "yarn run dev" + }, + "peerDependencies": { + "@ohif/core": "^3.0.0", + "@ohif/extension-default": "^3.0.0", + "@ohif/extension-cornerstone": "^3.0.0", + "@ohif/i18n": "^1.0.0", + "prop-types": "^15.6.2", + "react": "^17.0.2", + "react-dom": "^17.0.2", + "react-i18next": "^12.2.2", + "react-router": "^6.8.1", + "react-router-dom": "^6.8.1", + "webpack": "^5.50.0", + "webpack-merge": "^5.7.3" + }, + "dependencies": { + "@babel/runtime": "^7.20.13", + "md5.js": "^1.3.5", + "axios": "^0.21.1", + "arraybuffer-concat": "^0.0.1", + "ndarray": "^1.0.19", + "nrrd-js": "^0.2.1", + "pako": "^2.0.3", + "itk": "^14.1.1", + "react-color": "^2.19.3", + "bootstrap": "^5.0.2", + "react-select": "^4.3.1", + "chroma-js": "^2.1.2" + }, + "devDependencies": { + "@babel/core": "^7.21.4", + "@babel/plugin-proposal-class-properties": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.17.3", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.16.7", + "@babel/plugin-transform-regenerator": "^7.16.7", + "@babel/plugin-transform-runtime": "^7.17.0", + "@babel/plugin-transform-typescript": "^7.13.0", + "@babel/preset-env": "^7.16.11", + "@babel/preset-react": "^7.16.7", + "@babel/preset-typescript": "^7.13.0", + "babel-eslint": "9.x", + "babel-loader": "^8.2.4", + "babel-plugin-inline-react-svg": "^2.0.2", + "babel-plugin-module-resolver": "^5.0.0", + "clean-webpack-plugin": "^4.0.0", + "copy-webpack-plugin": "^10.2.0", + "cross-env": "^7.0.3", + "dotenv": "^14.1.0", + "eslint": "^5.0.1", + "eslint-loader": "^2.0.0", + "webpack": "^5.50.0", + "webpack-merge": "^5.7.3", + "webpack-cli": "^4.7.2" + } +} diff --git a/plugins/ohifv3/extension-monai-label/src/components/ModelSelector.styl b/plugins/ohifv3/extension-monai-label/src/components/ModelSelector.styl new file mode 100644 index 000000000..ec1dbeccc --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/components/ModelSelector.styl @@ -0,0 +1,33 @@ + +.modelSelector + .table + border-collapse: collapse; + border: 0 solid; + width: 100%; + + .table tr td + border: 0 solid; + + .selectBox + width: 100% + + .actionButton + border: 2px solid black + border-radius: 15px + background-color: lightblue + color: var(--ui-gray-dark) + line-height: 25px + padding: 0 15px + outline: none + cursor: pointer + + &:hover, &:active + background-color: var(--ui-sky-blue) + + &:disabled + background-color: var(--ui-sky-blue) + + svg + margin-right: 4px + position: relative + top: 2px diff --git a/plugins/ohifv3/extension-monai-label/src/components/ModelSelector.tsx b/plugins/ohifv3/extension-monai-label/src/components/ModelSelector.tsx new file mode 100644 index 000000000..e9c582a6a --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/components/ModelSelector.tsx @@ -0,0 +1,116 @@ + +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; + +import './ModelSelector.styl'; + +export default class ModelSelector extends Component { + static propTypes = { + name: PropTypes.string, + title: PropTypes.string, + models: PropTypes.array, + currentModel: PropTypes.string, + usage: PropTypes.any, + onClick: PropTypes.func, + onSelectModel: PropTypes.func, + scribblesSelector: PropTypes.any, + }; + + constructor(props) { + super(props); + + const currentModel = props.currentModel + ? props.currentModel + : props.models.length > 0 + ? props.models[0] + : ''; + this.state = { + models: props.models, + currentModel: currentModel, + buttonDisabled: false, + }; + } + + static getDerivedStateFromProps(props, current_state) { + if (current_state.models !== props.models) { + return { + models: props.models, + currentModel: props.models.length > 0 ? props.models[0] : '', + }; + } + return null; + } + + onChangeModel = evt => { + this.setState({ currentModel: evt.target.value }); + if (this.props.onSelectModel) this.props.onSelectModel(evt.target.value); + }; + + currentModel = () => { + return this.props.currentModel + ? this.props.currentModel + : this.state.currentModel; + }; + + onClickBtn = async () => { + if (this.state.buttonDisabled) { + return; + } + + let model = this.state.currentModel; + if (!model) { + console.error('This should never happen!'); + model = this.props.models.length > 0 ? this.props.models[0] : ''; + } + + this.setState({ buttonDisabled: true }); + await this.props.onClick(model); + this.setState({ buttonDisabled: false }); + }; + + render() { + const currentModel = this.currentModel(); + return ( +
+ + + + + + + + + + + {this.props.scribblesSelector} + +
Models:
+ +   + +
+ {this.props.usage} +
+ ); + } +} diff --git a/plugins/ohifv3/extension-monai-label/src/components/MonaiLabelPanel.styl b/plugins/ohifv3/extension-monai-label/src/components/MonaiLabelPanel.styl new file mode 100644 index 000000000..5069ab8dc --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/components/MonaiLabelPanel.styl @@ -0,0 +1,146 @@ + +@import url("https://www.w3schools.com/w3css/4/w3.css") + +.monaiLabelPanel + background-color: lightslategray + height: 100% + width: 100% + display: flex + flex-direction: column + color: var(--text-primary-color) + padding: 2px + overflow-y: scroll; /* Make the panel scrollable vertically */ + + .subtitle + font-size: 14px + text-decoration: underline + font-weight 500 + color black + margin 1px + text-align center + + /* Accordion styles */ + .tabs { + border-radius: 4px; + overflow: auto; + box-shadow: 0 4px 4px -2px rgba(0, 0, 0, 0.5); + background: black + margin: 1rem 0; + } + + .tab { + width: 100%; + color: white; + overflow: hidden; + } + .tab-switch { + position: absolute; + opacity: 0; + z-index: -1; + } + .tab-label { + display: flex; + justify-content: space-between; + padding: 0.4em; + background: #16202b; + border-right: 1px dotted #3c5d80; + color: #fff; + font-size: 12px; + font-weight: normal; + cursor: pointer; + /* Icon */ + } + .tab-label:hover { + background: #3e5975; + } + .tab-label::after { + content: "❯"; + width: 1em; + height: 1em; + text-align: center; + transition: all 0.35s; + } + .tab-content { + max-height: 0; + padding: 0 1em; + background: gray; + transition: all 0.35s; + width: 100%; + font-size: small + color: black + } + .tab-close { + display: flex; + justify-content: flex-end; + padding: 1em; + font-size: 0.75em; + background: #2c3e50; + cursor: pointer; + } + .tab-close:hover { + background: #1a252f; + } + + input:checked + .tab-label { + background: black; + } + input:checked + .tab-label::after { + transform: rotate(90deg); + } + input:checked ~ .tab-content { + max-height: 100vh; + padding: 1em; + } + + .separator + border: 0.01em solid #44626f + width: 100% + margin-top: 3px + margin-bottom: 3px + + .actionInput + width: 100% + padding: 1px + border: 1px solid black + color: black + + // Theming has changed: https://docs.ohif.org/platform/themeing/ + .actionButton + // https://github.com/OHIF/Viewers/blob/58d38495f097afc6333937b6fbaf60ae473957c0/platform/docs/versioned_docs/version-2.0-deprecated/viewer/themeing.md?plain=1#L5 + border: 1px solid black + border-radius: 15px + background-color: lightblue + color: black + line-height: 25px + padding: 10px + outline: none + cursor: pointer + + &:hover, &:active + background-color: var(--ui-sky-blue) + + &:disabled + background-color: var(--ui-sky-blue) + + svg + margin-right: 4px + position: relative + top: 2px + +.scrollbar { + overflow-y: scroll; +} + +#style-3::-webkit-scrollbar-track { + -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3); + background-color: #000000; +} + +#style-3::-webkit-scrollbar { + width: 6px; + background-color: #000000; +} + +#style-3::-webkit-scrollbar-thumb { + background-color: #f5f5f5; +} diff --git a/plugins/ohifv3/extension-monai-label/src/components/MonaiLabelPanel.tsx b/plugins/ohifv3/extension-monai-label/src/components/MonaiLabelPanel.tsx new file mode 100644 index 000000000..19a407f13 --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/components/MonaiLabelPanel.tsx @@ -0,0 +1,403 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import { cache, triggerEvent, eventTarget } from '@cornerstonejs/core'; +import { Enums } from '@cornerstonejs/tools'; +import './MonaiLabelPanel.styl'; +import SettingsTable from './SettingsTable'; +import AutoSegmentation from './actions/AutoSegmentation'; +import SmartEdit from './actions/SmartEdit'; +import OptionTable from './actions/OptionTable'; +import ActiveLearning from './actions/ActiveLearning'; +import MonaiLabelClient from '../services/MonaiLabelClient'; +import SegmentationReader from '../utils/SegmentationReader'; +import MonaiSegmentation from './MonaiSegmentation'; +import SegmentationToolbox from './SegmentationToolbox'; + +export default class MonaiLabelPanel extends Component { + static propTypes = { + commandsManager: PropTypes.any, + servicesManager: PropTypes.any, + extensionManager: PropTypes.any, + }; + + notification: any; + settings: any; + state: { info: {}; action: {} }; + actions: { + options: any; + activelearning: any; + segmentation: any; + smartedit: any; + }; + props: any; + SeriesInstanceUID: any; + StudyInstanceUID: any; + + constructor(props) { + super(props); + + const { uiNotificationService, viewportGridService, displaySetService } = + props.servicesManager.services; + + this.notification = uiNotificationService; + this.settings = React.createRef(); + + this.actions = { + options: React.createRef(), + activeLearning: React.createRef(), + segmentation: React.createRef(), + smartedit: React.createRef(), + }; + + this.state = { + info: {}, + action: {}, + segmentations: [], + }; + + // Todo: fix this hack + setTimeout(() => { + const { viewports, activeViewportId } = viewportGridService.getState(); + const viewport = viewports.get(activeViewportId); + const displaySet = displaySetService.getDisplaySetByUID( + viewport.displaySetInstanceUIDs[0] + ); + + this.SeriesInstanceUID = displaySet.SeriesInstanceUID; + this.StudyInstanceUID = displaySet.StudyInstanceUID; + this.FrameOfReferenceUID = displaySet.instances[0].FrameOfReferenceUID; + this.displaySetInstanceUID = displaySet.displaySetInstanceUID; + }, 1000); + } + + async componentDidMount() { + const { segmentationService } = this.props.servicesManager.services; + const added = segmentationService.EVENTS.SEGMENTATION_ADDED; + const updated = segmentationService.EVENTS.SEGMENTATION_UPDATED; + const removed = segmentationService.EVENTS.SEGMENTATION_REMOVED; + const subscriptions = []; + + [added, updated, removed].forEach((evt) => { + const { unsubscribe } = segmentationService.subscribe(evt, () => { + const segmentations = segmentationService.getSegmentations(); + + if (!segmentations?.length) { + return; + } + + this.setState({ segmentations }); + }); + subscriptions.push(unsubscribe); + }); + + this.unsubscribe = () => { + subscriptions.forEach((unsubscribe) => unsubscribe()); + }; + } + + // componentDidUnmount? Doesn't exist this method anymore in V3? + async componentWillUnmount() { + this.unsubscribe(); + } + + client = () => { + const settings = + this.settings && this.settings.current && this.settings.current.state + ? this.settings.current.state + : null; + return new MonaiLabelClient( + settings ? settings.url : 'http://127.0.0.1:8000' + ); + }; + + onInfo = async () => { + this.notification.show({ + title: 'MONAI Label', + message: 'Connecting to MONAI Label', + type: 'info', + duration: 3000, + }); + + const response = await this.client().info(); + + // remove the background + const labels = response.data.labels.splice(1) + + const segmentations = [ + { + id: '1', + label: 'Segmentations', + segments: labels.map((label, index) => ({ + segmentIndex: index + 1, + label + })), + isActive: true, + activeSegmentIndex: 1, + }, + ]; + + this.props.commandsManager.runCommand('loadSegmentationsForViewport', { + segmentations + }); + + if (response.status !== 200) { + this.notification.show({ + title: 'MONAI Label', + message: 'Failed to Connect to MONAI Label Server', + type: 'error', + duration: 5000, + }); + } else { + this.notification.show({ + title: 'MONAI Label', + message: 'Connected to MONAI Label Server - Successful', + type: 'success', + duration: 2000, + }); + + this.setState({ info: response.data }); + } + }; + + onSelectActionTab = (name) => { + // Leave Event + for (const action of Object.keys(this.actions)) { + if (this.state.action === action) { + if (this.actions[action].current) + this.actions[action].current.onLeaveActionTab(); + } + } + + // Enter Event + for (const action of Object.keys(this.actions)) { + if (name === action) { + if (this.actions[action].current) + this.actions[action].current.onEnterActionTab(); + } + } + this.setState({ action: name }); + }; + + onOptionsConfig = () => { + return this.actions['options'].current && + this.actions['options'].current.state + ? this.actions['options'].current.state.config + : {}; + }; + + _update = async (response, labelNames) => { + // Process the obtained binary file from the MONAI Label server + /* const onInfoLabelNames = this.state.info.labels */ + const onInfoLabelNames = labelNames; + + console.info('These are the predicted labels'); + console.info(onInfoLabelNames); + + if (onInfoLabelNames.hasOwnProperty('background')){ +delete onInfoLabelNames.background; + } + + + const ret = SegmentationReader.parseNrrdData(response.data); + + if (!ret) { + throw new Error('Failed to parse NRRD data'); + } + + const { image: buffer, header } = ret; + const data = new Uint16Array(buffer); + + // reformat centroids + const centroidsIJK = new Map(); + for (const [key, value] of Object.entries(response.centroids)) { + const segmentIndex = parseInt(value[0], 10); + const image = value.slice(1).map((v) => parseFloat(v)); + centroidsIJK.set(segmentIndex, { image: image, world: [] }); + } + + const segmentations = [ + { + id: '1', + label: 'Segmentations', + segments: Object.keys(onInfoLabelNames).map((key) => ({ + segmentIndex: onInfoLabelNames[key], + label: key, + })), + isActive: true, + activeSegmentIndex: 1, + scalarData: data, + FrameOfReferenceUID: this.FrameOfReferenceUID, + centroidsIJK: centroidsIJK, + }, + ]; + + // Todo: rename volumeId + const volumeLoadObject = cache.getVolume('1'); + if (volumeLoadObject) { + const { scalarData } = volumeLoadObject; + scalarData.set(data); + triggerEvent(eventTarget, Enums.Events.SEGMENTATION_DATA_MODIFIED, { + segmentationId: '1', + }); + console.debug("updated the segmentation's scalar data"); + } else { + this.props.commandsManager.runCommand('hydrateSegmentationsForViewport', { + segmentations, + }); + } + }; + + _debug = async () => { + let nrrdFetch = await fetch('http://localhost:3000/pred2.nrrd'); + + const info = { + spleen: 1, + 'right kidney': 2, + 'left kidney': 3, + liver: 6, + stomach: 7, + aorta: 8, + 'inferior vena cava': 9, + }; + + const nrrd = await nrrdFetch.arrayBuffer(); + + this._update({ data: nrrd }, info); + }; + + parseResponse = (response) => { + const buffer = response.data; + const contentType = response.headers['content-type']; + const boundaryMatch = contentType.match(/boundary=([^;]+)/i); + const boundary = boundaryMatch ? boundaryMatch[1] : null; + + const text = new TextDecoder().decode(buffer); + const parts = text + .split(`--${boundary}`) + .filter((part) => part.trim() !== ''); + + // Find the JSON part and NRRD part + const jsonPart = parts.find((part) => + part.includes('Content-Type: application/json') + ); + const nrrdPart = parts.find((part) => + part.includes('Content-Type: application/octet-stream') + ); + + // Extract JSON data + const jsonStartIndex = jsonPart.indexOf('{'); + const jsonEndIndex = jsonPart.lastIndexOf('}'); + const jsonData = JSON.parse( + jsonPart.slice(jsonStartIndex, jsonEndIndex + 1) + ); + + // Extract NRRD data + const binaryData = nrrdPart.split('\r\n\r\n')[1]; + const binaryDataEnd = binaryData.lastIndexOf('\r\n'); + + const nrrdArrayBuffer = new Uint8Array( + binaryData + .slice(0, binaryDataEnd) + .split('') + .map((c) => c.charCodeAt(0)) + ).buffer; + + return { data: nrrdArrayBuffer, centroids: jsonData.centroids }; + }; + + updateView = async (response, labelNames) => { + const { data, centroids } = this.parseResponse(response); + this._update({ data, centroids }, labelNames); + }; + + render() { + return ( +
+
+ + + +
+ +

{this.state.info.name}

+ + {/* */} +
+ + + + + + +
+ + {this.state.segmentations?.map((segmentation) => ( + <> + + + + ))} +
+ ); + } +} diff --git a/plugins/ohifv3/extension-monai-label/src/components/MonaiSegmentation.tsx b/plugins/ohifv3/extension-monai-label/src/components/MonaiSegmentation.tsx new file mode 100644 index 000000000..d24d198d6 --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/components/MonaiSegmentation.tsx @@ -0,0 +1,316 @@ +import { createReportAsync } from '@ohif/extension-default'; +import React, { useEffect, useState, useCallback } from 'react'; +import PropTypes from 'prop-types'; +import { SegmentationGroupTable } from '@ohif/ui'; + +import callInputDialog from './callInputDialog'; +import callColorPickerDialog from './colorPickerDialog'; +import { useTranslation } from 'react-i18next'; + +export default function MonaiSegmentation({ + servicesManager, + commandsManager, + extensionManager, + configuration, +}) { + const { segmentationService, uiDialogService } = servicesManager.services; + + const { t } = useTranslation('PanelSegmentation'); + + const [selectedSegmentationId, setSelectedSegmentationId] = useState(null); + const [segmentationConfiguration, setSegmentationConfiguration] = useState( + segmentationService.getConfiguration() + ); + + const [segmentations, setSegmentations] = useState(() => + segmentationService.getSegmentations() + ); + + useEffect(() => { + // ~~ Subscription + const added = segmentationService.EVENTS.SEGMENTATION_ADDED; + const updated = segmentationService.EVENTS.SEGMENTATION_UPDATED; + const removed = segmentationService.EVENTS.SEGMENTATION_REMOVED; + const subscriptions = []; + + [added, updated, removed].forEach((evt) => { + const { unsubscribe } = segmentationService.subscribe(evt, () => { + const segmentations = segmentationService.getSegmentations(); + setSegmentations(segmentations); + setSegmentationConfiguration(segmentationService.getConfiguration()); + }); + subscriptions.push(unsubscribe); + }); + + return () => { + subscriptions.forEach((unsub) => { + unsub(); + }); + }; + }, []); + + const getToolGroupIds = (segmentationId) => { + const toolGroupIds = + segmentationService.getToolGroupIdsWithSegmentation(segmentationId); + + return toolGroupIds; + }; + + const onSegmentationAdd = async () => { + commandsManager.runCommand('addSegmentationForActiveViewport'); + }; + + const onSegmentationClick = (segmentationId: string) => { + segmentationService.setActiveSegmentationForToolGroup(segmentationId); + }; + + const onSegmentationDelete = (segmentationId: string) => { + segmentationService.remove(segmentationId); + }; + + const onSegmentAdd = (segmentationId) => { + segmentationService.addSegment(segmentationId); + }; + + const onSegmentClick = (segmentationId, segmentIndex) => { + segmentationService.setActiveSegment(segmentationId, segmentIndex); + + const toolGroupIds = getToolGroupIds(segmentationId); + + toolGroupIds.forEach((toolGroupId) => { + // const toolGroupId = + segmentationService.setActiveSegmentationForToolGroup( + segmentationId, + toolGroupId + ); + segmentationService.jumpToSegmentCenter( + segmentationId, + segmentIndex, + toolGroupId + ); + }); + }; + + const onSegmentEdit = (segmentationId, segmentIndex) => { + const segmentation = segmentationService.getSegmentation(segmentationId); + + const segment = segmentation.segments[segmentIndex]; + const { label } = segment; + + callInputDialog(uiDialogService, label, (label, actionId) => { + if (label === '') { + return; + } + + segmentationService.setSegmentLabel(segmentationId, segmentIndex, label); + }); + }; + + const onSegmentationEdit = (segmentationId) => { + const segmentation = segmentationService.getSegmentation(segmentationId); + const { label } = segmentation; + + callInputDialog(uiDialogService, label, (label, actionId) => { + if (label === '') { + return; + } + + segmentationService.addOrUpdateSegmentation( + { + id: segmentationId, + label, + }, + false, // suppress event + true // notYetUpdatedAtSource + ); + }); + }; + + const onSegmentColorClick = (segmentationId, segmentIndex) => { + const segmentation = segmentationService.getSegmentation(segmentationId); + + const segment = segmentation.segments[segmentIndex]; + const { color, opacity } = segment; + + const rgbaColor = { + r: color[0], + g: color[1], + b: color[2], + a: opacity / 255.0, + }; + + callColorPickerDialog( + uiDialogService, + rgbaColor, + (newRgbaColor, actionId) => { + if (actionId === 'cancel') { + return; + } + + segmentationService.setSegmentRGBAColor(segmentationId, segmentIndex, [ + newRgbaColor.r, + newRgbaColor.g, + newRgbaColor.b, + newRgbaColor.a * 255.0, + ]); + } + ); + }; + + const onSegmentDelete = (segmentationId, segmentIndex) => { + segmentationService.removeSegment(segmentationId, segmentIndex); + }; + + const onToggleSegmentVisibility = (segmentationId, segmentIndex) => { + const segmentation = segmentationService.getSegmentation(segmentationId); + const segmentInfo = segmentation.segments[segmentIndex]; + const isVisible = !segmentInfo.isVisible; + const toolGroupIds = getToolGroupIds(segmentationId); + + // Todo: right now we apply the visibility to all tool groups + toolGroupIds.forEach((toolGroupId) => { + segmentationService.setSegmentVisibility( + segmentationId, + segmentIndex, + isVisible, + toolGroupId + ); + }); + }; + + const onToggleSegmentLock = (segmentationId, segmentIndex) => { + segmentationService.toggleSegmentLocked(segmentationId, segmentIndex); + }; + + const onToggleSegmentationVisibility = (segmentationId) => { + segmentationService.toggleSegmentationVisibility(segmentationId); + }; + + const _setSegmentationConfiguration = useCallback( + (segmentationId, key, value) => { + segmentationService.setConfiguration({ + segmentationId, + [key]: value, + }); + }, + [segmentationService] + ); + + const onSegmentationDownload = (segmentationId) => { + commandsManager.runCommand('downloadSegmentation', { + segmentationId, + }); + }; + + const storeSegmentation = (segmentationId) => { + const datasources = extensionManager.getActiveDataSource(); + + const getReport = async () => { + return await commandsManager.runCommand('storeSegmentation', { + segmentationId, + dataSource: datasources[0], + }); + }; + + createReportAsync({ + servicesManager, + getReport, + reportType: 'Segmentation', + }); + }; + + return ( + <> +
+ + _setSegmentationConfiguration( + selectedSegmentationId, + 'renderOutline', + value + ) + } + setOutlineOpacityActive={(value) => + _setSegmentationConfiguration( + selectedSegmentationId, + 'outlineOpacity', + value + ) + } + setRenderFill={(value) => + _setSegmentationConfiguration( + selectedSegmentationId, + 'renderFill', + value + ) + } + setRenderInactiveSegmentations={(value) => + _setSegmentationConfiguration( + selectedSegmentationId, + 'renderInactiveSegmentations', + value + ) + } + setOutlineWidthActive={(value) => + _setSegmentationConfiguration( + selectedSegmentationId, + 'outlineWidthActive', + value + ) + } + setFillAlpha={(value) => + _setSegmentationConfiguration( + selectedSegmentationId, + 'fillAlpha', + value + ) + } + setFillAlphaInactive={(value) => + _setSegmentationConfiguration( + selectedSegmentationId, + 'fillAlphaInactive', + value + ) + } + /> +
+ + ); +} + +MonaiSegmentation.propTypes = { + commandsManager: PropTypes.shape({ + runCommand: PropTypes.func.isRequired, + }), + servicesManager: PropTypes.shape({ + services: PropTypes.shape({ + segmentationService: PropTypes.shape({ + getSegmentation: PropTypes.func.isRequired, + getSegmentations: PropTypes.func.isRequired, + toggleSegmentationVisibility: PropTypes.func.isRequired, + subscribe: PropTypes.func.isRequired, + EVENTS: PropTypes.object.isRequired, + }).isRequired, + }).isRequired, + }).isRequired, +}; diff --git a/plugins/ohifv3/extension-monai-label/src/components/SegmentationToolbox.tsx b/plugins/ohifv3/extension-monai-label/src/components/SegmentationToolbox.tsx new file mode 100644 index 000000000..4577a56b7 --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/components/SegmentationToolbox.tsx @@ -0,0 +1,368 @@ +import React, { useCallback, useEffect, useState, useReducer } from 'react'; +import { AdvancedToolbox, InputDoubleRange, useViewportGrid } from '@ohif/ui'; +import { Types } from '@ohif/extension-cornerstone'; +import { utilities } from '@cornerstonejs/tools'; + +const { segmentation: segmentationUtils } = utilities; + +const ACTIONS = { + SET_BRUSH_SIZE: 'SET_BRUSH_SIZE', + SET_TOOL_CONFIG: 'SET_TOOL_CONFIG', + SET_ACTIVE_TOOL: 'SET_ACTIVE_TOOL', +}; + +const initialState = { + Brush: { + brushSize: 15, + mode: 'CircularBrush', // Can be 'CircularBrush' or 'SphereBrush' + }, + Eraser: { + brushSize: 15, + mode: 'CircularEraser', // Can be 'CircularEraser' or 'SphereEraser' + }, + Scissors: { + brushSize: 15, + mode: 'CircleScissor', // E.g., 'CircleScissor', 'RectangleScissor', or 'SphereScissor' + }, + ThresholdBrush: { + brushSize: 15, + thresholdRange: [-500, 500], + }, + activeTool: null, +}; + +function toolboxReducer(state, action) { + switch (action.type) { + case ACTIONS.SET_TOOL_CONFIG: + const { tool, config } = action.payload; + return { + ...state, + [tool]: { + ...state[tool], + ...config, + }, + }; + case ACTIONS.SET_ACTIVE_TOOL: + return { ...state, activeTool: action.payload }; + default: + return state; + } +} + +function SegmentationToolbox({ servicesManager, extensionManager }) { + const { toolbarService, segmentationService, toolGroupService } = + servicesManager.services as Types.CornerstoneServices; + + const [viewportGrid] = useViewportGrid(); + const { viewports, activeViewportId } = viewportGrid; + + const [toolsEnabled, setToolsEnabled] = useState(false); + const [state, dispatch] = useReducer(toolboxReducer, initialState); + + const updateActiveTool = useCallback(() => { + if (!viewports?.size || activeViewportId === undefined) { + return; + } + + const viewport = viewports.get(activeViewportId); + + dispatch({ + type: ACTIONS.SET_ACTIVE_TOOL, + payload: toolGroupService.getActiveToolForViewport(viewport.viewportId), + }); + }, [activeViewportId, viewports, toolGroupService, dispatch]); + + /** + * sets the tools enabled IF there are segmentations + */ + useEffect(() => { + const events = [ + segmentationService.EVENTS.SEGMENTATION_ADDED, + segmentationService.EVENTS.SEGMENTATION_UPDATED, + ]; + + const unsubscriptions = []; + + events.forEach(event => { + const { unsubscribe } = segmentationService.subscribe(event, () => { + const segmentations = segmentationService.getSegmentations(); + + const activeSegmentation = segmentations?.find(seg => seg.isActive); + + setToolsEnabled(activeSegmentation?.segmentCount > 0); + }); + + unsubscriptions.push(unsubscribe); + }); + + return () => { + unsubscriptions.forEach(unsubscribe => unsubscribe()); + }; + }, [activeViewportId, viewports, segmentationService]); + + /** + * Update the active tool when the toolbar state changes + */ + useEffect(() => { + const { unsubscribe } = toolbarService.subscribe( + toolbarService.EVENTS.TOOL_BAR_STATE_MODIFIED, + () => { + updateActiveTool(); + } + ); + + return () => { + unsubscribe(); + }; + }, [toolbarService, updateActiveTool]); + + const setToolActive = useCallback( + toolName => { + toolbarService.recordInteraction({ + groupId: 'SegmentationTools', + itemId: 'Brush', + interactionType: 'tool', + commands: [ + { + commandName: 'setToolActive', + commandOptions: { + toolName, + }, + }, + ], + }); + + dispatch({ type: ACTIONS.SET_ACTIVE_TOOL, payload: toolName }); + }, + [toolbarService, dispatch] + ); + + const updateBrushSize = useCallback( + (toolName, brushSize) => { + toolGroupService.getToolGroupIds()?.forEach(toolGroupId => { + segmentationUtils.setBrushSizeForToolGroup(toolGroupId, brushSize, toolName); + }); + }, + [toolGroupService] + ); + + const onBrushSizeChange = useCallback( + (valueAsStringOrNumber, toolCategory) => { + const value = Number(valueAsStringOrNumber); + + _getToolNamesFromCategory(toolCategory).forEach(toolName => { + updateBrushSize(toolName, value); + }); + + dispatch({ + type: ACTIONS.SET_TOOL_CONFIG, + payload: { + tool: toolCategory, + config: { brushSize: value }, + }, + }); + }, + [toolGroupService, dispatch] + ); + + const handleRangeChange = useCallback( + newRange => { + if ( + newRange[0] === state.ThresholdBrush.thresholdRange[0] && + newRange[1] === state.ThresholdBrush.thresholdRange[1] + ) { + return; + } + + const toolNames = _getToolNamesFromCategory('ThresholdBrush'); + + toolNames.forEach(toolName => { + toolGroupService.getToolGroupIds()?.forEach(toolGroupId => { + const toolGroup = toolGroupService.getToolGroup(toolGroupId); + toolGroup.setToolConfiguration(toolName, { + strategySpecificConfiguration: { + THRESHOLD_INSIDE_CIRCLE: { + threshold: newRange, + }, + }, + }); + }); + }); + + dispatch({ + type: ACTIONS.SET_TOOL_CONFIG, + payload: { + tool: 'ThresholdBrush', + config: { thresholdRange: newRange }, + }, + }); + }, + [toolGroupService, dispatch, state.ThresholdBrush.thresholdRange] + ); + + return ( + setToolActive('CircularBrush'), + options: [ + { + name: 'Radius (mm)', + id: 'brush-radius', + type: 'range', + min: 0.01, + max: 100, + value: state.Brush.brushSize, + step: 0.5, + onChange: value => onBrushSizeChange(value, 'Brush'), + }, + { + name: 'Mode', + type: 'radio', + id: 'brush-mode', + value: state.Brush.mode, + values: [ + { value: 'CircularBrush', label: 'Circle' }, + { value: 'SphereBrush', label: 'Sphere' }, + ], + onChange: value => setToolActive(value), + }, + ], + }, + { + name: 'Eraser', + icon: 'icon-tool-eraser', + disabled: !toolsEnabled, + active: state.activeTool === 'CircularEraser' || state.activeTool === 'SphereEraser', + onClick: () => setToolActive('CircularEraser'), + options: [ + { + name: 'Radius (mm)', + type: 'range', + id: 'eraser-radius', + min: 0.01, + max: 100, + value: state.Eraser.brushSize, + step: 0.5, + onChange: value => onBrushSizeChange(value, 'Eraser'), + }, + { + name: 'Mode', + type: 'radio', + id: 'eraser-mode', + value: state.Eraser.mode, + values: [ + { value: 'CircularEraser', label: 'Circle' }, + { value: 'SphereEraser', label: 'Sphere' }, + ], + onChange: value => setToolActive(value), + }, + ], + }, + { + name: 'Scissor', + icon: 'icon-tool-scissor', + disabled: !toolsEnabled, + active: + state.activeTool === 'CircleScissor' || + state.activeTool === 'RectangleScissor' || + state.activeTool === 'SphereScissor', + onClick: () => setToolActive('CircleScissor'), + options: [ + { + name: 'Mode', + type: 'radio', + value: state.Scissors.mode, + id: 'scissor-mode', + values: [ + { value: 'CircleScissor', label: 'Circle' }, + { value: 'RectangleScissor', label: 'Rectangle' }, + { value: 'SphereScissor', label: 'Sphere' }, + ], + onChange: value => setToolActive(value), + }, + ], + }, + { + name: 'Threshold Tool', + icon: 'icon-tool-threshold', + disabled: !toolsEnabled, + active: + state.activeTool === 'ThresholdCircularBrush' || + state.activeTool === 'ThresholdSphereBrush', + onClick: () => setToolActive('ThresholdCircularBrush'), + options: [ + { + name: 'Radius (mm)', + id: 'threshold-radius', + type: 'range', + min: 0.01, + max: 100, + value: state.ThresholdBrush.brushSize, + step: 0.5, + onChange: value => onBrushSizeChange(value, 'ThresholdBrush'), + }, + { + name: 'Mode', + type: 'radio', + id: 'threshold-mode', + value: state.activeTool, + values: [ + { value: 'ThresholdCircularBrush', label: 'Circle' }, + { value: 'ThresholdSphereBrush', label: 'Sphere' }, + ], + onChange: value => setToolActive(value), + }, + { + type: 'custom', + children: () => { + return ( +
+
+
Threshold
+ +
+ ); + }, + }, + ], + }, + ]} + /> + ); +} + +function _getToolNamesFromCategory(category) { + let toolNames = []; + switch (category) { + case 'Brush': + toolNames = ['CircularBrush', 'SphereBrush']; + break; + case 'Eraser': + toolNames = ['CircularEraser', 'SphereEraser']; + break; + case 'ThresholdBrush': + toolNames = ['ThresholdCircularBrush', 'ThresholdSphereBrush']; + break; + default: + break; + } + + return toolNames; +} + +export default SegmentationToolbox; diff --git a/plugins/ohifv3/extension-monai-label/src/components/SettingsTable.styl b/plugins/ohifv3/extension-monai-label/src/components/SettingsTable.styl new file mode 100644 index 000000000..9416781ea --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/components/SettingsTable.styl @@ -0,0 +1,53 @@ + +.settingsTable + border-collapse: collapse; + border: 0 solid; + width: 100%; + font-size: small + +.settingsTable tr td + border: 0 solid; + +.settings_active, +.settings_header { + background-color: black; + color: white; + cursor: pointer; + padding: 5px; + width: 100%; + border: none; + text-align: left; + outline: none; +} + +.settings_active { + background-color: #403f3d; +} + +.settings_header:hover { + background-color: #2b2a28; +} + +.settings_header:after { + content: '\002B'; + color: white; + font-weight: bold; + float: right; + margin-left: 5px; +} + +.settings_active:after { + content: '\2212'; + color: white; + font-weight: bold; + float: right; + margin-left: 5px; +} + +.settings_content { + cursor: pointer; + color: #fff; + background-color: #2b2a28; + padding: 10px + font-size: smaller +} diff --git a/plugins/ohifv3/extension-monai-label/src/components/SettingsTable.tsx b/plugins/ohifv3/extension-monai-label/src/components/SettingsTable.tsx new file mode 100644 index 000000000..967c0baf9 --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/components/SettingsTable.tsx @@ -0,0 +1,90 @@ +import React, { Component } from 'react'; + +import './MonaiLabelPanel.styl'; +import { Icon } from '@ohif/ui'; +import { CookieUtils } from '../utils/GenericUtils'; + +export default class SettingsTable extends Component { + constructor(props) { + super(props); + + const onInfo = props.onInfo + this.onInfo = onInfo + + this.state = this.getSettings(); + } + + getSettings = () => { + const url = CookieUtils.getCookieString( + 'MONAILABEL_SERVER_URL', + 'http://' + window.location.host.split(':')[0] + ':8000/' + ); + const overlap_segments = CookieUtils.getCookieBool( + 'MONAILABEL_OVERLAP_SEGMENTS', + true + ); + const export_format = CookieUtils.getCookieString( + 'MONAILABEL_EXPORT_FORMAT', + 'NRRD' + ); + + return { + url: url, + overlap_segments: overlap_segments, + export_format: export_format, + }; + }; + + onBlurSeverURL = evt => { + let url = evt.target.value; + this.setState({ url: url }); + CookieUtils.setCookie('MONAILABEL_SERVER_URL', url); + }; + + render() { + return ( + + + + + + + + + + + + + +
Server: + +   + +
  + + Info + +   |   + + Logs + +
+ ); + } +} diff --git a/plugins/ohifv3/extension-monai-label/src/components/Toolbox/ThresholdSettingsPreset.tsx b/plugins/ohifv3/extension-monai-label/src/components/Toolbox/ThresholdSettingsPreset.tsx new file mode 100644 index 000000000..f708233c3 --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/components/Toolbox/ThresholdSettingsPreset.tsx @@ -0,0 +1,88 @@ +import React, { useState } from 'react'; +import { InputDoubleRange, Select } from '@ohif/ui'; + +const defaultOptions = [ + { + value: 'Soft tissue', + label: 'Soft tissue', + range: [-160, 240] as [number, number], + }, + { + value: 'Lung', + label: 'Lung', + range: [-1350, 150] as [number, number], + }, + { + value: 'Liver', + label: 'Liver', + range: [15, 165] as [number, number], + }, + { + value: 'Bone', + label: 'Bone', + range: [-770, 1730] as [number, number], + }, + { + value: 'Brain', + label: 'Brain', + range: [0, 80] as [number, number], + }, +]; + +function ThresholdSettings({ onRangeChange }) { + const [options, setOptions] = useState(defaultOptions); + const [selectedPreset, setSelectedPreset] = useState(defaultOptions[0].value); + + const handleRangeChange = newRange => { + const selectedOption = options.find(o => o.value === selectedPreset); + + if (newRange[0] === selectedOption.range[0] && newRange[1] === selectedOption.range[1]) { + return; + } + + onRangeChange(newRange); + + const updatedOptions = options.map(o => { + if (o.value === selectedPreset) { + return { + ...o, + range: newRange, + }; + } + return o; + }); + + setOptions(updatedOptions); + }; + + const selectedPresetRange = options.find(ds => ds.value === selectedPreset).range; + + return ( +
+
+
Threshold
+
+ + +
+ + + + + + + + + +
+ + + +   + +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
Strategy: + +
 
Annotated: +
+
+ {activelearning} +
+
+
Training: +
+
+ {training} +
+
+
Train Acc: +
+
+ {accuracy} +
+
+
+
+
+ ); + } +} diff --git a/plugins/ohifv3/extension-monai-label/src/components/actions/AutoSegmentation.styl b/plugins/ohifv3/extension-monai-label/src/components/actions/AutoSegmentation.styl new file mode 100644 index 000000000..b0bf58765 --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/components/actions/AutoSegmentation.styl @@ -0,0 +1,14 @@ +/* +Copyright (c) MONAI Consortium +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +@import "BaseTab.styl" diff --git a/plugins/ohifv3/extension-monai-label/src/components/actions/AutoSegmentation.tsx b/plugins/ohifv3/extension-monai-label/src/components/actions/AutoSegmentation.tsx new file mode 100644 index 000000000..100777113 --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/components/actions/AutoSegmentation.tsx @@ -0,0 +1,111 @@ +import React from 'react'; +import './AutoSegmentation.styl'; +import ModelSelector from '../ModelSelector'; +import BaseTab from './BaseTab'; + +export default class AutoSegmentation extends BaseTab { + constructor(props) { + super(props); + + this.modelSelector = React.createRef(); + this.state = { + currentModel: null, + }; + } + + onSelectModel = model => { + this.setState({ currentModel: model }); + }; + + onSegmentation = async () => { + const nid = this.notification.show({ + title: 'MONAI Label', + message: 'Running Auto-Segmentation...', + type: 'info', + duration: 60000, + }); + + // TODO:: Fix Image ID... + const { info, viewConstants } = this.props; + const image = viewConstants.SeriesInstanceUID; + const model = this.modelSelector.current.currentModel(); + const config = this.props.onOptionsConfig(); + const params = + config && config.infer && config.infer[model] ? config.infer[model] : {}; + + const labels = info.models[model].labels; + const response = await this.props + .client() + .segmentation(model, image, params); + + // Bug:: Notification Service on show doesn't return id + if (!nid) { + window.snackbar.hideAll(); + } else { + this.notification.hide(nid); + } + + if (response.status !== 200) { + this.notification.show({ + title: 'MONAI Label', + message: 'Failed to Run Segmentation', + type: 'error', + duration: 5000, + }); + } else { + this.notification.show({ + title: 'MONAI Label', + message: 'Run Segmentation - Successful', + type: 'success', + duration: 2000, + }); + + await this.props.updateView(response, labels); + } + }; + + render() { + let models = []; + if (this.props.info && this.props.info.models) { + for (let [name, model] of Object.entries(this.props.info.models)) { + if (model.type === 'segmentation') { + models.push(name); + } + } + } + + return ( +
+ + +
+ + Fully automated segmentation without any user prompt. Just + select a model and click to run +

+ } + /> +
+
+ ); + } +} diff --git a/plugins/ohifv3/extension-monai-label/src/components/actions/BaseTab.styl b/plugins/ohifv3/extension-monai-label/src/components/actions/BaseTab.styl new file mode 100644 index 000000000..bbbd02694 --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/components/actions/BaseTab.styl @@ -0,0 +1,14 @@ +/* +Copyright (c) MONAI Consortium +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +@import "../ModelSelector.styl" diff --git a/plugins/ohifv3/extension-monai-label/src/components/actions/BaseTab.tsx b/plugins/ohifv3/extension-monai-label/src/components/actions/BaseTab.tsx new file mode 100644 index 000000000..f40f1276e --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/components/actions/BaseTab.tsx @@ -0,0 +1,39 @@ + +import { Component } from 'react'; +import PropTypes from 'prop-types'; + +import './BaseTab.styl'; +import { UIModalService, UINotificationService } from '@ohif/core'; + +export default class BaseTab extends Component { + static propTypes = { + tabIndex: PropTypes.number, + info: PropTypes.any, + segmentId: PropTypes.string, + viewConstants: PropTypes.any, + client: PropTypes.func, + updateView: PropTypes.func, + onSelectActionTab: PropTypes.func, + onOptionsConfig: PropTypes.func, + }; + + constructor(props) { + super(props); + this.notification = new UINotificationService(); + this.uiModelService = new UIModalService(); + this.tabId = 'tab-' + this.props.tabIndex; + } + + onSelectActionTab = evt => { + this.props.onSelectActionTab(evt.currentTarget.value); + }; + + onEnterActionTab = () => {}; + onLeaveActionTab = () => {}; + + onSegmentCreated = id => {}; + onSegmentUpdated = id => {}; + onSegmentDeleted = id => {}; + onSegmentSelected = id => {}; + onSelectModel = model => {}; +} diff --git a/plugins/ohifv3/extension-monai-label/src/components/actions/NextSampleForm.styl b/plugins/ohifv3/extension-monai-label/src/components/actions/NextSampleForm.styl new file mode 100644 index 000000000..0dce82fbc --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/components/actions/NextSampleForm.styl @@ -0,0 +1,54 @@ +/* +Copyright (c) MONAI Consortium +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +.nextSampleForm + width: 750px + + .actionButton + border: 1px solid var(--ui-border-color-active) + border-radius: 15px + background-color: var(--active-color) + color: var(--ui-gray-dark) + line-height: 25px + padding: 0 15px + outline: none + cursor: pointer + + &:hover, &:active + background-color: var(--ui-sky-blue) + + &:disabled + background-color: var(--ui-sky-blue) + + svg + margin-right: 4px + position: relative + top: 2px + + .optionsTable { + font-family: arial, sans-serif; + border-collapse: collapse; + width: 100%; + font-size: smaller; + } + + .optionsTable th { + border: 1px solid #dddddd; + text-align: left; + background-color: lightslategray; + } + + .optionsTable td { + border: 1px solid #dddddd; + text-align: left; + } diff --git a/plugins/ohifv3/extension-monai-label/src/components/actions/NextSampleForm.tsx b/plugins/ohifv3/extension-monai-label/src/components/actions/NextSampleForm.tsx new file mode 100644 index 000000000..3112fec5f --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/components/actions/NextSampleForm.tsx @@ -0,0 +1,95 @@ +/* +Copyright (c) MONAI Consortium +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import React, { Component } from 'react'; + +import './NextSampleForm.styl'; +import PropTypes from 'prop-types'; + +export default class NextSampleForm extends Component { + static propTypes = { + info: PropTypes.any, + }; + + constructor(props) { + super(props); + } + + onSubmit = () => { + // TODO:: OHIF Doesn't support loading exact series in URI + let path = window.location.href.split('='); + path[path.length - 1] = this.props.info.StudyInstanceUID; + + const pathname = path.join('='); + console.info(pathname); + + let msg = + 'This action will reload current page. Are you sure to continue?'; + if (!window.confirm(msg)) return; + window.location.href = pathname; + }; + + render() { + const fields = { + id: 'Image ID (MONAILabel)', + Modality: 'Modality', + StudyDate: 'Study Date', + StudyTime: 'Study Time', + PatientID: 'Patient ID', + StudyInstanceUID: 'Study Instance UID', + SeriesInstanceUID: 'Series Instance UID', + }; + return ( +
+ + + + + + + + + {Object.keys(fields).map(field => ( + + + {field === 'SeriesInstanceUID' ? ( + + ) : ( + + )} + + ))} + +
FieldValue
{fields[field]} + + {this.props.info[field]} + + {this.props.info[field]}
+
+
+ +
+
+ ); + } +} diff --git a/plugins/ohifv3/extension-monai-label/src/components/actions/OptionTable.styl b/plugins/ohifv3/extension-monai-label/src/components/actions/OptionTable.styl new file mode 100644 index 000000000..ed32a4c5a --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/components/actions/OptionTable.styl @@ -0,0 +1,35 @@ +/* +Copyright (c) MONAI Consortium +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +@import "BaseTab.styl" + +.optionsTable { + font-family: arial, sans-serif; + border-collapse: collapse; + width: 100%; + font-size: smaller; +} + +.optionsTable th { + border: 1px solid #070303; + text-align: left; + background-color: lightslategray; +} + +.optionsTable td { + border: 1px solid #070202; + text-align: left; +} + +.optionsInput + width: 100% diff --git a/plugins/ohifv3/extension-monai-label/src/components/actions/OptionTable.tsx b/plugins/ohifv3/extension-monai-label/src/components/actions/OptionTable.tsx new file mode 100644 index 000000000..8e41765d7 --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/components/actions/OptionTable.tsx @@ -0,0 +1,218 @@ +/* +Copyright (c) MONAI Consortium +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import React from 'react'; + +import './OptionTable.styl'; +import BaseTab from './BaseTab'; + +export default class OptionTable extends BaseTab { + constructor(props) { + super(props); + + this.state = { + section: '', + name: '', + config: null, + }; + } + + onChangeSection = evt => { + this.state.section = evt.target.value; + this.setState({ section: evt.target.value }); + }; + + onChangeName = evt => { + this.state.name = evt.target.value; + this.setState({ name: evt.target.value }); + }; + + onChangeConfig = (s, n, k, evt) => { + console.debug(s + ' => ' + n + ' => ' + k); + + const c = this.state.config; + if (typeof c[s][n][k] === 'boolean') { + c[s][n][k] = !!evt.target.checked; + } else { + if (typeof c[s][n][k] === 'number') + c[s][n][k] = Number.isInteger(c[s][n][k]) + ? parseInt(evt.target.value) + : parseFloat(evt.target.value); + else c[s][n][k] = evt.target.value; + } + this.setState({ config: c }); + }; + + render() { + let config = this.state.config ? this.state.config : {}; + if (!Object.keys(config).length) { + const info = this.props.info; + const mapping = { + infer: 'models', + train: 'trainers', + activelearning: 'strategies', + scoring: 'scoring', + }; + for (const [m, n] of Object.entries(mapping)) { + for (const [k, v] of Object.entries(info && info[n] ? info[n] : {})) { + if (v && v.config && Object.keys(v.config).length) { + if (!config[m]) config[m] = {}; + config[m][k] = v.config; + } + } + } + + this.state.config = config; + } + + const section = + this.state.section.length && config[this.state.section] + ? this.state.section + : Object.keys(config).length + ? Object.keys(config)[0] + : ''; + this.state.section = section; + const section_map = config[section] ? config[section] : {}; + + const name = + this.state.name.length && section_map[this.state.name] + ? this.state.name + : Object.keys(section_map).length + ? Object.keys(section_map)[0] + : ''; + this.state.name = name; + const name_map = section_map[name] ? section_map[name] : {}; + + //console.log('Section: ' + section + '; Name: ' + name); + //console.log(name_map); + + return ( +
+ + +
+ + + + + + + + + + + +
Section: + +
Name: + +
+ + + + + + + + + + {Object.entries(name_map).map(([k, v]) => ( + + + + + ))} + +
KeyValue
{k} + {v !== null && typeof v === 'boolean' ? ( + + this.onChangeConfig( + this.state.section, + this.state.name, + k, + e + ) + } + /> + ) : v !== null && typeof v === 'object' ? ( + + ) : ( + + this.onChangeConfig( + this.state.section, + this.state.name, + k, + e + ) + } + /> + )} +
+
+
+ ); + } +} diff --git a/plugins/ohifv3/extension-monai-label/src/components/actions/SmartEdit.styl b/plugins/ohifv3/extension-monai-label/src/components/actions/SmartEdit.styl new file mode 100644 index 000000000..b0bf58765 --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/components/actions/SmartEdit.styl @@ -0,0 +1,14 @@ +/* +Copyright (c) MONAI Consortium +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +@import "BaseTab.styl" diff --git a/plugins/ohifv3/extension-monai-label/src/components/actions/SmartEdit.tsx b/plugins/ohifv3/extension-monai-label/src/components/actions/SmartEdit.tsx new file mode 100644 index 000000000..d71ae4156 --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/components/actions/SmartEdit.tsx @@ -0,0 +1,326 @@ +/* +Copyright (c) MONAI Consortium +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import React from 'react'; +import './SmartEdit.styl'; +import ModelSelector from '../ModelSelector'; +import BaseTab from './BaseTab'; +import * as cornerstoneTools from '@cornerstonejs/tools'; +import { vec3 } from 'gl-matrix'; +/* import { getFirstSegmentId } from '../../utils/SegmentationUtils'; */ + +export default class SmartEdit extends BaseTab { + constructor(props) { + super(props); + + this.modelSelector = React.createRef(); + + this.state = { + segmentId: null, + currentPoint: null, + deepgrowPoints: new Map(), + currentEvent: null, + currentModel: null, + }; + } + + componentDidMount() { + const { segmentationService, toolGroupService, viewportGridService } = + this.props.servicesManager.services; + + const added = segmentationService.EVENTS.SEGMENTATION_ADDED; + const updated = segmentationService.EVENTS.SEGMENTATION_UPDATED; + const removed = segmentationService.EVENTS.SEGMENTATION_REMOVED; + const subscriptions = []; + + [added, updated, removed].forEach((evt) => { + const { unsubscribe } = segmentationService.subscribe(evt, () => { + const segmentations = segmentationService.getSegmentations(); + + if (!segmentations?.length) { + return; + } + + // get the first segmentation Todo: fix this to be active + const segmentation = segmentations[0]; + const { segments, activeSegmentIndex } = segmentation; + + const selectedSegment = segments[activeSegmentIndex]; + + const color = selectedSegment.color; + + // get the active viewport toolGroup + const { viewports, activeViewportId } = + viewportGridService.getState(); + const viewport = viewports.get(activeViewportId); + const { viewportOptions } = viewport; + const toolGroupId = viewportOptions.toolGroupId; + + toolGroupService.setToolConfiguration(toolGroupId, 'ProbeMONAILabel', { + customColor: `rgb(${color[0]}, ${color[1]}, ${color[2]})`, + }); + }); + subscriptions.push(unsubscribe); + }); + + this.unsubscribe = () => { + subscriptions.forEach((unsubscribe) => unsubscribe()); + }; + } + + componentWillUnmount() { + this.unsubscribe(); + } + + onSelectModel = (model) => { + this.setState({ currentModel: model }); + }; + + onDeepgrow = async () => { + const { segmentationService, cornerstoneViewportService, viewportGridService } = + this.props.servicesManager.services; + const { info, viewConstants } = this.props; + const image = viewConstants.SeriesInstanceUID; + const model = this.modelSelector.current.currentModel(); + + const activeSegment = segmentationService.getActiveSegment(); + const segmentId = activeSegment.label; + + if (segmentId && !this.state.segmentId) { + this.onSegmentSelected(segmentId); + } + + const is3D = info.models[model].dimension === 3; + if (!segmentId) { + this.notification.show({ + title: 'MONAI Label', + message: 'Please create/select a label first', + type: 'warning', + }); + return; + } + + /* const points = this.state.deepgrowPoints.get(segmentId); */ + + // Getting the clicks in IJK format + + const { activeViewportId } = viewportGridService.getState(); + const viewPort = cornerstoneViewportService.getCornerstoneViewport(activeViewportId); + + const pts = cornerstoneTools.annotation.state.getAnnotations( + 'ProbeMONAILabel', + viewPort.element + ); + + const pointsWorld = pts.map((pt) => pt.data.handles.points[0]); + const { imageData } = viewPort.getImageData(); + const ijk = vec3.fromValues(0, 0, 0); + + // Rounding is not working + /* const pointsIJK = pointsWorld.map((world) => + Math.round(imageData.worldToIndex(world, ijk)) + ); */ + + const pointsIJK = pointsWorld.map((world) => + imageData.worldToIndex(world, ijk) + ); + + /* const roundPointsIJK = pointsIJK.map(ind => Math.round(ind)) */ + + this.state.deepgrowPoints.set(segmentId, pointsIJK); + + // when changing label, delete previous? or just keep track of all provided clicks per labels + const points = this.state.deepgrowPoints.get(segmentId); + + // Error as ctrlKey is part of the points? + + /* if (!points.length) { + return; + } + + const currentPoint = points[points.length - 1]; */ + + const config = this.props.onOptionsConfig(); + + const labels = info.models[model].labels; + + const params = + config && config.infer && config.infer[model] ? config.infer[model] : {}; + + // block the cursor while waiting for MONAI Label response? + + for (let l in labels){ + if (l === segmentId) { + console.log('This is the segmentId') + let p = [] + for (var i = 0; i < pointsIJK.length; i++) { + p.push(Array.from(pointsIJK[i])); + console.log(p[i]); + } + params[l] = p; + continue; + }; + console.log(l); + params[l] = []; + } + + const response = await this.props + .client() + .infer(model, image, params); + + + if (response.status !== 200) { + this.notification.show({ + title: 'MONAI Label', + message: 'Failed to Run Deepgrow', + type: 'error', + duration: 3000, + }); + } else { + await this.props.updateView( + response, + labels, + 'override', + is3D ? -1 : currentPoint.z + ); + } + + // Remove the segmentation and create a new one with a differen index + /* debugger; + this.props.servicesManager.services.segmentationService.remove('1') */ + }; + + getPointData = (evt) => { + const { x, y, imageId } = evt.detail; + const z = this.props.viewConstants.imageIdsToIndex.get(imageId); + + console.debug('X: ' + x + '; Y: ' + y + '; Z: ' + z); + return { x, y, z, data: evt.detail, imageId }; + }; + + onSegmentDeleted = (id) => { + this.clearPoints(id); + this.setState({ segmentId: null }); + }; + onSegmentSelected = (id) => { + this.initPoints(id); + this.setState({ segmentId: id }); + }; + + initPoints = (id) => { + console.log('Initializing points'); + }; + + clearPoints = (id) => { + cornerstoneTools.annotation.state + .getAnnotationManager() + .removeAllAnnotations(); + this.props.servicesManager.services.cornerstoneViewportService + .getRenderingEngine() + .render(); + console.log('Clearing all points'); + }; + + onSelectActionTab = (evt) => { + this.props.onSelectActionTab(evt.currentTarget.value); + }; + + onEnterActionTab = () => { + this.props.commandsManager.runCommand('setToolActive', { + toolName: 'ProbeMONAILabel', + }); + console.info('Here we activate the probe'); + + }; + + onLeaveActionTab = () => { + this.props.commandsManager.runCommand('setToolDisable', { + toolName: 'ProbeMONAILabel', + }); + console.info('Here we deactivate the probe'); + /* cornerstoneTools.setToolDisabled('DeepgrowProbe', {}); + this.removeEventListeners(); */ + }; + + addEventListeners = (eventName, handler) => { + this.removeEventListeners(); + + const { element } = this.props.viewConstants; + element.addEventListener(eventName, handler); + this.setState({ currentEvent: { name: eventName, handler: handler } }); + }; + + removeEventListeners = () => { + if (!this.state.currentEvent) { + return; + } + + const { element } = this.props.viewConstants; + const { currentEvent } = this.state; + + element.removeEventListener(currentEvent.name, currentEvent.handler); + this.setState({ currentEvent: null }); + }; + + render() { + let models = []; + if (this.props.info && this.props.info.models) { + for (let [name, model] of Object.entries(this.props.info.models)) { + if ( + model.type === 'deepgrow' || + model.type === 'deepedit' || + model.type === 'vista' + ) { + models.push(name); + } + } + } + + return ( +
+ + +
+ +

+ Create a label and annotate any organ. +

+ this.clearPoints()}> + Clear Points + +
+ } + /> +
+
+ ); + } +} diff --git a/plugins/ohifv3/extension-monai-label/src/components/callInputDialog.tsx b/plugins/ohifv3/extension-monai-label/src/components/callInputDialog.tsx new file mode 100644 index 000000000..6de2470d8 --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/components/callInputDialog.tsx @@ -0,0 +1,62 @@ +import React from 'react'; +import { Input, Dialog, ButtonEnums } from '@ohif/ui'; + +function callInputDialog(uiDialogService, label, callback) { + const dialogId = 'enter-segment-label'; + + const onSubmitHandler = ({ action, value }) => { + switch (action.id) { + case 'save': + callback(value.label, action.id); + break; + case 'cancel': + callback('', action.id); + break; + } + uiDialogService.dismiss({ id: dialogId }); + }; + + if (uiDialogService) { + uiDialogService.create({ + id: dialogId, + centralize: true, + isDraggable: false, + showOverlay: true, + content: Dialog, + contentProps: { + title: 'Segment', + value: { label }, + noCloseButton: true, + onClose: () => uiDialogService.dismiss({ id: dialogId }), + actions: [ + { id: 'cancel', text: 'Cancel', type: ButtonEnums.type.secondary }, + { id: 'save', text: 'Confirm', type: ButtonEnums.type.primary }, + ], + onSubmit: onSubmitHandler, + body: ({ value, setValue }) => { + return ( + { + event.persist(); + setValue(value => ({ ...value, label: event.target.value })); + }} + onKeyPress={event => { + if (event.key === 'Enter') { + onSubmitHandler({ value, action: { id: 'save' } }); + } + }} + /> + ); + }, + }, + }); + } +} + +export default callInputDialog; diff --git a/plugins/ohifv3/extension-monai-label/src/components/colorPickerDialog.css b/plugins/ohifv3/extension-monai-label/src/components/colorPickerDialog.css new file mode 100644 index 000000000..1c6bb2067 --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/components/colorPickerDialog.css @@ -0,0 +1,3 @@ +.chrome-picker { + background: #090c29 !important; +} diff --git a/plugins/ohifv3/extension-monai-label/src/components/colorPickerDialog.tsx b/plugins/ohifv3/extension-monai-label/src/components/colorPickerDialog.tsx new file mode 100644 index 000000000..38e85efb2 --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/components/colorPickerDialog.tsx @@ -0,0 +1,58 @@ +import React from 'react'; +import { Dialog } from '@ohif/ui'; +import { ChromePicker } from 'react-color'; + +import './colorPickerDialog.css'; + +function callColorPickerDialog(uiDialogService, rgbaColor, callback) { + const dialogId = 'pick-color'; + + const onSubmitHandler = ({ action, value }) => { + switch (action.id) { + case 'save': + callback(value.rgbaColor, action.id); + break; + case 'cancel': + callback('', action.id); + break; + } + uiDialogService.dismiss({ id: dialogId }); + }; + + if (uiDialogService) { + uiDialogService.create({ + id: dialogId, + centralize: true, + isDraggable: false, + showOverlay: true, + content: Dialog, + contentProps: { + title: 'Segment Color', + value: { rgbaColor }, + noCloseButton: true, + onClose: () => uiDialogService.dismiss({ id: dialogId }), + actions: [ + { id: 'cancel', text: 'Cancel', type: 'primary' }, + { id: 'save', text: 'Save', type: 'secondary' }, + ], + onSubmit: onSubmitHandler, + body: ({ value, setValue }) => { + const handleChange = color => { + setValue({ rgbaColor: color.rgb }); + }; + + return ( + + ); + }, + }, + }); + } +} + +export default callColorPickerDialog; diff --git a/plugins/ohifv3/extension-monai-label/src/getCommandsModule.ts b/plugins/ohifv3/extension-monai-label/src/getCommandsModule.ts new file mode 100644 index 000000000..a1f4c751a --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/getCommandsModule.ts @@ -0,0 +1,47 @@ +import { ServicesManager, CommandsManager, ExtensionManager } from '@ohif/core'; +import { + Enums, +} from '@cornerstonejs/tools'; + +export default function getCommandsModule({ + servicesManager, + commandsManager, + extensionManager, +}: { + servicesManager: ServicesManager; + commandsManager: CommandsManager; + extensionManager: ExtensionManager; +}) { + const { + viewportGridService, + toolGroupService, + cineService, + toolbarService, + uiNotificationService, + } = servicesManager.services; + + const actions = { + setToolActive: ({ toolName }) => { + + uiNotificationService.show({ + title: 'MONAI Label probe', + message: + 'MONAI Label Probe Activated.', + type: 'info', + duration: 3000, + }); + }, + }; + + const definitions = { + /* setToolActive: { + commandFn: actions.setToolActive, + }, */ + }; + + return { + actions, + definitions, + defaultContext: 'MONAILabel', + }; +} diff --git a/plugins/ohifv3/extension-monai-label/src/getPanelModule.tsx b/plugins/ohifv3/extension-monai-label/src/getPanelModule.tsx new file mode 100644 index 000000000..bb43be2d8 --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/getPanelModule.tsx @@ -0,0 +1,33 @@ +import React from 'react'; +import MonaiLabelPanel from './components/MonaiLabelPanel'; + + +function getPanelModule({ + commandsManager, + extensionManager, + servicesManager, +}) { + + const WrappedMonaiLabelPanel = () => { + return ( + + ); + }; + + return [ + { + name: 'monailabel', + iconName: 'tab-patient-info', + iconLabel: 'MONAI', + label: 'MONAI Label', + secondaryLabel: 'MONAI Label', + component: WrappedMonaiLabelPanel, + }, + ]; +} + +export default getPanelModule; diff --git a/plugins/ohifv3/extension-monai-label/src/id.js b/plugins/ohifv3/extension-monai-label/src/id.js new file mode 100644 index 000000000..ebe5acd98 --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/id.js @@ -0,0 +1,5 @@ +import packageJson from '../package.json'; + +const id = packageJson.name; + +export { id }; diff --git a/plugins/ohifv3/extension-monai-label/src/index.tsx b/plugins/ohifv3/extension-monai-label/src/index.tsx new file mode 100644 index 000000000..5b3e76f6b --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/index.tsx @@ -0,0 +1,57 @@ +import { id } from './id'; +import getPanelModule from './getPanelModule'; +import getCommandsModule from './getCommandsModule'; +import preRegistration from './init'; + +export default { + id, + + preRegistration, + + getPanelModule, + + getViewportModule: ({ + servicesManager, + commandsManager, + extensionManager, + }) => {}, + + getToolbarModule: ({ + servicesManager, + commandsManager, + extensionManager, + }) => {}, + + getLayoutTemplateModule: ({ + servicesManager, + commandsManager, + extensionManager, + }) => {}, + + getSopClassHandlerModule: ({ + servicesManager, + commandsManager, + extensionManager, + }) => {}, + + getHangingProtocolModule: ({ + servicesManager, + commandsManager, + extensionManager, + }) => {}, + + getCommandsModule, + + getContextModule: ({ + servicesManager, + commandsManager, + extensionManager, + }) => {}, + + getDataSourcesModule: ({ + servicesManager, + commandsManager, + extensionManager, + }) => {}, + +}; diff --git a/plugins/ohifv3/extension-monai-label/src/init.ts b/plugins/ohifv3/extension-monai-label/src/init.ts new file mode 100644 index 000000000..58c3afdef --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/init.ts @@ -0,0 +1,15 @@ +import { + addTool, +} from '@cornerstonejs/tools'; +import { Types } from '@ohif/core'; +import ProbeMONAILabelTool from './tools/ProbeMONAILabelTool'; + +/** + * @param {object} configuration + */ +export default function init({ + servicesManager, + configuration = {}, +}: Types.Extensions.ExtensionParams): void { + addTool(ProbeMONAILabelTool); +} diff --git a/plugins/ohifv3/extension-monai-label/src/services/MonaiLabelClient.js b/plugins/ohifv3/extension-monai-label/src/services/MonaiLabelClient.js new file mode 100644 index 000000000..1b2081fcc --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/services/MonaiLabelClient.js @@ -0,0 +1,208 @@ +import axios from 'axios'; + +export default class MonaiLabelClient { + constructor(server_url) { + this.server_url = new URL(server_url); + } + + async info() { + let url = new URL('info/', this.server_url); + return await MonaiLabelClient.api_get(url.toString()); + } + + async segmentation(model, image, params = {}, label = null) { + // label is used to send label volumes, e.g. scribbles, + // that are to be used during segmentation + return this.infer(model, image, params, label); + } + + async deepgrow(model, image, foreground, background, params = {}) { + params['foreground'] = foreground; + params['background'] = background; + return this.infer(model, image, params); + } + + async infer(model, image, params, label = null, result_extension = '.nrrd') { + let url = new URL('infer/' + encodeURIComponent(model), this.server_url); + url.searchParams.append('image', image); + url.searchParams.append('output', 'all'); + // url.searchParams.append('output', 'image'); + url = url.toString(); + + + if (result_extension) { + params.result_extension = result_extension; + params.result_dtype = 'uint16'; + params.result_compress = false; + } + + // return the indexes as defined in the config file + params.restore_label_idx = false + + return await MonaiLabelClient.api_post( + url, + params, + label, + true, + 'arraybuffer' + ); + } + + async next_sample(stategy = 'random', params = {}) { + const url = new URL( + 'activelearning/' + encodeURIComponent(stategy), + this.server_url + ).toString(); + + return await MonaiLabelClient.api_post(url, params, null, false, 'json'); + } + + async save_label(image, label, params) { + let url = new URL('datastore/label', this.server_url); + url.searchParams.append('image', image); + url = url.toString(); + + /* debugger; */ + + const data = MonaiLabelClient.constructFormDataFromArray( + params, + label, + 'label', + 'label.bin' + ); + + return await MonaiLabelClient.api_put_data(url, data, 'json'); + } + + async is_train_running() { + let url = new URL('train/', this.server_url); + url.searchParams.append('check_if_running', 'true'); + url = url.toString(); + + const response = await MonaiLabelClient.api_get(url); + return ( + response && response.status === 200 && response.data.status === 'RUNNING' + ); + } + + async run_train(params) { + const url = new URL('train/', this.server_url).toString(); + return await MonaiLabelClient.api_post(url, params, null, false, 'json'); + } + + async stop_train() { + const url = new URL('train/', this.server_url).toString(); + return await MonaiLabelClient.api_delete(url); + } + + static constructFormDataFromArray(params, data, name, fileName) { + let formData = new FormData(); + formData.append('params', JSON.stringify(params)); + formData.append(name, data, fileName); + return formData; + } + + static constructFormData(params, files) { + let formData = new FormData(); + formData.append('params', JSON.stringify(params)); + + if (files) { + if (!Array.isArray(files)) { + files = [files]; + } + for (let i = 0; i < files.length; i++) { + formData.append(files[i].name, files[i].data, files[i].fileName); + } + } + return formData; + } + + static constructFormOrJsonData(params, files) { + return files ? MonaiLabelClient.constructFormData(params, files) : params; + } + + static api_get(url) { + console.debug('GET:: ' + url); + return axios + .get(url) + .then(function (response) { + console.debug(response); + return response; + }) + .catch(function (error) { + return error; + }) + .finally(function () {}); + } + + static api_delete(url) { + console.debug('DELETE:: ' + url); + return axios + .delete(url) + .then(function (response) { + console.debug(response); + return response; + }) + .catch(function (error) { + return error; + }) + .finally(function () {}); + } + + static api_post( + url, + params, + files, + form = true, + responseType = 'arraybuffer' + ) { + const data = form + ? MonaiLabelClient.constructFormData(params, files) + : MonaiLabelClient.constructFormOrJsonData(params, files); + return MonaiLabelClient.api_post_data(url, data, responseType); + } + + static api_post_data(url, data, responseType) { + console.debug('POST:: ' + url); + return axios + .post(url, data, { + responseType: responseType, + headers: { + accept: ['application/json', 'multipart/form-data'], + }, + }) + .then(function (response) { + console.debug(response); + return response; + }) + .catch(function (error) { + return error; + }) + .finally(function () {}); + } + + static api_put(url, params, files, form = false, responseType = 'json') { + const data = form + ? MonaiLabelClient.constructFormData(params, files) + : MonaiLabelClient.constructFormOrJsonData(params, files); + return MonaiLabelClient.api_put_data(url, data, responseType); + } + + static api_put_data(url, data, responseType = 'json') { + console.debug('PUT:: ' + url); + return axios + .put(url, data, { + responseType: responseType, + headers: { + accept: ['application/json', 'multipart/form-data'], + }, + }) + .then(function (response) { + console.debug(response); + return response; + }) + .catch(function (error) { + return error; + }); + } +} diff --git a/plugins/ohifv3/extension-monai-label/src/tools/ProbeMONAILabelTool.ts b/plugins/ohifv3/extension-monai-label/src/tools/ProbeMONAILabelTool.ts new file mode 100644 index 000000000..8997271da --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/tools/ProbeMONAILabelTool.ts @@ -0,0 +1,83 @@ +import { Types, metaData, utilities as csUtils } from '@cornerstonejs/core'; +import { ProbeTool, annotation, drawing } from '@cornerstonejs/tools'; + +const { getAnnotations } = annotation.state; + +export default class ProbeMONAILabelTool extends ProbeTool { + static toolName = 'ProbeMONAILabel'; + + constructor( + toolProps = {}, + defaultToolProps = { + configuration: { + customColor: undefined, + }, + } + ) { + super(toolProps, defaultToolProps); + } + + renderAnnotation = (enabledElement, svgDrawingHelper): boolean => { + let renderStatus = false; + const { viewport } = enabledElement; + const { element } = viewport; + + let annotations = getAnnotations(this.getToolName(), element); + + if (!annotations?.length) { + return renderStatus; + } + + annotations = this.filterInteractableAnnotationsForElement( + element, + annotations + ); + + if (!annotations?.length) { + return renderStatus; + } + + const targetId = this.getTargetId(viewport); + const renderingEngine = viewport.getRenderingEngine(); + + const styleSpecifier: StyleSpecifier = { + toolGroupId: this.toolGroupId, + toolName: this.getToolName(), + viewportId: enabledElement.viewport.id, + }; + + for (let i = 0; i < annotations.length; i++) { + const annotation = annotations[i] as ProbeAnnotation; + const annotationUID = annotation.annotationUID; + const data = annotation.data; + const point = data.handles.points[0]; + const canvasCoordinates = viewport.worldToCanvas(point); + + styleSpecifier.annotationUID = annotationUID; + + const color = + this.configuration?.customColor ?? + this.getStyle('color', styleSpecifier, annotation); + + // If rendering engine has been destroyed while rendering + if (!viewport.getRenderingEngine()) { + console.warn('Rendering Engine has been destroyed'); + return renderStatus; + } + + const handleGroupUID = '0'; + + drawing.drawHandles( + svgDrawingHelper, + annotationUID, + handleGroupUID, + [canvasCoordinates], + { color } + ); + + renderStatus = true; + } + + return renderStatus; + }; +} diff --git a/plugins/ohifv3/extension-monai-label/src/utils/GenericAnatomyColors.js b/plugins/ohifv3/extension-monai-label/src/utils/GenericAnatomyColors.js new file mode 100644 index 000000000..6a35cf9d7 --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/utils/GenericAnatomyColors.js @@ -0,0 +1,549 @@ + +function componentToHex(c) { + const hex = c.toString(16); + return hex.length === 1 ? '0' + hex : hex; +} + +function rgbToHex(r, g, b) { + return '#' + componentToHex(r) + componentToHex(g) + componentToHex(b); +} + +export const GenericNames = [ + 'james', + 'robert', + 'john', + 'michael', + 'william', + 'david', + 'richard', + 'joseph', + 'thomas', + 'charles', + 'christopher', + 'daniel', + 'matthew', + 'anthony', + 'mark', + 'donald', + 'steven', + 'paul', + 'andrew', + 'joshua', + 'kenneth', + 'kevin', + 'brian', + 'george', + 'edward', + 'ronald', + 'timothy', + 'jason', + 'jeffrey', + 'ryan', + 'jacob', + 'gary', + 'nicholas', + 'eric', + 'jonathan', + 'stephen', + 'larry', + 'justin', + 'scott', + 'brandon', + 'benjamin', + 'samuel', + 'gregory', + 'frank', + 'alexander', + 'raymond', + 'patrick', + 'jack', + 'dennis', + 'jerry', + 'tyler', + 'aaron', + 'jose', + 'adam', + 'henry', + 'nathan', + 'douglas', + 'zachary', + 'peter', + 'kyle', + 'walter', + 'ethan', + 'jeremy', + 'harold', + 'keith', + 'christian', + 'roger', + 'noah', + 'gerald', + 'carl', + 'terry', + 'sean', + 'austin', + 'arthur', + 'lawrence', + 'jesse', + 'dylan', + 'bryan', + 'joe', + 'jordan', + 'billy', + 'bruce', + 'albert', + 'willie', + 'gabriel', + 'logan', + 'alan', + 'juan', + 'wayne', + 'roy', + 'ralph', + 'randy', + 'eugene', + 'vincent', + 'russell', + 'elijah', + 'louis', + 'bobby', + 'philip', + 'johnny', + 'mary', + 'patricia', + 'jennifer', + 'linda', + 'elizabeth', + 'barbara', + 'susan', + 'jessica', + 'sarah', + 'karen', + 'nancy', + 'lisa', + 'betty', + 'margaret', + 'sandra', + 'ashley', + 'kimberly', + 'emily', + 'donna', + 'michelle', + 'dorothy', + 'carol', + 'amanda', + 'melissa', + 'deborah', + 'stephanie', + 'rebecca', + 'sharon', + 'laura', + 'cynthia', + 'kathleen', + 'amy', + 'shirley', + 'angela', + 'helen', + 'anna', + 'brenda', + 'pamela', + 'nicole', + 'emma', + 'samantha', + 'katherine', + 'christine', + 'debra', + 'rachel', + 'catherine', + 'carolyn', + 'janet', + 'ruth', + 'maria', + 'heather', + 'diane', + 'virginia', + 'julie', + 'joyce', + 'victoria', + 'olivia', + 'kelly', + 'christina', + 'lauren', + 'joan', + 'evelyn', + 'judith', + 'megan', + 'cheryl', + 'andrea', + 'hannah', + 'martha', + 'jacqueline', + 'frances', + 'gloria', + 'ann', + 'teresa', + 'kathryn', + 'sara', + 'janice', + 'jean', + 'alice', + 'madison', + 'doris', + 'abigail', + 'julia', + 'judy', + 'grace', + 'denise', + 'amber', + 'marilyn', + 'beverly', + 'danielle', + 'theresa', + 'sophia', + 'marie', + 'diana', + 'brittany', + 'natalie', + 'isabella', + 'charlotte', + 'rose', + 'alexis', + 'kayla', +]; + +export const GenericAnatomyColors = [ + { label: 'background', value: rgbToHex(0, 0, 0) }, + { label: 'tissue', value: rgbToHex(128, 174, 128) }, + { label: 'bone', value: rgbToHex(241, 214, 145) }, + { label: 'skin', value: rgbToHex(177, 122, 101) }, + { label: 'connective tissue', value: rgbToHex(111, 184, 210) }, + { label: 'blood', value: rgbToHex(216, 101, 79) }, + { label: 'organ', value: rgbToHex(221, 130, 101) }, + { label: 'mass', value: rgbToHex(144, 238, 144) }, + { label: 'muscle', value: rgbToHex(192, 104, 88) }, + { label: 'foreign object', value: rgbToHex(220, 245, 20) }, + { label: 'waste', value: rgbToHex(78, 63, 0) }, + { label: 'teeth', value: rgbToHex(255, 250, 220) }, + { label: 'fat', value: rgbToHex(230, 220, 70) }, + { label: 'gray matter', value: rgbToHex(200, 200, 235) }, + { label: 'white matter', value: rgbToHex(250, 250, 210) }, + { label: 'nerve', value: rgbToHex(244, 214, 49) }, + { label: 'vein', value: rgbToHex(0, 151, 206) }, + { label: 'artery', value: rgbToHex(216, 101, 79) }, + { label: 'capillary', value: rgbToHex(183, 156, 220) }, + { label: 'ligament', value: rgbToHex(183, 214, 211) }, + { label: 'tendon', value: rgbToHex(152, 189, 207) }, + { label: 'cartilage', value: rgbToHex(111, 184, 210) }, + { label: 'meniscus', value: rgbToHex(178, 212, 242) }, + { label: 'lymph node', value: rgbToHex(68, 172, 100) }, + { label: 'lymphatic vessel', value: rgbToHex(111, 197, 131) }, + { label: 'cerebro-spinal fluid', value: rgbToHex(85, 188, 255) }, + { label: 'bile', value: rgbToHex(0, 145, 30) }, + { label: 'urine', value: rgbToHex(214, 230, 130) }, + { label: 'feces', value: rgbToHex(78, 63, 0) }, + { label: 'gas', value: rgbToHex(218, 255, 255) }, + { label: 'fluid', value: rgbToHex(170, 250, 250) }, + { label: 'edema', value: rgbToHex(140, 224, 228) }, + { label: 'bleeding', value: rgbToHex(188, 65, 28) }, + { label: 'necrosis', value: rgbToHex(216, 191, 216) }, + { label: 'clot', value: rgbToHex(145, 60, 66) }, + { label: 'embolism', value: rgbToHex(150, 98, 83) }, + { label: 'head', value: rgbToHex(177, 122, 101) }, + { label: 'central nervous system', value: rgbToHex(244, 214, 49) }, + { label: 'brain', value: rgbToHex(250, 250, 225) }, + { label: 'gray matter of brain', value: rgbToHex(200, 200, 215) }, + { label: 'telencephalon', value: rgbToHex(68, 131, 98) }, + { label: 'cerebral cortex', value: rgbToHex(128, 174, 128) }, + { label: 'right frontal lobe', value: rgbToHex(83, 146, 164) }, + { label: 'left frontal lobe', value: rgbToHex(83, 146, 164) }, + { label: 'right temporal lobe', value: rgbToHex(162, 115, 105) }, + { label: 'left temporal lobe', value: rgbToHex(162, 115, 105) }, + { label: 'right parietal lobe', value: rgbToHex(141, 93, 137) }, + { label: 'left parietal lobe', value: rgbToHex(141, 93, 137) }, + { label: 'right occipital lobe', value: rgbToHex(182, 166, 110) }, + { label: 'left occipital lobe', value: rgbToHex(182, 166, 110) }, + { label: 'right insular lobe', value: rgbToHex(188, 135, 166) }, + { label: 'left insular lobe', value: rgbToHex(188, 135, 166) }, + { label: 'right limbic lobe', value: rgbToHex(154, 150, 201) }, + { label: 'left limbic lobe', value: rgbToHex(154, 150, 201) }, + { label: 'right striatum', value: rgbToHex(177, 140, 190) }, + { label: 'left striatum', value: rgbToHex(177, 140, 190) }, + { label: 'right caudate nucleus', value: rgbToHex(30, 111, 85) }, + { label: 'left caudate nucleus', value: rgbToHex(30, 111, 85) }, + { label: 'right putamen', value: rgbToHex(210, 157, 166) }, + { label: 'left putamen', value: rgbToHex(210, 157, 166) }, + { label: 'right pallidum', value: rgbToHex(48, 129, 126) }, + { label: 'left pallidum', value: rgbToHex(48, 129, 126) }, + { label: 'right amygdaloid complex', value: rgbToHex(98, 153, 112) }, + { label: 'left amygdaloid complex', value: rgbToHex(98, 153, 112) }, + { label: 'diencephalon', value: rgbToHex(69, 110, 53) }, + { label: 'thalamus', value: rgbToHex(166, 113, 137) }, + { label: 'right thalamus', value: rgbToHex(122, 101, 38) }, + { label: 'left thalamus', value: rgbToHex(122, 101, 38) }, + { label: 'pineal gland', value: rgbToHex(253, 135, 192) }, + { label: 'midbrain', value: rgbToHex(145, 92, 109) }, + { label: 'substantia nigra', value: rgbToHex(46, 101, 131) }, + { label: 'right substantia nigra', value: rgbToHex(0, 108, 112) }, + { label: 'left substantia nigra', value: rgbToHex(0, 108, 112) }, + { label: 'cerebral white matter', value: rgbToHex(250, 250, 225) }, + { + label: 'right superior longitudinal fasciculus', + value: rgbToHex(127, 150, 88), + }, + { + label: 'left superior longitudinal fasciculus', + value: rgbToHex(127, 150, 88), + }, + { + label: 'right inferior longitudinal fasciculus', + value: rgbToHex(159, 116, 163), + }, + { + label: 'left inferior longitudinal fasciculus', + value: rgbToHex(159, 116, 163), + }, + { label: 'right arcuate fasciculus', value: rgbToHex(125, 102, 154) }, + { label: 'left arcuate fasciculus', value: rgbToHex(125, 102, 154) }, + { label: 'right uncinate fasciculus', value: rgbToHex(106, 174, 155) }, + { label: 'left uncinate fasciculus', value: rgbToHex(106, 174, 155) }, + { label: 'right cingulum bundle', value: rgbToHex(154, 146, 83) }, + { label: 'left cingulum bundle', value: rgbToHex(154, 146, 83) }, + { label: 'projection fibers', value: rgbToHex(126, 126, 55) }, + { label: 'right corticospinal tract', value: rgbToHex(201, 160, 133) }, + { label: 'left corticospinal tract', value: rgbToHex(201, 160, 133) }, + { label: 'right optic radiation', value: rgbToHex(78, 152, 141) }, + { label: 'left optic radiation', value: rgbToHex(78, 152, 141) }, + { label: 'right medial lemniscus', value: rgbToHex(174, 140, 103) }, + { label: 'left medial lemniscus', value: rgbToHex(174, 140, 103) }, + { + label: 'right superior cerebellar peduncle', + value: rgbToHex(139, 126, 177), + }, + { + label: 'left superior cerebellar peduncle', + value: rgbToHex(139, 126, 177), + }, + { label: 'right middle cerebellar peduncle', value: rgbToHex(148, 120, 72) }, + { label: 'left middle cerebellar peduncle', value: rgbToHex(148, 120, 72) }, + { + label: 'right inferior cerebellar peduncle', + value: rgbToHex(186, 135, 135), + }, + { + label: 'left inferior cerebellar peduncle', + value: rgbToHex(186, 135, 135), + }, + { label: 'optic chiasm', value: rgbToHex(99, 106, 24) }, + { label: 'right optic tract', value: rgbToHex(156, 171, 108) }, + { label: 'left optic tract', value: rgbToHex(156, 171, 108) }, + { label: 'right fornix', value: rgbToHex(64, 123, 147) }, + { label: 'left fornix', value: rgbToHex(64, 123, 147) }, + { label: 'commissural fibers', value: rgbToHex(138, 95, 74) }, + { label: 'corpus callosum', value: rgbToHex(97, 113, 158) }, + { label: 'posterior commissure', value: rgbToHex(126, 161, 197) }, + { label: 'cerebellar white matter', value: rgbToHex(194, 195, 164) }, + { label: 'CSF space', value: rgbToHex(85, 188, 255) }, + { label: 'ventricles of brain', value: rgbToHex(88, 106, 215) }, + { label: 'right lateral ventricle', value: rgbToHex(88, 106, 215) }, + { label: 'left lateral ventricle', value: rgbToHex(88, 106, 215) }, + { label: 'right third ventricle', value: rgbToHex(88, 106, 215) }, + { label: 'left third ventricle', value: rgbToHex(88, 106, 215) }, + { label: 'cerebral aqueduct', value: rgbToHex(88, 106, 215) }, + { label: 'fourth ventricle', value: rgbToHex(88, 106, 215) }, + { label: 'subarachnoid space', value: rgbToHex(88, 106, 215) }, + { label: 'spinal cord', value: rgbToHex(244, 214, 49) }, + { label: 'gray matter of spinal cord', value: rgbToHex(200, 200, 215) }, + { label: 'white matter of spinal cord', value: rgbToHex(250, 250, 225) }, + { label: 'endocrine system of brain', value: rgbToHex(82, 174, 128) }, + { label: 'pituitary gland', value: rgbToHex(57, 157, 110) }, + { label: 'adenohypophysis', value: rgbToHex(60, 143, 83) }, + { label: 'neurohypophysis', value: rgbToHex(92, 162, 109) }, + { label: 'meninges', value: rgbToHex(255, 244, 209) }, + { label: 'dura mater', value: rgbToHex(255, 244, 209) }, + { label: 'arachnoid', value: rgbToHex(255, 244, 209) }, + { label: 'pia mater', value: rgbToHex(255, 244, 209) }, + { label: 'muscles of head', value: rgbToHex(201, 121, 77) }, + { label: 'salivary glands', value: rgbToHex(70, 163, 117) }, + { label: 'lips', value: rgbToHex(188, 91, 95) }, + { label: 'nose', value: rgbToHex(177, 122, 101) }, + { label: 'tongue', value: rgbToHex(166, 84, 94) }, + { label: 'soft palate', value: rgbToHex(182, 105, 107) }, + { label: 'right inner ear', value: rgbToHex(229, 147, 118) }, + { label: 'left inner ear', value: rgbToHex(229, 147, 118) }, + { label: 'right external ear', value: rgbToHex(174, 122, 90) }, + { label: 'left external ear', value: rgbToHex(174, 122, 90) }, + { label: 'right middle ear', value: rgbToHex(201, 112, 73) }, + { label: 'left middle ear', value: rgbToHex(201, 112, 73) }, + { label: 'right eyeball', value: rgbToHex(194, 142, 0) }, + { label: 'left eyeball', value: rgbToHex(194, 142, 0) }, + { label: 'skull', value: rgbToHex(241, 213, 144) }, + { label: 'right frontal bone', value: rgbToHex(203, 179, 77) }, + { label: 'left frontal bone', value: rgbToHex(203, 179, 77) }, + { label: 'right parietal bone', value: rgbToHex(229, 204, 109) }, + { label: 'left parietal bone', value: rgbToHex(229, 204, 109) }, + { label: 'right temporal bone', value: rgbToHex(255, 243, 152) }, + { label: 'left temporal bone', value: rgbToHex(255, 243, 152) }, + { label: 'right sphenoid bone', value: rgbToHex(209, 185, 85) }, + { label: 'left sphenoid bone', value: rgbToHex(209, 185, 85) }, + { label: 'right ethmoid bone', value: rgbToHex(248, 223, 131) }, + { label: 'left ethmoid bone', value: rgbToHex(248, 223, 131) }, + { label: 'occipital bone', value: rgbToHex(255, 230, 138) }, + { label: 'maxilla', value: rgbToHex(196, 172, 68) }, + { label: 'right zygomatic bone', value: rgbToHex(255, 255, 167) }, + { label: 'right lacrimal bone', value: rgbToHex(255, 250, 160) }, + { label: 'vomer bone', value: rgbToHex(255, 237, 145) }, + { label: 'right palatine bone', value: rgbToHex(242, 217, 123) }, + { label: 'left palatine bone', value: rgbToHex(242, 217, 123) }, + { label: 'mandible', value: rgbToHex(222, 198, 101) }, + { label: 'neck', value: rgbToHex(177, 122, 101) }, + { label: 'muscles of neck', value: rgbToHex(213, 124, 109) }, + { label: 'pharynx', value: rgbToHex(184, 105, 108) }, + { label: 'larynx', value: rgbToHex(150, 208, 243) }, + { label: 'thyroid gland', value: rgbToHex(62, 162, 114) }, + { label: 'right parathyroid glands', value: rgbToHex(62, 162, 114) }, + { label: 'left parathyroid glands', value: rgbToHex(62, 162, 114) }, + { label: 'skeleton of neck', value: rgbToHex(242, 206, 142) }, + { label: 'hyoid bone', value: rgbToHex(250, 210, 139) }, + { label: 'cervical vertebral column', value: rgbToHex(255, 255, 207) }, + { label: 'thorax', value: rgbToHex(177, 122, 101) }, + { label: 'trachea', value: rgbToHex(182, 228, 255) }, + { label: 'bronchi', value: rgbToHex(175, 216, 244) }, + { label: 'right lung', value: rgbToHex(197, 165, 145) }, + { label: 'left lung', value: rgbToHex(197, 165, 145) }, + { label: 'superior lobe of right lung', value: rgbToHex(172, 138, 115) }, + { label: 'superior lobe of left lung', value: rgbToHex(172, 138, 115) }, + { label: 'middle lobe of right lung', value: rgbToHex(202, 164, 140) }, + { label: 'inferior lobe of right lung', value: rgbToHex(224, 186, 162) }, + { label: 'inferior lobe of left lung', value: rgbToHex(224, 186, 162) }, + { label: 'pleura', value: rgbToHex(255, 245, 217) }, + { label: 'heart', value: rgbToHex(206, 110, 84) }, + { label: 'right atrium', value: rgbToHex(210, 115, 89) }, + { label: 'left atrium', value: rgbToHex(203, 108, 81) }, + { label: 'atrial septum', value: rgbToHex(233, 138, 112) }, + { label: 'ventricular septum', value: rgbToHex(195, 100, 73) }, + { label: 'right ventricle of heart', value: rgbToHex(181, 85, 57) }, + { label: 'left ventricle of heart', value: rgbToHex(152, 55, 13) }, + { label: 'mitral valve', value: rgbToHex(159, 63, 27) }, + { label: 'tricuspid valve', value: rgbToHex(166, 70, 38) }, + { label: 'aortic valve', value: rgbToHex(218, 123, 97) }, + { label: 'pulmonary valve', value: rgbToHex(225, 130, 104) }, + { label: 'aorta', value: rgbToHex(224, 97, 76) }, + { label: 'pericardium', value: rgbToHex(255, 244, 209) }, + { label: 'pericardial cavity', value: rgbToHex(184, 122, 154) }, + { label: 'esophagus', value: rgbToHex(211, 171, 143) }, + { label: 'thymus', value: rgbToHex(47, 150, 103) }, + { label: 'mediastinum', value: rgbToHex(255, 244, 209) }, + { label: 'skin of thoracic wall', value: rgbToHex(173, 121, 88) }, + { label: 'muscles of thoracic wall', value: rgbToHex(188, 95, 76) }, + { label: 'skeleton of thorax', value: rgbToHex(255, 239, 172) }, + { label: 'thoracic vertebral column', value: rgbToHex(226, 202, 134) }, + { label: 'ribs', value: rgbToHex(253, 232, 158) }, + { label: 'sternum', value: rgbToHex(244, 217, 154) }, + { label: 'right clavicle', value: rgbToHex(205, 179, 108) }, + { label: 'left clavicle', value: rgbToHex(205, 179, 108) }, + { label: 'abdominal cavity', value: rgbToHex(186, 124, 161) }, + { label: 'abdomen', value: rgbToHex(177, 122, 101) }, + { label: 'peritoneum', value: rgbToHex(255, 255, 220) }, + { label: 'omentum', value: rgbToHex(234, 234, 194) }, + { label: 'peritoneal cavity', value: rgbToHex(204, 142, 178) }, + { label: 'retroperitoneal space', value: rgbToHex(180, 119, 153) }, + { label: 'stomach', value: rgbToHex(216, 132, 105) }, + { label: 'duodenum', value: rgbToHex(255, 253, 229) }, + { label: 'small bowel', value: rgbToHex(205, 167, 142) }, + { label: 'colon', value: rgbToHex(204, 168, 143) }, + { label: 'anus', value: rgbToHex(255, 224, 199) }, + { label: 'liver', value: rgbToHex(221, 130, 101) }, + { label: 'biliary tree', value: rgbToHex(0, 145, 30) }, + { label: 'gallbladder', value: rgbToHex(139, 150, 98) }, + { label: 'pancreas', value: rgbToHex(249, 180, 111) }, + { label: 'spleen', value: rgbToHex(157, 108, 162) }, + { label: 'urinary system', value: rgbToHex(203, 136, 116) }, + { label: 'right kidney', value: rgbToHex(185, 102, 83) }, + { label: 'left kidney', value: rgbToHex(185, 102, 83) }, + { label: 'right ureter', value: rgbToHex(247, 182, 164) }, + { label: 'left ureter', value: rgbToHex(247, 182, 164) }, + { label: 'urinary bladder', value: rgbToHex(222, 154, 132) }, + { label: 'urethra', value: rgbToHex(124, 186, 223) }, + { label: 'right adrenal gland', value: rgbToHex(249, 186, 150) }, + { label: 'left adrenal gland', value: rgbToHex(249, 186, 150) }, + { label: 'female internal genitalia', value: rgbToHex(244, 170, 147) }, + { label: 'uterus', value: rgbToHex(255, 181, 158) }, + { label: 'right fallopian tube', value: rgbToHex(255, 190, 165) }, + { label: 'left fallopian tube', value: rgbToHex(227, 153, 130) }, + { label: 'right ovary', value: rgbToHex(213, 141, 113) }, + { label: 'left ovary', value: rgbToHex(213, 141, 113) }, + { label: 'vagina', value: rgbToHex(193, 123, 103) }, + { label: 'male internal genitalia', value: rgbToHex(216, 146, 127) }, + { label: 'prostate', value: rgbToHex(230, 158, 140) }, + { label: 'right seminal vesicle', value: rgbToHex(245, 172, 147) }, + { label: 'left seminal vesicle', value: rgbToHex(245, 172, 147) }, + { label: 'right deferent duct', value: rgbToHex(241, 172, 151) }, + { label: 'left deferent duct', value: rgbToHex(241, 172, 151) }, + { label: 'skin of abdominal wall', value: rgbToHex(177, 124, 92) }, + { label: 'muscles of abdominal wall', value: rgbToHex(171, 85, 68) }, + { label: 'skeleton of abdomen', value: rgbToHex(217, 198, 131) }, + { label: 'lumbar vertebral column', value: rgbToHex(212, 188, 102) }, + { label: 'female external genitalia', value: rgbToHex(185, 135, 134) }, + { label: 'male external genitalia', value: rgbToHex(185, 135, 134) }, + { label: 'skeleton of upper limb', value: rgbToHex(198, 175, 125) }, + { label: 'muscles of upper limb', value: rgbToHex(194, 98, 79) }, + { label: 'right upper limb', value: rgbToHex(177, 122, 101) }, + { label: 'left upper limb', value: rgbToHex(177, 122, 101) }, + { label: 'right shoulder', value: rgbToHex(177, 122, 101) }, + { label: 'left shoulder', value: rgbToHex(177, 122, 101) }, + { label: 'right arm', value: rgbToHex(177, 122, 101) }, + { label: 'left arm', value: rgbToHex(177, 122, 101) }, + { label: 'right elbow', value: rgbToHex(177, 122, 101) }, + { label: 'left elbow', value: rgbToHex(177, 122, 101) }, + { label: 'right forearm', value: rgbToHex(177, 122, 101) }, + { label: 'left forearm', value: rgbToHex(177, 122, 101) }, + { label: 'right wrist', value: rgbToHex(177, 122, 101) }, + { label: 'left wrist', value: rgbToHex(177, 122, 101) }, + { label: 'right hand', value: rgbToHex(177, 122, 101) }, + { label: 'left hand', value: rgbToHex(177, 122, 101) }, + { label: 'skeleton of lower limb', value: rgbToHex(255, 238, 170) }, + { label: 'muscles of lower limb', value: rgbToHex(206, 111, 93) }, + { label: 'right lower limb', value: rgbToHex(177, 122, 101) }, + { label: 'left lower limb', value: rgbToHex(177, 122, 101) }, + { label: 'right hip', value: rgbToHex(177, 122, 101) }, + { label: 'left hip', value: rgbToHex(177, 122, 101) }, + { label: 'right thigh', value: rgbToHex(177, 122, 101) }, + { label: 'left thigh', value: rgbToHex(177, 122, 101) }, + { label: 'right knee', value: rgbToHex(177, 122, 101) }, + { label: 'left knee', value: rgbToHex(177, 122, 101) }, + { label: 'right leg', value: rgbToHex(177, 122, 101) }, + { label: 'left leg', value: rgbToHex(177, 122, 101) }, + { label: 'right foot', value: rgbToHex(177, 122, 101) }, + { label: 'left foot', value: rgbToHex(177, 122, 101) }, + { label: 'peripheral nervous system', value: rgbToHex(216, 186, 0) }, + { label: 'autonomic nerve', value: rgbToHex(255, 226, 77) }, + { label: 'sympathetic trunk', value: rgbToHex(255, 243, 106) }, + { label: 'cranial nerves', value: rgbToHex(255, 234, 92) }, + { label: 'vagus nerve', value: rgbToHex(240, 210, 35) }, + { label: 'peripheral nerve', value: rgbToHex(224, 194, 0) }, + { label: 'circulatory system', value: rgbToHex(213, 99, 79) }, + { label: 'systemic arterial system', value: rgbToHex(217, 102, 81) }, + { label: 'systemic venous system', value: rgbToHex(0, 147, 202) }, + { label: 'pulmonary arterial system', value: rgbToHex(0, 122, 171) }, + { label: 'pulmonary venous system', value: rgbToHex(186, 77, 64) }, + { label: 'lymphatic system', value: rgbToHex(111, 197, 131) }, + { label: 'needle', value: rgbToHex(240, 255, 30) }, + { label: 'region 0', value: rgbToHex(185, 232, 61) }, + { label: 'region 1', value: rgbToHex(0, 226, 255) }, + { label: 'region 2', value: rgbToHex(251, 159, 255) }, + { label: 'region 3', value: rgbToHex(230, 169, 29) }, + { label: 'region 4', value: rgbToHex(0, 194, 113) }, + { label: 'region 5', value: rgbToHex(104, 160, 249) }, + { label: 'region 6', value: rgbToHex(221, 108, 158) }, + { label: 'region 7', value: rgbToHex(137, 142, 0) }, + { label: 'region 8', value: rgbToHex(230, 70, 0) }, + { label: 'region 9', value: rgbToHex(0, 147, 0) }, + { label: 'region 10', value: rgbToHex(0, 147, 248) }, + { label: 'region 11', value: rgbToHex(231, 0, 206) }, + { label: 'region 12', value: rgbToHex(129, 78, 0) }, + { label: 'region 13', value: rgbToHex(0, 116, 0) }, + { label: 'region 14', value: rgbToHex(0, 0, 255) }, + { label: 'region 15', value: rgbToHex(157, 0, 0) }, + { label: 'unknown', value: rgbToHex(100, 100, 130) }, + { label: 'cyst', value: rgbToHex(205, 205, 100) }, +]; diff --git a/plugins/ohifv3/extension-monai-label/src/utils/GenericUtils.js b/plugins/ohifv3/extension-monai-label/src/utils/GenericUtils.js new file mode 100644 index 000000000..e13c10259 --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/utils/GenericUtils.js @@ -0,0 +1,100 @@ + +import { GenericAnatomyColors, GenericNames } from './GenericAnatomyColors'; + +function getRandomInt(min, max) { + min = Math.ceil(min); + max = Math.floor(max); + return Math.floor(Math.random() * (max - min) + min); //The maximum is exclusive and the minimum is inclusive +} + +function randomRGB() { + const o = Math.round, + r = Math.random, + s = 255; + return rgbToHex(o(r() * s), o(r() * s), o(r() * s)); +} + +function randomName() { + return GenericNames[getRandomInt(0, GenericNames.length)]; +} + +function componentToHex(c) { + const hex = c.toString(16); + return hex.length === 1 ? '0' + hex : hex; +} + +function rgbToHex(r, g, b) { + return '#' + componentToHex(r) + componentToHex(g) + componentToHex(b); +} + +function hexToRgb(hex) { + const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); + return result + ? { + r: parseInt(result[1], 16), + g: parseInt(result[2], 16), + b: parseInt(result[3], 16), + } + : null; +} + +function getLabelColor(label, rgb = true) { + const name = label.toLowerCase(); + for (const i of GenericAnatomyColors) { + if (i.label === name) { + return rgb ? hexToRgb(i.value) : i.value; + } + } + return null; +} + +export class CookieUtils { + static setCookie(name, value, exp_y, exp_m, exp_d, path, domain, secure) { + let cookie_string = name + '=' + escape(value); + if (exp_y) { + let expires = new Date(exp_y, exp_m, exp_d); + cookie_string += '; expires=' + expires.toGMTString(); + } + if (path) cookie_string += '; path=' + escape(path); + if (domain) cookie_string += '; domain=' + escape(domain); + if (secure) cookie_string += '; secure'; + document.cookie = cookie_string; + } + + static getCookie(cookie_name) { + let results = document.cookie.match( + '(^|;) ?' + cookie_name + '=([^;]*)(;|$)' + ); + if (results) return unescape(results[2]); + else return null; + } + + static getCookieString(name, defaultVal = '') { + const val = CookieUtils.getCookie(name); + console.debug(name + ' = ' + val + ' (default: ' + defaultVal + ' )'); + if (!val) { + CookieUtils.setCookie(name, defaultVal); + return defaultVal; + } + return val; + } + + static getCookieBool(name, defaultVal = false) { + const val = CookieUtils.getCookie(name, defaultVal); + return !!JSON.parse(String(val).toLowerCase()); + } + + static getCookieNumber(name, defaultVal = 0) { + const val = CookieUtils.getCookie(name, defaultVal); + return Number(val); + } +} + +export { + getRandomInt, + randomRGB, + randomName, + rgbToHex, + hexToRgb, + getLabelColor, +}; diff --git a/plugins/ohifv3/extension-monai-label/src/utils/SegmentationReader.js b/plugins/ohifv3/extension-monai-label/src/utils/SegmentationReader.js new file mode 100644 index 000000000..47c0dc4d0 --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/utils/SegmentationReader.js @@ -0,0 +1,98 @@ +/* +Copyright (c) MONAI Consortium +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import nrrd from 'nrrd-js'; +import pako from 'pako'; +import readImageArrayBuffer from 'itk/readImageArrayBuffer'; +import writeArrayBuffer from 'itk/writeArrayBuffer'; +import config from 'itk/itkConfig'; + +const pkgJSON = require('../../package.json'); +const itkVersion = pkgJSON.dependencies.itk.substring(1); +config.itkModulesPath = 'https://unpkg.com/itk@' + itkVersion; // HACK to use ITK from CDN + +export default class SegmentationReader { + static parseNrrdData(data) { + let nrrdfile = nrrd.parse(data); + + // Currently gzip is not supported in nrrd.js + if (nrrdfile.encoding === 'gzip') { + const buffer = pako.inflate(nrrdfile.buffer).buffer; + + nrrdfile.encoding = 'raw'; + nrrdfile.data = new Uint16Array(buffer); + nrrdfile.buffer = buffer; + } + + const image = nrrdfile.buffer; + const header = nrrdfile; + delete header.data; + delete header.buffer; + + return { + header, + image, + }; + } + + static saveFile(blob, filename) { + if (window.navigator.msSaveOrOpenBlob) { + window.navigator.msSaveOrOpenBlob(blob, filename); + } else { + const a = document.createElement('a'); + document.body.appendChild(a); + + const url = window.URL.createObjectURL(blob); + a.href = url; + a.download = filename; + a.click(); + + setTimeout(() => { + window.URL.revokeObjectURL(url); + document.body.removeChild(a); + }, 0); + } + } + + // GZIP write not supported by nrrd-js (so use ITK save with compressed = true) + static serializeNrrdCompressed(header, image, filename) { + const nrrdBuffer = SegmentationReader.serializeNrrd(header, image); + + const reader = readImageArrayBuffer(null, nrrdBuffer, 'temp.nrrd'); + reader.then(function(response) { + const writer = writeArrayBuffer( + response.webWorker, + true, + response.image, + filename + ); + writer.then(function(response) { + SegmentationReader.saveFile(new Blob([response.arrayBuffer]), filename); + console.debug('File downloaded: ' + filename); + }); + }); + } + + static serializeNrrd(header, image, filename) { + let nrrdOrg = Object.assign({}, header); + nrrdOrg.buffer = image; + nrrdOrg.data = new Uint16Array(image); + + const nrrdBuffer = nrrd.serialize(nrrdOrg); + if (filename) { + SegmentationReader.saveFile(new Blob([nrrdBuffer]), filename); + console.debug('File downloaded: ' + filename); + } + return nrrdBuffer; + } +} diff --git a/plugins/ohifv3/extension-monai-label/src/utils/SegmentationUtils.tsx b/plugins/ohifv3/extension-monai-label/src/utils/SegmentationUtils.tsx new file mode 100644 index 000000000..6be5582e9 --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/utils/SegmentationUtils.tsx @@ -0,0 +1,57 @@ +import { + getLabelColor, +} from './GenericUtils'; + + +function createSegmentMetadata( + label, + segmentId, + description = '', + newLabelMap = false, +) { + + const labelMeta = { + SegmentedPropertyCategoryCodeSequence: { + CodeValue: 'T-D0050', + CodingSchemeDesignator: 'SRT', + CodeMeaning: 'Tissue', + }, + SegmentNumber: 1, + SegmentLabel: label ? label : 'label-0-1', + SegmentDescription: description, + SegmentAlgorithmType: 'SEMIAUTOMATIC', + SegmentAlgorithmName: 'MONAI', + SegmentedPropertyTypeCodeSequence: { + CodeValue: 'T-D0050', + CodingSchemeDesignator: 'SRT', + CodeMeaning: 'Tissue', + }, + }; + + if (newLabelMap) { + console.debug('Logic to create a new segment'); + } + + const color = getLabelColor(label) + + const rgbColor = []; + for (let key in color) { + rgbColor.push(color[key]); + } + + rgbColor.push(255); + + return { + id: '0+' + segmentId, + color: rgbColor, + labelmapIndex: 0, + name: label, + segmentIndex: segmentId, + description: description, + meta: labelMeta, + }; +} + +export { + createSegmentMetadata, +}; diff --git a/plugins/ohifv3/extension-monai-label/src/utils/addToolInstance.ts b/plugins/ohifv3/extension-monai-label/src/utils/addToolInstance.ts new file mode 100644 index 000000000..889926d81 --- /dev/null +++ b/plugins/ohifv3/extension-monai-label/src/utils/addToolInstance.ts @@ -0,0 +1,12 @@ +import { addTool } from '@cornerstonejs/tools'; + +export default function addToolInstance( + name: string, + toolClass, + configuration? +): void { + class InstanceClass extends toolClass { + static toolName = name; + } + addTool(InstanceClass); +} diff --git a/plugins/ohifv3/images/ohifv3.png b/plugins/ohifv3/images/ohifv3.png new file mode 100644 index 0000000000000000000000000000000000000000..0679559e59f6fc0a942ffd7a82c7769577a9d494 GIT binary patch literal 408112 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�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 z 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

{A4qT7_55GQm|5iKk!>oJd4 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%0AU@DcYiA3!Dl_J z7odO5Q~Q@G5lTidqYXzcY}`!xAku`oE=VNxHCU_J&CjH;{;xSrq;;CQykszKxg^Gy z<1^&#%bMXKVrqm_1=i_3*SP~e-Td}+`jXlSNJrP*>Q%YtIUd2UR_{7j@&kkj8+rDu zjEsTQK3a-CiQCTsUM=DP;@}+3!*R)ZEy15IQ>=*ysnur#UsV?j7?R&p9W%9`961+# zqFx!>1EysF5pc-Jle;$OmIPxWXR_$u+Ce+V|Cd2O zR98XR$}|85=>9*RU;qvSnJti5DWY<7rNT)Gks0~E(B47hb7z6i39ipgx%V91&UUq! zzF3gs#2ZEOA+QoCLY#Yv2UX*LiO3~I==r(7dl8``L|nvcNfT-GTLj=CDWmV-6l-#l zMZK<^8UOo<*fi1o9ZCcY5nC21r5hb}^Src{>p3>IGOewV!|``TRIb1D*@ z9iHT);QA2DrBwJ<@WQWXZ4uj9+l1a^gNWfFr7Rrif?Lwz)gBQI;8(#Qk0rC(a?wm8 z2Qa?zvMN z3&dAhB1*LyVeAETN2QrBPj5|@1};`f$1W*S`n?uD8~^-v>{_uV~ASsD1Bmu}ciE z%M1T+mA=nlS9dY%8pf$}uf*>yL=2Ej{;uv~9A18lSs{T`9IO@{n%Y6Oz5XG&oxufbWHz-V#ZN$!QCrU{{>E#`cDg0Lf zx8rWmR&8{7LDh+2o=nwmGkZCcI~}h07A93Gj93_-YE0`UchIW_jbJ~1{1|v&1H>1R zQ0KCY$Xs-QWC9+cSW}Up7W$)`b7#l(--6JaLflgmW7)Q(jtIc0T0MUn5}Jz+E&zB; z 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 O0@gRXTyyc-z5fNbTW|XS literal 0 HcmV?d00001 diff --git a/plugins/ohifv3/mode-monai-label/.gitignore b/plugins/ohifv3/mode-monai-label/.gitignore new file mode 100644 index 000000000..67045665d --- /dev/null +++ b/plugins/ohifv3/mode-monai-label/.gitignore @@ -0,0 +1,104 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and *not* Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port diff --git a/plugins/ohifv3/mode-monai-label/.prettierrc b/plugins/ohifv3/mode-monai-label/.prettierrc new file mode 100644 index 000000000..b80ec6b34 --- /dev/null +++ b/plugins/ohifv3/mode-monai-label/.prettierrc @@ -0,0 +1,8 @@ +{ + "trailingComma": "es5", + "printWidth": 80, + "proseWrap": "always", + "tabWidth": 2, + "semi": true, + "singleQuote": true +} diff --git a/plugins/ohifv3/mode-monai-label/.webpack/webpack.prod.js b/plugins/ohifv3/mode-monai-label/.webpack/webpack.prod.js new file mode 100644 index 000000000..163392a69 --- /dev/null +++ b/plugins/ohifv3/mode-monai-label/.webpack/webpack.prod.js @@ -0,0 +1,62 @@ +const path = require('path'); +const pkg = require('../package.json'); + +const outputFile = 'index.umd.js'; +const rootDir = path.resolve(__dirname, '../'); +const outputFolder = path.join(__dirname, `../dist/umd/${pkg.name}/`); + +// Todo: add ESM build for the mode in addition to umd build +const config = { + mode: 'production', + entry: rootDir + '/' + pkg.module, + devtool: 'source-map', + output: { + path: outputFolder, + filename: outputFile, + library: pkg.name, + libraryTarget: 'umd', + chunkFilename: '[name].chunk.js', + umdNamedDefine: true, + globalObject: "typeof self !== 'undefined' ? self : this", + }, + externals: [ + { + react: { + root: 'React', + commonjs2: 'react', + commonjs: 'react', + amd: 'react', + }, + '@ohif/core': { + commonjs2: '@ohif/core', + commonjs: '@ohif/core', + amd: '@ohif/core', + root: '@ohif/core', + }, + '@ohif/ui': { + commonjs2: '@ohif/ui', + commonjs: '@ohif/ui', + amd: '@ohif/ui', + root: '@ohif/ui', + }, + }, + ], + module: { + rules: [ + { + test: /(\.jsx|\.js|\.tsx|\.ts)$/, + loader: 'babel-loader', + exclude: /(node_modules|bower_components)/, + resolve: { + extensions: ['.js', '.jsx', '.ts', '.tsx'], + }, + }, + ], + }, + resolve: { + modules: [path.resolve('./node_modules'), path.resolve('./src')], + extensions: ['.json', '.js', '.jsx', '.tsx', '.ts'], + }, +}; + +module.exports = config; diff --git a/plugins/ohifv3/mode-monai-label/LICENSE b/plugins/ohifv3/mode-monai-label/LICENSE new file mode 100644 index 000000000..68d51b46c --- /dev/null +++ b/plugins/ohifv3/mode-monai-label/LICENSE @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) 2023 mode-monai-label (adiazpinto@nvidia.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/plugins/ohifv3/mode-monai-label/README.md b/plugins/ohifv3/mode-monai-label/README.md new file mode 100644 index 000000000..e0ce2d4de --- /dev/null +++ b/plugins/ohifv3/mode-monai-label/README.md @@ -0,0 +1,7 @@ +# mode-monai-label +## Description +OHIFv3 mode for MONAI Label +## Author +OHIF,NVIDIA,KCL +## License +MIT diff --git a/plugins/ohifv3/mode-monai-label/babel.config.js b/plugins/ohifv3/mode-monai-label/babel.config.js new file mode 100644 index 000000000..92fbbdeaf --- /dev/null +++ b/plugins/ohifv3/mode-monai-label/babel.config.js @@ -0,0 +1,44 @@ +module.exports = { + plugins: ['inline-react-svg', '@babel/plugin-proposal-class-properties'], + env: { + test: { + presets: [ + [ + // TODO: https://babeljs.io/blog/2019/03/19/7.4.0#migration-from-core-js-2 + '@babel/preset-env', + { + modules: 'commonjs', + debug: false, + }, + "@babel/preset-typescript", + ], + '@babel/preset-react', + ], + plugins: [ + '@babel/plugin-proposal-object-rest-spread', + '@babel/plugin-syntax-dynamic-import', + '@babel/plugin-transform-regenerator', + '@babel/plugin-transform-runtime', + ], + }, + production: { + presets: [ + // WebPack handles ES6 --> Target Syntax + ['@babel/preset-env', { modules: false }], + '@babel/preset-react', + "@babel/preset-typescript", + ], + ignore: ['**/*.test.jsx', '**/*.test.js', '__snapshots__', '__tests__'], + }, + development: { + presets: [ + // WebPack handles ES6 --> Target Syntax + ['@babel/preset-env', { modules: false }], + '@babel/preset-react', + "@babel/preset-typescript", + ], + plugins: ['react-hot-loader/babel'], + ignore: ['**/*.test.jsx', '**/*.test.js', '__snapshots__', '__tests__'], + }, + }, +}; diff --git a/plugins/ohifv3/mode-monai-label/package.json b/plugins/ohifv3/mode-monai-label/package.json new file mode 100644 index 000000000..ecbae9558 --- /dev/null +++ b/plugins/ohifv3/mode-monai-label/package.json @@ -0,0 +1,64 @@ +{ + "name": "@ohif/mode-monai-label", + "version": "0.0.1", + "description": "OHIFv3 mode for MONAI Label", + "author": "OHIF,NVIDIA,KCL", + "license": "MIT", + "main": "dist/umd/mode-monai-label/index.umd.js", + "files": [ + "dist/**", + "public/**", + "README.md" + ], + "repository": "OHIF/Viewers", + "keywords": [ + "ohif-mode" + ], + "module": "src/index.tsx", + "engines": { + "node": ">=14", + "npm": ">=6", + "yarn": ">=1.16.0" + }, + "scripts": { + "dev": "cross-env NODE_ENV=development webpack --config .webpack/webpack.dev.js --watch --output-pathinfo", + "dev:cornerstone": "yarn run dev", + "build": "cross-env NODE_ENV=production webpack --config .webpack/webpack.prod.js", + "build:package": "yarn run build", + "start": "yarn run dev", + "test:unit": "jest --watchAll", + "test:unit:ci": "jest --ci --runInBand --collectCoverage --passWithNoTests" + }, + "peerDependencies": { + "@ohif/core": "^3.0.0" + }, + "dependencies": { + "@babel/runtime": "^7.20.13" + }, + "devDependencies": { + "@babel/core": "^7.21.4", + "@babel/plugin-proposal-class-properties": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.17.3", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.16.7", + "@babel/plugin-transform-regenerator": "^7.16.7", + "@babel/plugin-transform-runtime": "^7.17.0", + "@babel/plugin-transform-typescript": "^7.13.0", + "@babel/preset-env": "^7.16.11", + "@babel/preset-react": "^7.16.7", + "@babel/preset-typescript": "^7.13.0", + "babel-eslint": "^8.0.3", + "babel-loader": "^8.0.0-beta.4", + "babel-plugin-inline-react-svg": "^2.0.1", + "clean-webpack-plugin": "^4.0.0", + "copy-webpack-plugin": "^10.2.0", + "cross-env": "^7.0.3", + "dotenv": "^14.1.0", + "eslint": "^5.0.1", + "eslint-loader": "^2.0.0", + "webpack": "^5.50.0", + "webpack-merge": "^5.7.3", + "webpack-cli": "^4.7.2" + } +} diff --git a/plugins/ohifv3/mode-monai-label/src/id.js b/plugins/ohifv3/mode-monai-label/src/id.js new file mode 100644 index 000000000..ebe5acd98 --- /dev/null +++ b/plugins/ohifv3/mode-monai-label/src/id.js @@ -0,0 +1,5 @@ +import packageJson from '../package.json'; + +const id = packageJson.name; + +export { id }; diff --git a/plugins/ohifv3/mode-monai-label/src/index.tsx b/plugins/ohifv3/mode-monai-label/src/index.tsx new file mode 100644 index 000000000..f832dd869 --- /dev/null +++ b/plugins/ohifv3/mode-monai-label/src/index.tsx @@ -0,0 +1,206 @@ +import { hotkeys } from '@ohif/core'; +import toolbarButtons from './toolbarButtons.js'; +import { id } from './id.js'; +import initToolGroups from './initToolGroups.js'; + +const ohif = { + layout: '@ohif/extension-default.layoutTemplateModule.viewerLayout', + sopClassHandler: '@ohif/extension-default.sopClassHandlerModule.stack', + hangingProtocol: '@ohif/extension-default.hangingProtocolModule.default', + leftPanel: '@ohif/extension-default.panelModule.seriesList', +}; + +const monailabel = { + monaiLabel: '@ohif/extension-monai-label.panelModule.monailabel', +} + +const cornerstone = { + viewport: '@ohif/extension-cornerstone.viewportModule.cornerstone', +}; + +const dicomSeg = { + sopClassHandler: + '@ohif/extension-cornerstone-dicom-seg.sopClassHandlerModule.dicom-seg', + viewport: '@ohif/extension-cornerstone-dicom-seg.viewportModule.dicom-seg', + panel: '@ohif/extension-cornerstone-dicom-seg.panelModule.panelSegmentation', +}; + +/** + * Just two dependencies to be able to render a viewport with panels in order + * to make sure that the mode is working. + */ +const extensionDependencies = { + '@ohif/extension-default': '^3.0.0', + '@ohif/extension-cornerstone': '^3.0.0', + '@ohif/extension-cornerstone-dicom-seg': '^3.0.0', + '@ohif/extension-test': '^0.0.1', + '@ohif/extension-monai-label': '^0.0.1', +}; + +function modeFactory({ modeConfiguration }) { + return { + /** + * Mode ID, which should be unique among modes used by the viewer. This ID + * is used to identify the mode in the viewer's state. + */ + id, + routeName: 'monai-label', + /** + * Mode name, which is displayed in the viewer's UI in the workList, for the + * user to select the mode. + */ + displayName: 'MONAI Label', + /** + * Runs when the Mode Route is mounted to the DOM. Usually used to initialize + * Services and other resources. + */ + onModeEnter: ({ servicesManager, extensionManager, commandsManager }) => { + const { + measurementService, + toolbarService, + toolGroupService, + customizationService, + } = servicesManager.services; + + measurementService.clearMeasurements(); + + // Init Default and SR ToolGroups + initToolGroups(extensionManager, toolGroupService, commandsManager); + + // init customizations + customizationService.addModeCustomizations([ + '@ohif/extension-test.customizationModule.custom-context-menu', + ]); + + let unsubscribe; + + const activateTool = () => { + toolbarService.recordInteraction({ + groupId: 'WindowLevel', + itemId: 'WindowLevel', + interactionType: 'tool', + commands: [ + { + commandName: 'setToolActive', + commandOptions: { + toolName: 'WindowLevel', + }, + context: 'CORNERSTONE', + }, + ], + }); + + // We don't need to reset the active tool whenever a viewport is getting + // added to the toolGroup. + unsubscribe(); + }; + + // Since we only have one viewport for the basic cs3d mode and it has + // only one hanging protocol, we can just use the first viewport + ({ unsubscribe } = toolGroupService.subscribe( + toolGroupService.EVENTS.VIEWPORT_ADDED, + activateTool + )); + + toolbarService.init(extensionManager); + toolbarService.addButtons(toolbarButtons); + toolbarService.createButtonSection('primary', [ + 'MeasurementTools', + 'Zoom', + 'WindowLevel', + 'Pan', + 'Capture', + 'Layout', + 'MPR', + 'Crosshairs', + 'MoreTools', + ]); + }, + onModeExit: ({ servicesManager }) => { + const { + toolGroupService, + syncGroupService, + segmentationService, + cornerstoneViewportService, + } = servicesManager.services; + + toolGroupService.destroy(); + syncGroupService.destroy(); + segmentationService.destroy(); + cornerstoneViewportService.destroy(); + }, + /** */ + validationTags: { + study: [], + series: [], + }, + /** + * A boolean return value that indicates whether the mode is valid for the + * modalities of the selected studies. For instance a PET/CT mode should be + */ + isValidMode: function ({ modalities }) { + const modalities_list = modalities.split('\\'); + const isValid = + modalities_list.includes('CT') || modalities_list.includes('MR'); + // Only CT or MR modalities + return isValid; + }, + /** + * Mode Routes are used to define the mode's behavior. A list of Mode Route + * that includes the mode's path and the layout to be used. The layout will + * include the components that are used in the layout. For instance, if the + * default layoutTemplate is used (id: '@ohif/extension-default.layoutTemplateModule.viewerLayout') + * it will include the leftPanels, rightPanels, and viewports. However, if + * you define another layoutTemplate that includes a Footer for instance, + * you should provide the Footer component here too. Note: We use Strings + * to reference the component's ID as they are registered in the internal + * ExtensionManager. The template for the string is: + * `${extensionId}.{moduleType}.${componentId}`. + */ + routes: [ + { + path: 'monai-label', + layoutTemplate: ({ location, servicesManager }) => { + return { + id: ohif.layout, + props: { + rightPanelDefaultClosed: false, + /* leftPanelDefaultClosed: true, */ + leftPanels: [ohif.leftPanel], + rightPanels: [monailabel.monaiLabel], + viewports: [ + { + namespace: cornerstone.viewport, + displaySetsToDisplay: [ohif.sopClassHandler], + }, + { + namespace: dicomSeg.viewport, + displaySetsToDisplay: [dicomSeg.sopClassHandler], + }, + ], + }, + }; + }, + }, + ], + /** List of extensions that are used by the mode */ + extensions: extensionDependencies, + /** HangingProtocol used by the mode */ + hangingProtocol: 'mpr', + // hangingProtocol: [''], + /** SopClassHandlers used by the mode */ + sopClassHandlers: [ + dicomSeg.sopClassHandler, + ohif.sopClassHandler, + ] /** hotkeys for mode */, + hotkeys: [...hotkeys.defaults.hotkeyBindings], + }; +} + +const mode = { + id, + modeFactory, + extensionDependencies, +}; + +export default mode; diff --git a/plugins/ohifv3/mode-monai-label/src/initToolGroups.js b/plugins/ohifv3/mode-monai-label/src/initToolGroups.js new file mode 100644 index 000000000..81bc09eb6 --- /dev/null +++ b/plugins/ohifv3/mode-monai-label/src/initToolGroups.js @@ -0,0 +1,209 @@ +const brushInstanceNames = { + CircularBrush: 'CircularBrush', + CircularEraser: 'CircularEraser', + SphereBrush: 'SphereBrush', + SphereEraser: 'SphereEraser', + ThresholdCircularBrush: 'ThresholdCircularBrush', + ThresholdSphereBrush: 'ThresholdSphereBrush', +}; + +const brushStrategies = { + [brushInstanceNames.CircularBrush]: 'FILL_INSIDE_CIRCLE', + [brushInstanceNames.CircularEraser]: 'ERASE_INSIDE_CIRCLE', + [brushInstanceNames.SphereBrush]: 'FILL_INSIDE_SPHERE', + [brushInstanceNames.SphereEraser]: 'ERASE_INSIDE_SPHERE', + [brushInstanceNames.ThresholdCircularBrush]: 'THRESHOLD_INSIDE_CIRCLE', + [brushInstanceNames.ThresholdSphereBrush]: 'THRESHOLD_INSIDE_SPHERE', +}; + +function initDefaultToolGroup( + extensionManager, + toolGroupService, + commandsManager, + toolGroupId +) { + const utilityModule = extensionManager.getModuleEntry( + '@ohif/extension-cornerstone.utilityModule.tools' + ); + + const { toolNames, Enums } = utilityModule.exports; + + const tools = { + active: [ + { + toolName: toolNames.WindowLevel, + bindings: [{ mouseButton: Enums.MouseBindings.Primary }], + }, + { + toolName: toolNames.Pan, + bindings: [{ mouseButton: Enums.MouseBindings.Auxiliary }], + }, + { + toolName: toolNames.Zoom, + bindings: [{ mouseButton: Enums.MouseBindings.Secondary }], + }, + { toolName: toolNames.StackScrollMouseWheel, bindings: [] }, + ], + passive: [ + { toolName: toolNames.CircleScissors }, + { toolName: toolNames.RectangleScissors }, + { toolName: toolNames.SphereScissors }, + { + toolName: brushInstanceNames.CircularBrush, + parentTool: 'Brush', + configuration: { + activeStrategy: brushStrategies.CircularBrush, + }, + }, + { + toolName: brushInstanceNames.CircularEraser, + parentTool: 'Brush', + configuration: { + activeStrategy: brushStrategies.CircularEraser, + }, + }, + { + toolName: brushInstanceNames.SphereEraser, + parentTool: 'Brush', + configuration: { + activeStrategy: brushStrategies.SphereEraser, + }, + }, + { + toolName: brushInstanceNames.SphereBrush, + parentTool: 'Brush', + configuration: { + activeStrategy: brushStrategies.SphereBrush, + }, + }, + { + toolName: brushInstanceNames.ThresholdCircularBrush, + parentTool: 'Brush', + configuration: { + activeStrategy: brushStrategies.ThresholdCircularBrush, + }, + }, + { + toolName: brushInstanceNames.ThresholdSphereBrush, + parentTool: 'Brush', + configuration: { + activeStrategy: brushStrategies.ThresholdSphereBrush, + }, + }, + { toolName: toolNames.StackScroll }, + { toolName: toolNames.Magnify }, + { toolName: toolNames.SegmentationDisplay }, + { toolName: 'ProbeMONAILabel' }, + ], + // enabled + // disabled + disabled: [{ toolName: toolNames.ReferenceLines }], + }; + + toolGroupService.createToolGroupAndAddTools(toolGroupId, tools); +} + +function initMPRToolGroup(extensionManager, toolGroupService, commandsManager) { + const utilityModule = extensionManager.getModuleEntry( + '@ohif/extension-cornerstone.utilityModule.tools' + ); + + const { toolNames, Enums } = utilityModule.exports; + + const tools = { + active: [ + { + toolName: toolNames.WindowLevel, + bindings: [{ mouseButton: Enums.MouseBindings.Primary }], + }, + { + toolName: toolNames.Pan, + bindings: [{ mouseButton: Enums.MouseBindings.Auxiliary }], + }, + { + toolName: toolNames.Zoom, + bindings: [{ mouseButton: Enums.MouseBindings.Secondary }], + }, + { toolName: toolNames.StackScrollMouseWheel, bindings: [] }, + ], + passive: [ + { toolName: toolNames.CircleScissors }, + { toolName: toolNames.RectangleScissors }, + { toolName: toolNames.SphereScissors }, + { + toolName: brushInstanceNames.CircularBrush, + parentTool: 'Brush', + configuration: { + activeStrategy: brushStrategies.CircularBrush, + }, + }, + { + toolName: brushInstanceNames.CircularEraser, + parentTool: 'Brush', + configuration: { + activeStrategy: brushStrategies.CircularEraser, + }, + }, + { + toolName: brushInstanceNames.SphereEraser, + parentTool: 'Brush', + configuration: { + activeStrategy: brushStrategies.SphereEraser, + }, + }, + { + toolName: brushInstanceNames.SphereBrush, + parentTool: 'Brush', + configuration: { + activeStrategy: brushStrategies.SphereBrush, + }, + }, + { + toolName: brushInstanceNames.ThresholdCircularBrush, + parentTool: 'Brush', + configuration: { + activeStrategy: brushStrategies.ThresholdCircularBrush, + }, + }, + { + toolName: brushInstanceNames.ThresholdSphereBrush, + parentTool: 'Brush', + configuration: { + activeStrategy: brushStrategies.ThresholdSphereBrush, + }, + }, + { toolName: toolNames.SegmentationDisplay }, + { toolName: 'ProbeMONAILabel' }, + { toolName: 'ProbeMONAILabel' }, + ], + disabled: [ + { + toolName: toolNames.Crosshairs, + configuration: { + viewportIndicators: false, + autoPan: { + enabled: false, + panSize: 10, + }, + }, + }, + { toolName: toolNames.ReferenceLines }, + ], + // enabled + // disabled + }; + + toolGroupService.createToolGroupAndAddTools('mpr', tools); +} + +function initToolGroups(extensionManager, toolGroupService, commandsManager) { + initDefaultToolGroup( + extensionManager, + toolGroupService, + commandsManager, + 'default' + ); + initMPRToolGroup(extensionManager, toolGroupService, commandsManager); +} + +export default initToolGroups; diff --git a/plugins/ohifv3/mode-monai-label/src/toolbarButtons.js b/plugins/ohifv3/mode-monai-label/src/toolbarButtons.js new file mode 100644 index 000000000..92de37e89 --- /dev/null +++ b/plugins/ohifv3/mode-monai-label/src/toolbarButtons.js @@ -0,0 +1,608 @@ +// TODO: torn, can either bake this here; or have to create a whole new button type +// Only ways that you can pass in a custom React component for render :l +import { + // ExpandableToolbarButton, + // ListMenu, + WindowLevelMenuItem, +} from '@ohif/ui'; +import { defaults } from '@ohif/core'; + +const { windowLevelPresets } = defaults; +/** + * + * @param {*} type - 'tool' | 'action' | 'toggle' + * @param {*} id + * @param {*} icon + * @param {*} label + */ +function _createButton(type, id, icon, label, commands, tooltip, uiType) { + return { + id, + icon, + label, + type, + commands, + tooltip, + uiType, + }; +} + +const _createActionButton = _createButton.bind(null, 'action'); +const _createToggleButton = _createButton.bind(null, 'toggle'); +const _createToolButton = _createButton.bind(null, 'tool'); + +/** + * + * @param {*} preset - preset number (from above import) + * @param {*} title + * @param {*} subtitle + */ +function _createWwwcPreset(preset, title, subtitle) { + return { + id: preset.toString(), + title, + subtitle, + type: 'action', + commands: [ + { + commandName: 'setWindowLevel', + commandOptions: { + ...windowLevelPresets[preset], + }, + context: 'CORNERSTONE', + }, + ], + }; +} + +const toolGroupIds = ['default', 'mpr', 'SRToolGroup']; + +/** + * Creates an array of 'setToolActive' commands for the given toolName - one for + * each toolGroupId specified in toolGroupIds. + * @param {string} toolName + * @returns {Array} an array of 'setToolActive' commands + */ +function _createSetToolActiveCommands(toolName) { + const temp = toolGroupIds.map(toolGroupId => ({ + commandName: 'setToolActive', + commandOptions: { + toolGroupId, + toolName, + }, + context: 'CORNERSTONE', + })); + return temp; +} + +const toolbarButtons = [ + // Measurement + { + id: 'MeasurementTools', + type: 'ohif.splitButton', + props: { + groupId: 'MeasurementTools', + isRadio: true, // ? + // Switch? + primary: _createToolButton( + 'Length', + 'tool-length', + 'Length', + [ + { + commandName: 'setToolActive', + commandOptions: { + toolName: 'Length', + }, + context: 'CORNERSTONE', + }, + { + commandName: 'setToolActive', + commandOptions: { + toolName: 'SRLength', + toolGroupId: 'SRToolGroup', + }, + // we can use the setToolActive command for this from Cornerstone commandsModule + context: 'CORNERSTONE', + }, + ], + 'Length' + ), + secondary: { + icon: 'chevron-down', + label: '', + isActive: true, + tooltip: 'More Measure Tools', + }, + items: [ + _createToolButton( + 'Length', + 'tool-length', + 'Length', + [ + { + commandName: 'setToolActive', + commandOptions: { + toolName: 'Length', + }, + context: 'CORNERSTONE', + }, + { + commandName: 'setToolActive', + commandOptions: { + toolName: 'SRLength', + toolGroupId: 'SRToolGroup', + }, + // we can use the setToolActive command for this from Cornerstone commandsModule + context: 'CORNERSTONE', + }, + ], + 'Length Tool' + ), + _createToolButton( + 'Bidirectional', + 'tool-bidirectional', + 'Bidirectional', + [ + { + commandName: 'setToolActive', + commandOptions: { + toolName: 'Bidirectional', + }, + context: 'CORNERSTONE', + }, + { + commandName: 'setToolActive', + commandOptions: { + toolName: 'SRBidirectional', + toolGroupId: 'SRToolGroup', + }, + context: 'CORNERSTONE', + }, + ], + 'Bidirectional Tool' + ), + _createToolButton( + 'ArrowAnnotate', + 'tool-annotate', + 'Annotation', + [ + { + commandName: 'setToolActive', + commandOptions: { + toolName: 'ArrowAnnotate', + }, + context: 'CORNERSTONE', + }, + { + commandName: 'setToolActive', + commandOptions: { + toolName: 'SRArrowAnnotate', + toolGroupId: 'SRToolGroup', + }, + context: 'CORNERSTONE', + }, + ], + 'Arrow Annotate' + ), + _createToolButton( + 'EllipticalROI', + 'tool-elipse', + 'Ellipse', + [ + { + commandName: 'setToolActive', + commandOptions: { + toolName: 'EllipticalROI', + }, + context: 'CORNERSTONE', + }, + { + commandName: 'setToolActive', + commandOptions: { + toolName: 'SREllipticalROI', + toolGroupId: 'SRToolGroup', + }, + context: 'CORNERSTONE', + }, + ], + 'Ellipse Tool' + ), + _createToolButton( + 'CircleROI', + 'tool-circle', + 'Circle', + [ + { + commandName: 'setToolActive', + commandOptions: { + toolName: 'CircleROI', + }, + context: 'CORNERSTONE', + }, + { + commandName: 'setToolActive', + commandOptions: { + toolName: 'SRCircleROI', + toolGroupId: 'SRToolGroup', + }, + context: 'CORNERSTONE', + }, + ], + 'Circle Tool' + ), + ], + }, + }, + // Zoom.. + { + id: 'Zoom', + type: 'ohif.radioGroup', + props: { + type: 'tool', + icon: 'tool-zoom', + label: 'Zoom', + commands: _createSetToolActiveCommands('Zoom'), + }, + }, + // Window Level + Presets... + { + id: 'WindowLevel', + type: 'ohif.splitButton', + props: { + groupId: 'WindowLevel', + primary: _createToolButton( + 'WindowLevel', + 'tool-window-level', + 'Window Level', + [ + { + commandName: 'setToolActive', + commandOptions: { + toolName: 'WindowLevel', + }, + context: 'CORNERSTONE', + }, + ], + 'Window Level' + ), + secondary: { + icon: 'chevron-down', + label: 'W/L Manual', + isActive: true, + tooltip: 'W/L Presets', + }, + isAction: true, // ? + renderer: WindowLevelMenuItem, + items: [ + _createWwwcPreset(1, 'Soft tissue', '400 / 40'), + _createWwwcPreset(2, 'Lung', '1500 / -600'), + _createWwwcPreset(3, 'Liver', '150 / 90'), + _createWwwcPreset(4, 'Bone', '2500 / 480'), + _createWwwcPreset(5, 'Brain', '80 / 40'), + ], + }, + }, + // Pan... + { + id: 'Pan', + type: 'ohif.radioGroup', + props: { + type: 'tool', + icon: 'tool-move', + label: 'Pan', + commands: _createSetToolActiveCommands('Pan'), + }, + }, + { + id: 'Capture', + type: 'ohif.action', + props: { + icon: 'tool-capture', + label: 'Capture', + type: 'action', + commands: [ + { + commandName: 'showDownloadViewportModal', + commandOptions: {}, + context: 'CORNERSTONE', + }, + ], + }, + }, + { + id: 'Layout', + type: 'ohif.layoutSelector', + props: { + rows: 3, + columns: 3, + }, + }, + { + id: 'MPR', + type: 'ohif.action', + props: { + type: 'toggle', + icon: 'icon-mpr', + label: 'MPR', + commands: [ + { + commandName: 'toggleHangingProtocol', + commandOptions: { + protocolId: 'mpr', + }, + context: 'DEFAULT', + }, + ], + }, + }, + { + id: 'Crosshairs', + type: 'ohif.radioGroup', + props: { + type: 'tool', + icon: 'tool-crosshair', + label: 'Crosshairs', + commands: [ + { + commandName: 'setToolActive', + commandOptions: { + toolName: 'Crosshairs', + toolGroupId: 'mpr', + }, + context: 'CORNERSTONE', + }, + ], + }, + }, + // More... + { + id: 'MoreTools', + type: 'ohif.splitButton', + props: { + isRadio: true, // ? + groupId: 'MoreTools', + primary: _createActionButton( + 'Reset', + 'tool-reset', + 'Reset View', + [ + { + commandName: 'resetViewport', + commandOptions: {}, + context: 'CORNERSTONE', + }, + ], + 'Reset' + ), + secondary: { + icon: 'chevron-down', + label: '', + isActive: true, + tooltip: 'More Tools', + }, + items: [ + _createActionButton( + 'Reset', + 'tool-reset', + 'Reset View', + [ + { + commandName: 'resetViewport', + commandOptions: {}, + context: 'CORNERSTONE', + }, + ], + 'Reset' + ), + _createActionButton( + 'rotate-right', + 'tool-rotate-right', + 'Rotate Right', + [ + { + commandName: 'rotateViewportCW', + commandOptions: {}, + context: 'CORNERSTONE', + }, + ], + 'Rotate +90' + ), + _createActionButton( + 'flip-horizontal', + 'tool-flip-horizontal', + 'Flip Horizontally', + [ + { + commandName: 'flipViewportHorizontal', + commandOptions: {}, + context: 'CORNERSTONE', + }, + ], + 'Flip Horizontal' + ), + _createToggleButton('StackImageSync', 'link', 'Stack Image Sync', [ + { + commandName: 'toggleStackImageSync', + commandOptions: {}, + context: 'CORNERSTONE', + }, + ]), + _createToggleButton( + 'ReferenceLines', + 'tool-referenceLines', // change this with the new icon + 'Reference Lines', + [ + { + commandName: 'toggleReferenceLines', + commandOptions: {}, + context: 'CORNERSTONE', + }, + ] + ), + _createToolButton( + 'StackScroll', + 'tool-stack-scroll', + 'Stack Scroll', + [ + { + commandName: 'setToolActive', + commandOptions: { + toolName: 'StackScroll', + }, + context: 'CORNERSTONE', + }, + ], + 'Stack Scroll' + ), + _createActionButton( + 'invert', + 'tool-invert', + 'Invert', + [ + { + commandName: 'invertViewport', + commandOptions: {}, + context: 'CORNERSTONE', + }, + ], + 'Invert Colors' + ), + _createToolButton( + 'Probe', + 'tool-probe', + 'Probe', + [ + { + commandName: 'setToolActive', + commandOptions: { + toolName: 'DragProbe', + }, + context: 'CORNERSTONE', + }, + ], + 'Probe' + ), + _createToggleButton( + 'cine', + 'tool-cine', + 'Cine', + [ + { + commandName: 'toggleCine', + context: 'CORNERSTONE', + }, + ], + 'Cine' + ), + _createToolButton( + 'Angle', + 'tool-angle', + 'Angle', + [ + { + commandName: 'setToolActive', + commandOptions: { + toolName: 'Angle', + }, + context: 'CORNERSTONE', + }, + ], + 'Angle' + ), + + // Next two tools can be added once icons are added + // _createToolButton( + // 'Cobb Angle', + // 'tool-cobb-angle', + // 'Cobb Angle', + // [ + // { + // commandName: 'setToolActive', + // commandOptions: { + // toolName: 'CobbAngle', + // }, + // context: 'CORNERSTONE', + // }, + // ], + // 'Cobb Angle' + // ), + // _createToolButton( + // 'Planar Freehand ROI', + // 'tool-freehand', + // 'PlanarFreehandROI', + // [ + // { + // commandName: 'setToolActive', + // commandOptions: { + // toolName: 'PlanarFreehandROI', + // }, + // context: 'CORNERSTONE', + // }, + // ], + // 'Planar Freehand ROI' + // ), + _createToolButton( + 'Magnify', + 'tool-magnify', + 'Magnify', + [ + { + commandName: 'setToolActive', + commandOptions: { + toolName: 'Magnify', + }, + context: 'CORNERSTONE', + }, + ], + 'Magnify' + ), + _createToolButton( + 'Rectangle', + 'tool-rectangle', + 'Rectangle', + [ + { + commandName: 'setToolActive', + commandOptions: { + toolName: 'RectangleROI', + }, + context: 'CORNERSTONE', + }, + ], + 'Rectangle' + ), + _createToolButton( + 'CalibrationLine', + 'tool-calibration', + 'Calibration', + [ + { + commandName: 'setToolActive', + commandOptions: { + toolName: 'CalibrationLine', + }, + context: 'CORNERSTONE', + }, + ], + 'Calibration Line' + ), + _createActionButton( + 'TagBrowser', + 'list-bullets', + 'Dicom Tag Browser', + [ + { + commandName: 'openDICOMTagViewer', + commandOptions: {}, + context: 'DEFAULT', + }, + ], + 'Dicom Tag Browser' + ), + ], + }, + }, +]; + +export default toolbarButtons; diff --git a/plugins/ohifv3/requirements.sh b/plugins/ohifv3/requirements.sh new file mode 100755 index 000000000..064952153 --- /dev/null +++ b/plugins/ohifv3/requirements.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +# Copyright (c) MONAI Consortium +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +if which yarn >/dev/null; then + echo "node/yarn is already installed" +else + echo "installing yarn..." + curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - + echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list + apt update + apt-get install yarn -y +fi diff --git a/sample-apps/radiology/lib/infers/deepedit.py b/sample-apps/radiology/lib/infers/deepedit.py index 6a182ed4d..afc755c98 100644 --- a/sample-apps/radiology/lib/infers/deepedit.py +++ b/sample-apps/radiology/lib/infers/deepedit.py @@ -8,9 +8,10 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. - +import logging from typing import Callable, Sequence, Union +from lib.transforms.transforms import GetCentroidsd from monai.apps.deepedit.transforms import ( AddGuidanceFromPointsDeepEditd, AddGuidanceSignalDeepEditd, @@ -35,6 +36,8 @@ from monailabel.tasks.infer.basic_infer import BasicInferTask from monailabel.transform.post import Restored +logger = logging.getLogger(__name__) + class DeepEdit(BasicInferTask): """ @@ -124,4 +127,5 @@ def post_transforms(self, data=None) -> Sequence[Callable]: ref_image="image", config_labels=self.labels if data.get("restore_label_idx", False) else None, ), + GetCentroidsd(keys="pred", centroids_key="centroids"), ] diff --git a/sample-apps/radiology/lib/infers/segmentation.py b/sample-apps/radiology/lib/infers/segmentation.py index 1eadab540..b10c9f499 100644 --- a/sample-apps/radiology/lib/infers/segmentation.py +++ b/sample-apps/radiology/lib/infers/segmentation.py @@ -11,6 +11,7 @@ from typing import Callable, Sequence +from lib.transforms.transforms import GetCentroidsd from monai.inferers import Inferer, SlidingWindowInferer from monai.transforms import ( Activationsd, @@ -93,11 +94,14 @@ def post_transforms(self, data=None) -> Sequence[Callable]: if data and data.get("largest_cc", False): t.append(KeepLargestConnectedComponentd(keys="pred")) - t.append( - Restored( - keys="pred", - ref_image="image", - config_labels=self.labels if data.get("restore_label_idx", False) else None, - ) + t.extend( + [ + Restored( + keys="pred", + ref_image="image", + config_labels=self.labels if data.get("restore_label_idx", False) else None, + ), + GetCentroidsd(keys="pred", centroids_key="centroids"), + ] ) return t diff --git a/sample-apps/radiology/lib/transforms/transforms.py b/sample-apps/radiology/lib/transforms/transforms.py index bc0e6719a..9dcb44b3f 100644 --- a/sample-apps/radiology/lib/transforms/transforms.py +++ b/sample-apps/radiology/lib/transforms/transforms.py @@ -132,7 +132,6 @@ def _get_centroids(self, label): centre.append(avg_indices) c[f"label_{int(seg_class)}"] = [int(seg_class), centre[-3], centre[-2], centre[-1]] centroids.append(c) - return centroids def __call__(self, data): diff --git a/tests/unit/datastore/test_convert.py b/tests/unit/datastore/test_convert.py index 68cfb4d5a..9c190f162 100644 --- a/tests/unit/datastore/test_convert.py +++ b/tests/unit/datastore/test_convert.py @@ -35,7 +35,7 @@ def test_dicom_to_nifti(self): def test_binary_to_image(self): reference_image = os.path.join(self.local_dataset, "labels", "final", "spleen_3.nii.gz") label = LoadImage(image_only=True)(reference_image) - label = label.astype(np.uint16) + label = label.astype(np.uint8) label = label.flatten(order="F") label_bin = tempfile.NamedTemporaryFile(suffix=".bin").name