Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .bumpversion.cfg
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[bumpversion]
current_version = 0.2.1
current_version = 0.3.0
parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)((?P<release>a|b|rc)(?P<build>\d+))?
serialize =
{major}.{minor}.{patch}{release}{build}
Expand Down
7 changes: 7 additions & 0 deletions docs/source/release_notes/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,13 @@
:hidden:
:maxdepth: 2

```
## Version 0.3

```{toctree}
:maxdepth: 1

v0.3.0
```

## Version 0.2
Expand Down
40 changes: 40 additions & 0 deletions docs/source/release_notes/v0.3.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Version 0.3.0 (April 22, 2022)

This version of MONAI Deploy App SDK introduces a couple of new features, as well as a number of defect fixes. Please see details in the following sections.

Please visit [GETTING STARTED](/getting_started/index) guide and follow tutorials.

You can learn more about SDK usage through [DEVELOPING WITH SDK](/developing_with_sdk/index).

Please let us know how you like it and what could be improved by [submitting an issue](https://github.com/Project-MONAI/monai-deploy-app-sdk/issues/new/choose) or [asking questions](https://github.com/Project-MONAI/monai-deploy-app-sdk/discussions)

## What's new

### Clara Viz Operator

This operator uses [Clara Viz](https://pypi.org/project/clara-viz/) to provide interactive view of a 3D volume including segmentation mask. A [tutorial](https://github.com/Project-MONAI/monai-deploy-app-sdk/blob/main/notebooks/tutorials/03_segmentation_viz_app.ipynb) is provided to demonstrate how to use this new operator in an application, e.g., a typical segmentation inference application.

### STL Surface Mesh Conversion Operator

This operator converts a volume image to surface mesh, in [STL file format](https://en.wikipedia.org/wiki/STL_(file_format)). Its API allows the client to control if smoothing needs to be applied, and if only keeping the largest connected component; the latter is useful when muliple disjoint segments are in a volume image, and the application needs to control if all or only the largest to be included in the output.

### What's fixed or updated

- [The AI Spleen Segmentation](https://github.com/Project-MONAI/monai-deploy-app-sdk/tree/main/examples/apps/ai_spleen_seg_app) application is updated to include the STL conversion operator for surface mesh output
- [The AI UNETR Segmentation](https://github.com/Project-MONAI/monai-deploy-app-sdk/blob/main/examples/apps/ai_unetr_seg_app/app.py) is updated to include the STL conversion operator, in lieu of the [DICOM Segmentation Writer](https://github.com/Project-MONAI/monai-deploy-app-sdk/blob/main/monai/deploy/operators/dicom_seg_writer_operator.py). This is because that the model outputs 13 labeled segments, exceeding the maximum of 8 supported by the [DICOM Segmentation Writer](https://github.com/Project-MONAI/monai-deploy-app-sdk/blob/main/monai/deploy/operators/dicom_seg_writer_operator.py)
- Add Clara Viz operator [#235](https://github.com/Project-MONAI/monai-deploy-app-sdk/pull/235) by [@AndreasHeumann](https://github.com/AndreasHeumann)
- Make DICOMSeriesToVolumeOperator consistent with ITK in serving NumPy array [#238](https://github.com/Project-MONAI/monai-deploy-app-sdk/pull/238) by [@mmelqin](https://github.com/MMelQin)
- Update README.md [#253](https://github.com/Project-MONAI/monai-deploy-app-sdk/pull/253) by [@dbericat](https://github.com/dbericat)
- Add the STL conversion operator [#260](https://github.com/Project-MONAI/monai-deploy-app-sdk/pull/260) by [@mmelqin](https://github.com/MMelQin)
- Add DICOMTextSRWriterOperator to the autosummary section for doc gen [#263](https://github.com/Project-MONAI/monai-deploy-app-sdk/pull/263) by [@mmelqin](https://github.com/MMelQin)
- Corrected the conditional block to use the correct and only named input obj [#264](https://github.com/Project-MONAI/monai-deploy-app-sdk/pull/264) by [@mmelqin](https://github.com/MMelQin)
- Updated the png converter operator following changes to Image ndarray index order [#265](https://github.com/Project-MONAI/monai-deploy-app-sdk/pull/265) by [@mmelqin](https://github.com/MMelQin)
- fix: Address typos in bilinear mode usage in the `Spacingd` operator [#271](https://github.com/Project-MONAI/monai-deploy-app-sdk/pull/271) by [@swederik](https://github.com/swederik)
- Relaxed the restriction on non-DCM files, and raise error based on settings [#273](https://github.com/Project-MONAI/monai-deploy-app-sdk/pull/273) by [@mmelqin](https://github.com/MMelQin)
- Fix doc typos [#274](https://github.com/Project-MONAI/monai-deploy-app-sdk/pull/274) by [@mmelqin](https://github.com/MMelQin)
- Added 3rd party copyright notices [#278](https://github.com/Project-MONAI/monai-deploy-app-sdk/pull/278) by [@mmelqin](https://github.com/MMelQin)
- Fix pixel spacing in DICOMDataLoaderOperator for some X-rays [#280](https://github.com/Project-MONAI/monai-deploy-app-sdk/pull/280) by [@jlvahldiek](https://github.com/jlvahldiek)
- Fix shm issue [#284](https://github.com/Project-MONAI/monai-deploy-app-sdk/pull/284) by [@slbryson](https://github.com/slbryson)
- Fix Issue #245: DICOM Seg has multiple slices of seg image on the same frame [#285](https://github.com/Project-MONAI/monai-deploy-app-sdk/pull/285) by [@mmelqin](https://github.com/MMelQin)
- Update MONAI version after having validated compatibility [#288](https://github.com/Project-MONAI/monai-deploy-app-sdk/pull/288) by [@mmelqin](https://github.com/MMelQin)
- Add support for MONOCHROME1 [#290](https://github.com/Project-MONAI/monai-deploy-app-sdk/pull/290) by [@mmelqin](https://github.com/MMelQin)
18 changes: 16 additions & 2 deletions notebooks/tutorials/03_segmentation_viz_app.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"# Creating a Segmentation App with MONAI Deploy App SDK\n",
"# Creating a Segmentation App Including Visualization with MONAI Deploy App SDK\n",
"\n",
"This tutorial shows how to create an organ segmentation application for a PyTorch model that has been trained with MONAI.\n",
"This tutorial shows how to create an organ segmentation application for a PyTorch model that has been trained with MONAI, and visualize the segmentation and input images with Clara Viz integration.\n",
"\n",
"Deploying AI models requires the integration with clinical imaging network, even if in a for-research-use setting. This means that the AI deploy application will need to support standards-based imaging protocols, and specifically for Radiological imaging, DICOM protocol.\n",
"\n",
Expand Down Expand Up @@ -42,6 +42,9 @@
" - **Input(seg_image)**: a segmentation image object in memory ([`Image`](/modules/_autosummary/monai.deploy.core.domain.Image))\n",
" - **Input(study_selected_series_list)**: a DICOM series object in memory ([`StudySelectedSeries`](/modules/_autosummary/monai.deploy.core.domain.StudySelectedSeries))\n",
" - **Output(dicom_seg_instance)**: a file path ([`DataPath`](/modules/_autosummary/monai.deploy.core.domain.DataPath))\n",
"- **ClaraVizOperator**:\n",
" - **Input(image)**: a volume image object in memory ([`Image`](/modules/_autosummary/monai.deploy.core.domain.Image))\n",
" - **Input(seg_image)**: a segmentation image object in memory ([`Image`](/modules/_autosummary/monai.deploy.core.domain.Image))\n",
"\n",
"\n",
":::{note}\n",
Expand All @@ -61,6 +64,8 @@
" DICOMSeriesToVolumeOperator --|> SpleenSegOperator : image...image\n",
" DICOMSeriesSelectorOperator --|> DICOMSegmentationWriterOperator : study_selected_series_list...study_selected_series_list\n",
" SpleenSegOperator --|> DICOMSegmentationWriterOperator : seg_image...seg_image\n",
" DICOMSeriesToVolumeOperator --|> ClaraVizOperator : image...image\n",
" SpleenSegOperator --|> ClaraVizOperator : seg_image...seg_image\n",
"\n",
"\n",
" class DICOMDataLoaderOperator {\n",
Expand All @@ -85,6 +90,10 @@
" <in>study_selected_series_list : IN_MEMORY\n",
" dicom_seg_instance(out) DISK\n",
" }\n",
" class ClaraVizOperator {\n",
" <in>image : IN_MEMORY\n",
" <in>seg_image : IN_MEMORY\n",
" }\n",
"```\n",
"\n",
"### Setup environment\n"
Expand Down Expand Up @@ -1208,6 +1217,7 @@
"from monai.deploy.operators.dicom_seg_writer_operator import DICOMSegmentationWriterOperator\n",
"from monai.deploy.operators.dicom_series_selector_operator import DICOMSeriesSelectorOperator\n",
"from monai.deploy.operators.dicom_series_to_volume_operator import DICOMSeriesToVolumeOperator\n",
"from monai.deploy.operators.clara_viz_operator import ClaraVizOperator\n",
"\n",
"@resource(cpu=1, gpu=1, memory=\"7Gi\")\n",
"class AISpleenSegApp(Application):\n",
Expand All @@ -1231,6 +1241,10 @@
" self.add_flow(series_selector_op, dicom_seg_writer, {\"study_selected_series_list\": \"study_selected_series_list\"})\n",
" self.add_flow(spleen_seg_op, dicom_seg_writer, {\"seg_image\": \"seg_image\"})\n",
"\n",
" viz_op = ClaraVizOperator()\n",
" self.add_flow(series_to_vol_op, viz_op, {\"image\": \"image\"})\n",
" self.add_flow(spleen_seg_op, viz_op, {\"seg_image\": \"seg_image\"})\n",
"\n",
"# This is a sample series selection rule in JSON, simply selecting CT series.\n",
"# If the study has more than 1 CT series, then all of them will be selected.\n",
"# Please see more detail in DICOMSeriesSelectorOperator.\n",
Expand Down