summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-05-31 05:56:08 +0000
committerCoprDistGit <infra@openeuler.org>2023-05-31 05:56:08 +0000
commitfd932696d7ee37aef9c55909cced8e8b8ca4efde (patch)
tree770d1fcca5fbc10c1964300d92cc5421af1c5429
parent04571833fdb856e49ace65e9478bda8dead2b823 (diff)
automatic import of python-rt-utils
-rw-r--r--.gitignore1
-rw-r--r--python-rt-utils.spec343
-rw-r--r--sources1
3 files changed, 345 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..936b071 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/rt-utils-1.2.7.tar.gz
diff --git a/python-rt-utils.spec b/python-rt-utils.spec
new file mode 100644
index 0000000..14e3c71
--- /dev/null
+++ b/python-rt-utils.spec
@@ -0,0 +1,343 @@
+%global _empty_manifest_terminate_build 0
+Name: python-rt-utils
+Version: 1.2.7
+Release: 1
+Summary: A small library for handling masks and RT-Structs
+License: MIT License
+URL: https://github.com/qurit/rtutils
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/43/91/1fcca26266e1470669ed6c8567c96e568d67d187642dd003fd4fa16f6bc4/rt-utils-1.2.7.tar.gz
+BuildArch: noarch
+
+Requires: python3-pydicom
+Requires: python3-numpy
+Requires: python3-opencv-python
+Requires: python3-dataclasses
+
+%description
+RT-Utils is motivated to allow physicians and other users to view the results of segmentation performed on a series of DICOM images. RT-Utils allows you to create or load RT Structs, extract 3d masks from RT Struct ROIs, easily add one or more regions of interest, and save the resulting RT Struct in just a few lines!
+## How it works
+RT-Utils provides a builder class to faciliate the creation and loading of an RT Struct. From there, you can add ROIs through binary masks and optionally input the colour of the region along with the region name.
+The format for the ROI mask is an nd numpy array of type bool. It is an array of 2d binary masks, one plane for each slice location within the DICOM series. The slices should be sorted in ascending order within the mask. Through these masks, we extract the contours of the regions of interest and place them within the RT Struct file. Note that there is currently only support for the use of one frame of reference UID and structered set ROI sequence. Also note that holes within the ROI may be handled poorly.
+## Installation
+```
+pip install rt_utils
+```
+## Creating new RT Structs
+```Python
+from rt_utils import RTStructBuilder
+# Create new RT Struct. Requires the DICOM series path for the RT Struct.
+rtstruct = RTStructBuilder.create_new(dicom_series_path="./testlocation")
+# ...
+# Create mask through means such as ML
+# ...
+# Add the 3D mask as an ROI.
+# The colour, description, and name will be auto generated
+rtstruct.add_roi(mask=MASK_FROM_ML_MODEL)
+# Add another ROI, this time setting the color, description, and name
+rtstruct.add_roi(
+ mask=MASK_FROM_ML_MODEL,
+ color=[255, 0, 255],
+ name="RT-Utils ROI!"
+)
+rtstruct.save('new-rt-struct')
+```
+## Adding to existing RT Structs
+```Python
+from rt_utils import RTStructBuilder
+import matplotlib.pyplot as plt
+# Load existing RT Struct. Requires the series path and existing RT Struct path
+rtstruct = RTStructBuilder.create_from(
+ dicom_series_path="./testlocation",
+ rt_struct_path="./testlocation/rt-struct.dcm"
+)
+# Add ROI. This is the same as the above example.
+rtstruct.add_roi(
+ mask=MASK_FROM_ML_MODEL,
+ color=[255, 0, 255],
+ name="RT-Utils ROI!"
+)
+rtstruct.save('new-rt-struct')
+```
+## Creation Results
+<p align="center">
+ <img src="https://raw.githubusercontent.com/qurit/rt-utils/main/src/contour.png" width="1000"/>
+</p>
+<p align="center">
+ The results of a generated ROI with a dummy mask, as viewed in Slicer.
+</p>
+<p align="center">
+ <img src="https://raw.githubusercontent.com/qurit/RT-Utils/main/src/liver-contour.png" width="1000"/>
+</p>
+<p align="center">
+ The results of a generated ROI with a liver segmentation model, as viewed in Slicer. (Note the underlying patient data has been hidden)
+</p>
+## Loading an existing RT Struct contour as a mask
+```Python
+from rt_utils import RTStructBuilder
+import matplotlib.pyplot as plt
+# Load existing RT Struct. Requires the series path and existing RT Struct path
+rtstruct = RTStructBuilder.create_from(
+ dicom_series_path="./testlocation",
+ rt_struct_path="./testlocation/rt-struct.dcm"
+)
+# View all of the ROI names from within the image
+print(rtstruct.get_roi_names())
+# Loading the 3D Mask from within the RT Struct
+mask_3d = rtstruct.get_roi_mask_by_name("ROI NAME")
+# Display one slice of the region
+first_mask_slice = mask_3d[:, :, 0]
+plt.imshow(first_mask_slice)
+plt.show()
+```
+## Loading Results
+<p align="center">
+ <img src="https://raw.githubusercontent.com/qurit/rt-utils/main/src/loaded-mask.png" height="300"/>
+</p>
+<p align="center">
+ The results of a loading an exisiting ROI as a mask, as viewed in Python.
+</p>
+## Additional Parameters
+The add_roi method of our RTStruct class has a multitude of optional parameters available. Below is a comprehensive list of all these parameters and what they do.
+- <b>color</b>: This parameter can either be a colour string such as '#ffffff' or a RGB value as a list such as '[255, 255, 255]'. This parameter will dictate the colour of your ROI when viewed in a viewing program. If no colour is provided, RT Utils will pick from our internal colour palette based on the ROI Number of the ROI.
+- <b>name</b>: A str value that defaults to none. Used to set the name of the ROI within the RT Struct. If the name is none, RT Utils will set a name of ROI-{ROI Number}.
+- <b>description</b>: A str value that sets the description of the ROI within the RT Struct. If no value is provided, the description is just left blank.
+- <b>use_pin_hole</b>: A boolean value that defaults to false. If set to true, lines will be erased through your mask such that each separate region within your image can be encapsulated via a single contour instead of contours nested within one another. Use this if your RT Struct viewer of choice does not support nested contours / contours with holes.
+- <b>approximate_contours</b>: A boolean value that defaults to True which defines whether or not approximations are made when extracting contours from the input mask. Setting this to false will lead to much larger contour data within your RT Struct so only use this if as much precision as possible is required.
+- <b>roi_generation_algorithm</b>: An enum value that defaults to 0 which defines what ROI generation algorithm will be used. 0=\'AUTOMATIC\', 1=\'SEMIAUTOMATIC\', or 2=\'MANUAL\'.
+
+%package -n python3-rt-utils
+Summary: A small library for handling masks and RT-Structs
+Provides: python-rt-utils
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-rt-utils
+RT-Utils is motivated to allow physicians and other users to view the results of segmentation performed on a series of DICOM images. RT-Utils allows you to create or load RT Structs, extract 3d masks from RT Struct ROIs, easily add one or more regions of interest, and save the resulting RT Struct in just a few lines!
+## How it works
+RT-Utils provides a builder class to faciliate the creation and loading of an RT Struct. From there, you can add ROIs through binary masks and optionally input the colour of the region along with the region name.
+The format for the ROI mask is an nd numpy array of type bool. It is an array of 2d binary masks, one plane for each slice location within the DICOM series. The slices should be sorted in ascending order within the mask. Through these masks, we extract the contours of the regions of interest and place them within the RT Struct file. Note that there is currently only support for the use of one frame of reference UID and structered set ROI sequence. Also note that holes within the ROI may be handled poorly.
+## Installation
+```
+pip install rt_utils
+```
+## Creating new RT Structs
+```Python
+from rt_utils import RTStructBuilder
+# Create new RT Struct. Requires the DICOM series path for the RT Struct.
+rtstruct = RTStructBuilder.create_new(dicom_series_path="./testlocation")
+# ...
+# Create mask through means such as ML
+# ...
+# Add the 3D mask as an ROI.
+# The colour, description, and name will be auto generated
+rtstruct.add_roi(mask=MASK_FROM_ML_MODEL)
+# Add another ROI, this time setting the color, description, and name
+rtstruct.add_roi(
+ mask=MASK_FROM_ML_MODEL,
+ color=[255, 0, 255],
+ name="RT-Utils ROI!"
+)
+rtstruct.save('new-rt-struct')
+```
+## Adding to existing RT Structs
+```Python
+from rt_utils import RTStructBuilder
+import matplotlib.pyplot as plt
+# Load existing RT Struct. Requires the series path and existing RT Struct path
+rtstruct = RTStructBuilder.create_from(
+ dicom_series_path="./testlocation",
+ rt_struct_path="./testlocation/rt-struct.dcm"
+)
+# Add ROI. This is the same as the above example.
+rtstruct.add_roi(
+ mask=MASK_FROM_ML_MODEL,
+ color=[255, 0, 255],
+ name="RT-Utils ROI!"
+)
+rtstruct.save('new-rt-struct')
+```
+## Creation Results
+<p align="center">
+ <img src="https://raw.githubusercontent.com/qurit/rt-utils/main/src/contour.png" width="1000"/>
+</p>
+<p align="center">
+ The results of a generated ROI with a dummy mask, as viewed in Slicer.
+</p>
+<p align="center">
+ <img src="https://raw.githubusercontent.com/qurit/RT-Utils/main/src/liver-contour.png" width="1000"/>
+</p>
+<p align="center">
+ The results of a generated ROI with a liver segmentation model, as viewed in Slicer. (Note the underlying patient data has been hidden)
+</p>
+## Loading an existing RT Struct contour as a mask
+```Python
+from rt_utils import RTStructBuilder
+import matplotlib.pyplot as plt
+# Load existing RT Struct. Requires the series path and existing RT Struct path
+rtstruct = RTStructBuilder.create_from(
+ dicom_series_path="./testlocation",
+ rt_struct_path="./testlocation/rt-struct.dcm"
+)
+# View all of the ROI names from within the image
+print(rtstruct.get_roi_names())
+# Loading the 3D Mask from within the RT Struct
+mask_3d = rtstruct.get_roi_mask_by_name("ROI NAME")
+# Display one slice of the region
+first_mask_slice = mask_3d[:, :, 0]
+plt.imshow(first_mask_slice)
+plt.show()
+```
+## Loading Results
+<p align="center">
+ <img src="https://raw.githubusercontent.com/qurit/rt-utils/main/src/loaded-mask.png" height="300"/>
+</p>
+<p align="center">
+ The results of a loading an exisiting ROI as a mask, as viewed in Python.
+</p>
+## Additional Parameters
+The add_roi method of our RTStruct class has a multitude of optional parameters available. Below is a comprehensive list of all these parameters and what they do.
+- <b>color</b>: This parameter can either be a colour string such as '#ffffff' or a RGB value as a list such as '[255, 255, 255]'. This parameter will dictate the colour of your ROI when viewed in a viewing program. If no colour is provided, RT Utils will pick from our internal colour palette based on the ROI Number of the ROI.
+- <b>name</b>: A str value that defaults to none. Used to set the name of the ROI within the RT Struct. If the name is none, RT Utils will set a name of ROI-{ROI Number}.
+- <b>description</b>: A str value that sets the description of the ROI within the RT Struct. If no value is provided, the description is just left blank.
+- <b>use_pin_hole</b>: A boolean value that defaults to false. If set to true, lines will be erased through your mask such that each separate region within your image can be encapsulated via a single contour instead of contours nested within one another. Use this if your RT Struct viewer of choice does not support nested contours / contours with holes.
+- <b>approximate_contours</b>: A boolean value that defaults to True which defines whether or not approximations are made when extracting contours from the input mask. Setting this to false will lead to much larger contour data within your RT Struct so only use this if as much precision as possible is required.
+- <b>roi_generation_algorithm</b>: An enum value that defaults to 0 which defines what ROI generation algorithm will be used. 0=\'AUTOMATIC\', 1=\'SEMIAUTOMATIC\', or 2=\'MANUAL\'.
+
+%package help
+Summary: Development documents and examples for rt-utils
+Provides: python3-rt-utils-doc
+%description help
+RT-Utils is motivated to allow physicians and other users to view the results of segmentation performed on a series of DICOM images. RT-Utils allows you to create or load RT Structs, extract 3d masks from RT Struct ROIs, easily add one or more regions of interest, and save the resulting RT Struct in just a few lines!
+## How it works
+RT-Utils provides a builder class to faciliate the creation and loading of an RT Struct. From there, you can add ROIs through binary masks and optionally input the colour of the region along with the region name.
+The format for the ROI mask is an nd numpy array of type bool. It is an array of 2d binary masks, one plane for each slice location within the DICOM series. The slices should be sorted in ascending order within the mask. Through these masks, we extract the contours of the regions of interest and place them within the RT Struct file. Note that there is currently only support for the use of one frame of reference UID and structered set ROI sequence. Also note that holes within the ROI may be handled poorly.
+## Installation
+```
+pip install rt_utils
+```
+## Creating new RT Structs
+```Python
+from rt_utils import RTStructBuilder
+# Create new RT Struct. Requires the DICOM series path for the RT Struct.
+rtstruct = RTStructBuilder.create_new(dicom_series_path="./testlocation")
+# ...
+# Create mask through means such as ML
+# ...
+# Add the 3D mask as an ROI.
+# The colour, description, and name will be auto generated
+rtstruct.add_roi(mask=MASK_FROM_ML_MODEL)
+# Add another ROI, this time setting the color, description, and name
+rtstruct.add_roi(
+ mask=MASK_FROM_ML_MODEL,
+ color=[255, 0, 255],
+ name="RT-Utils ROI!"
+)
+rtstruct.save('new-rt-struct')
+```
+## Adding to existing RT Structs
+```Python
+from rt_utils import RTStructBuilder
+import matplotlib.pyplot as plt
+# Load existing RT Struct. Requires the series path and existing RT Struct path
+rtstruct = RTStructBuilder.create_from(
+ dicom_series_path="./testlocation",
+ rt_struct_path="./testlocation/rt-struct.dcm"
+)
+# Add ROI. This is the same as the above example.
+rtstruct.add_roi(
+ mask=MASK_FROM_ML_MODEL,
+ color=[255, 0, 255],
+ name="RT-Utils ROI!"
+)
+rtstruct.save('new-rt-struct')
+```
+## Creation Results
+<p align="center">
+ <img src="https://raw.githubusercontent.com/qurit/rt-utils/main/src/contour.png" width="1000"/>
+</p>
+<p align="center">
+ The results of a generated ROI with a dummy mask, as viewed in Slicer.
+</p>
+<p align="center">
+ <img src="https://raw.githubusercontent.com/qurit/RT-Utils/main/src/liver-contour.png" width="1000"/>
+</p>
+<p align="center">
+ The results of a generated ROI with a liver segmentation model, as viewed in Slicer. (Note the underlying patient data has been hidden)
+</p>
+## Loading an existing RT Struct contour as a mask
+```Python
+from rt_utils import RTStructBuilder
+import matplotlib.pyplot as plt
+# Load existing RT Struct. Requires the series path and existing RT Struct path
+rtstruct = RTStructBuilder.create_from(
+ dicom_series_path="./testlocation",
+ rt_struct_path="./testlocation/rt-struct.dcm"
+)
+# View all of the ROI names from within the image
+print(rtstruct.get_roi_names())
+# Loading the 3D Mask from within the RT Struct
+mask_3d = rtstruct.get_roi_mask_by_name("ROI NAME")
+# Display one slice of the region
+first_mask_slice = mask_3d[:, :, 0]
+plt.imshow(first_mask_slice)
+plt.show()
+```
+## Loading Results
+<p align="center">
+ <img src="https://raw.githubusercontent.com/qurit/rt-utils/main/src/loaded-mask.png" height="300"/>
+</p>
+<p align="center">
+ The results of a loading an exisiting ROI as a mask, as viewed in Python.
+</p>
+## Additional Parameters
+The add_roi method of our RTStruct class has a multitude of optional parameters available. Below is a comprehensive list of all these parameters and what they do.
+- <b>color</b>: This parameter can either be a colour string such as '#ffffff' or a RGB value as a list such as '[255, 255, 255]'. This parameter will dictate the colour of your ROI when viewed in a viewing program. If no colour is provided, RT Utils will pick from our internal colour palette based on the ROI Number of the ROI.
+- <b>name</b>: A str value that defaults to none. Used to set the name of the ROI within the RT Struct. If the name is none, RT Utils will set a name of ROI-{ROI Number}.
+- <b>description</b>: A str value that sets the description of the ROI within the RT Struct. If no value is provided, the description is just left blank.
+- <b>use_pin_hole</b>: A boolean value that defaults to false. If set to true, lines will be erased through your mask such that each separate region within your image can be encapsulated via a single contour instead of contours nested within one another. Use this if your RT Struct viewer of choice does not support nested contours / contours with holes.
+- <b>approximate_contours</b>: A boolean value that defaults to True which defines whether or not approximations are made when extracting contours from the input mask. Setting this to false will lead to much larger contour data within your RT Struct so only use this if as much precision as possible is required.
+- <b>roi_generation_algorithm</b>: An enum value that defaults to 0 which defines what ROI generation algorithm will be used. 0=\'AUTOMATIC\', 1=\'SEMIAUTOMATIC\', or 2=\'MANUAL\'.
+
+%prep
+%autosetup -n rt-utils-1.2.7
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-rt-utils -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Wed May 31 2023 Python_Bot <Python_Bot@openeuler.org> - 1.2.7-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..fae52c1
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+6426d686de9f99ca6bbd8c5c42a4db66 rt-utils-1.2.7.tar.gz