diff options
Diffstat (limited to 'python-pylibjpeg-rle.spec')
| -rw-r--r-- | python-pylibjpeg-rle.spec | 426 |
1 files changed, 426 insertions, 0 deletions
diff --git a/python-pylibjpeg-rle.spec b/python-pylibjpeg-rle.spec new file mode 100644 index 0000000..82daf16 --- /dev/null +++ b/python-pylibjpeg-rle.spec @@ -0,0 +1,426 @@ +%global _empty_manifest_terminate_build 0 +Name: python-pylibjpeg-rle +Version: 1.3.0 +Release: 1 +Summary: Python bindings for a fast RLE decoder/encoder, with a focus on use as a plugin for pylibjpeg +License: MIT +URL: https://github.com/pydicom/pylibjpeg-rle +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/83/6b/1cb32f6d8f2ae1e7b2b700f4adc9737aa2a40fc90db374c2a060a09c8917/pylibjpeg-rle-1.3.0.tar.gz + +Requires: python3-numpy +Requires: python3-pydicom +Requires: python3-numpy +Requires: python3-asv +Requires: python3-pytest +Requires: python3-pydicom +Requires: python3-numpy + +%description +[](https://github.com/pydicom/pylibjpeg-rle/actions?query=workflow%3Aunit-tests) +[](https://codecov.io/gh/pydicom/pylibjpeg-rle) +[](https://badge.fury.io/py/pylibjpeg-rle) +[](https://img.shields.io/pypi/pyversions/pylibjpeg-rle.svg) + +## pylibjpeg-rle + +A fast DICOM ([PackBits](https://en.wikipedia.org/wiki/PackBits)) RLE plugin for [pylibjpeg](https://github.com/pydicom/pylibjpeg), written in Rust with a Python 3.7+ wrapper. + +Linux, MacOS and Windows are all supported. + +### Installation +#### Installing the current release +```bash +pip install pylibjpeg-rle +``` +#### Installing the development version + +Make sure [Python](https://www.python.org/), [Git](https://git-scm.com/) and +[Rust](https://www.rust-lang.org/) are installed. For Windows, you also need to install +[Microsoft's C++ Build Tools](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16). +```bash +git clone https://github.com/pydicom/pylibjpeg-rle +cd pylibjpeg-rle +python -m pip install . +``` + +### Supported Transfer Syntaxes + +| UID | Description | Decoding | Encoding | +| --- | --- | --- | --- | +| 1.2.840.10008.1.2.5 | RLE Lossless | Yes | Yes | + +### Usage +#### Decoding +##### With pylibjpeg + +```python +from pydicom import dcmread +from pydicom.data import get_testdata_file + +ds = dcmread(get_testdata_file("OBXXXX1A_rle.dcm")) +arr = ds.pixel_array +``` + +##### Standalone with pydicom +Alternatively you can use the included functions to decode a given dataset: +```python +from rle import pixel_array, generate_frames + +# Return the entire Pixel Data as an ndarray +arr = pixel_array(ds) + +# Generator function that only processes 1 frame at a time, +# may help reduce memory usage when dealing with large Pixel Data +for arr in generate_frames(ds): + print(arr.shape) +``` + +#### Encoding +##### Standalone with pydicom + +Convert uncompressed pixel data to RLE encoding and save: +```python +from pydicom import dcmread +from pydicom.data import get_testdata_file +from pydicom.uid import RLELossless + +from rle import pixel_data + +# Get the uncompressed pixel data +ds = dcmread(get_testdata_file("OBXXXX1A.dcm")) +arr = ds.pixel_array + +# RLE encode and encapsulate `arr` +ds.PixelData = pixel_data(arr, ds) +# Set the correct *Transfer Syntax UID* +ds.file_meta.TransferSyntaxUID = RLELossless +ds.save_as('as_rle.dcm') +``` + +### Benchmarks +#### Decoding + +Time per 1000 decodes, pydicom's default RLE handler vs. pylibjpeg-rle + +| Dataset | Pixels | Bytes | pydicom | pylibjpeg-rle | +| --- | --- | --- | --- | --- | +| OBXXXX1A_rle.dcm | 480,000 | 480,000 | 4.89 s | 0.79 s | +| OBXXXX1A_rle_2frame.dcm | 960,000 | 960,000 | 9.89 s | 1.65 s | +| SC_rgb_rle.dcm | 10,000 | 30,000 | 0.20 s | 0.15 s | +| SC_rgb_rle_2frame.dcm | 20,000 | 60,000 | 0.32 s | 0.18 s | +| MR_small_RLE.dcm | 4,096 | 8,192 | 0.35 s | 0.13 s | +| emri_small_RLE.dcm | 40,960 | 81,920 | 1.13 s | 0.28 s | +| SC_rgb_rle_16bit.dcm | 10,000 | 60,000 | 0.33 s | 0.17 s | +| SC_rgb_rle_16bit_2frame.dcm | 20,000 | 120,000 | 0.56 s | 0.21 s | +| rtdose_rle_1frame.dcm | 100 | 400 | 0.12 s | 0.13 s | +| rtdose_rle.dcm | 1,500 | 6,000 | 0.53 s | 0.26 s | +| SC_rgb_rle_32bit.dcm | 10,000 | 120,000 | 0.56 s | 0.19 s | +| SC_rgb_rle_32bit_2frame.dcm | 20,000 | 240,000 | 1.03 s | 0.28 s | + +#### Encoding + +Time per 1000 encodes, pydicom's default RLE handler vs. pylibjpeg-rle + +| Dataset | Pixels | Bytes | pydicom | pylibjpeg-rle | +| --- | --- | --- | --- | --- | +| OBXXXX1A.dcm | 480,000 | 480,000 | 30.7 s | 1.36 s | +| SC_rgb.dcm | 10,000 | 30,000 | 1.80 s | 0.09 s | +| MR_small.dcm | 4,096 | 8,192 | 2.29 s | 0.04 s | +| SC_rgb_16bit.dcm | 10,000 | 60,000 | 3.57 s | 0.17 s | +| rtdose_1frame.dcm | 100 | 400 | 0.19 s | 0.003 s | +| SC_rgb_32bit.dcm | 10,000 | 120,000 | 7.20 s | 0.33 s | + + + + +%package -n python3-pylibjpeg-rle +Summary: Python bindings for a fast RLE decoder/encoder, with a focus on use as a plugin for pylibjpeg +Provides: python-pylibjpeg-rle +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +BuildRequires: python3-cffi +BuildRequires: gcc +BuildRequires: gdb +%description -n python3-pylibjpeg-rle +[](https://github.com/pydicom/pylibjpeg-rle/actions?query=workflow%3Aunit-tests) +[](https://codecov.io/gh/pydicom/pylibjpeg-rle) +[](https://badge.fury.io/py/pylibjpeg-rle) +[](https://img.shields.io/pypi/pyversions/pylibjpeg-rle.svg) + +## pylibjpeg-rle + +A fast DICOM ([PackBits](https://en.wikipedia.org/wiki/PackBits)) RLE plugin for [pylibjpeg](https://github.com/pydicom/pylibjpeg), written in Rust with a Python 3.7+ wrapper. + +Linux, MacOS and Windows are all supported. + +### Installation +#### Installing the current release +```bash +pip install pylibjpeg-rle +``` +#### Installing the development version + +Make sure [Python](https://www.python.org/), [Git](https://git-scm.com/) and +[Rust](https://www.rust-lang.org/) are installed. For Windows, you also need to install +[Microsoft's C++ Build Tools](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16). +```bash +git clone https://github.com/pydicom/pylibjpeg-rle +cd pylibjpeg-rle +python -m pip install . +``` + +### Supported Transfer Syntaxes + +| UID | Description | Decoding | Encoding | +| --- | --- | --- | --- | +| 1.2.840.10008.1.2.5 | RLE Lossless | Yes | Yes | + +### Usage +#### Decoding +##### With pylibjpeg + +```python +from pydicom import dcmread +from pydicom.data import get_testdata_file + +ds = dcmread(get_testdata_file("OBXXXX1A_rle.dcm")) +arr = ds.pixel_array +``` + +##### Standalone with pydicom +Alternatively you can use the included functions to decode a given dataset: +```python +from rle import pixel_array, generate_frames + +# Return the entire Pixel Data as an ndarray +arr = pixel_array(ds) + +# Generator function that only processes 1 frame at a time, +# may help reduce memory usage when dealing with large Pixel Data +for arr in generate_frames(ds): + print(arr.shape) +``` + +#### Encoding +##### Standalone with pydicom + +Convert uncompressed pixel data to RLE encoding and save: +```python +from pydicom import dcmread +from pydicom.data import get_testdata_file +from pydicom.uid import RLELossless + +from rle import pixel_data + +# Get the uncompressed pixel data +ds = dcmread(get_testdata_file("OBXXXX1A.dcm")) +arr = ds.pixel_array + +# RLE encode and encapsulate `arr` +ds.PixelData = pixel_data(arr, ds) +# Set the correct *Transfer Syntax UID* +ds.file_meta.TransferSyntaxUID = RLELossless +ds.save_as('as_rle.dcm') +``` + +### Benchmarks +#### Decoding + +Time per 1000 decodes, pydicom's default RLE handler vs. pylibjpeg-rle + +| Dataset | Pixels | Bytes | pydicom | pylibjpeg-rle | +| --- | --- | --- | --- | --- | +| OBXXXX1A_rle.dcm | 480,000 | 480,000 | 4.89 s | 0.79 s | +| OBXXXX1A_rle_2frame.dcm | 960,000 | 960,000 | 9.89 s | 1.65 s | +| SC_rgb_rle.dcm | 10,000 | 30,000 | 0.20 s | 0.15 s | +| SC_rgb_rle_2frame.dcm | 20,000 | 60,000 | 0.32 s | 0.18 s | +| MR_small_RLE.dcm | 4,096 | 8,192 | 0.35 s | 0.13 s | +| emri_small_RLE.dcm | 40,960 | 81,920 | 1.13 s | 0.28 s | +| SC_rgb_rle_16bit.dcm | 10,000 | 60,000 | 0.33 s | 0.17 s | +| SC_rgb_rle_16bit_2frame.dcm | 20,000 | 120,000 | 0.56 s | 0.21 s | +| rtdose_rle_1frame.dcm | 100 | 400 | 0.12 s | 0.13 s | +| rtdose_rle.dcm | 1,500 | 6,000 | 0.53 s | 0.26 s | +| SC_rgb_rle_32bit.dcm | 10,000 | 120,000 | 0.56 s | 0.19 s | +| SC_rgb_rle_32bit_2frame.dcm | 20,000 | 240,000 | 1.03 s | 0.28 s | + +#### Encoding + +Time per 1000 encodes, pydicom's default RLE handler vs. pylibjpeg-rle + +| Dataset | Pixels | Bytes | pydicom | pylibjpeg-rle | +| --- | --- | --- | --- | --- | +| OBXXXX1A.dcm | 480,000 | 480,000 | 30.7 s | 1.36 s | +| SC_rgb.dcm | 10,000 | 30,000 | 1.80 s | 0.09 s | +| MR_small.dcm | 4,096 | 8,192 | 2.29 s | 0.04 s | +| SC_rgb_16bit.dcm | 10,000 | 60,000 | 3.57 s | 0.17 s | +| rtdose_1frame.dcm | 100 | 400 | 0.19 s | 0.003 s | +| SC_rgb_32bit.dcm | 10,000 | 120,000 | 7.20 s | 0.33 s | + + + + +%package help +Summary: Development documents and examples for pylibjpeg-rle +Provides: python3-pylibjpeg-rle-doc +%description help +[](https://github.com/pydicom/pylibjpeg-rle/actions?query=workflow%3Aunit-tests) +[](https://codecov.io/gh/pydicom/pylibjpeg-rle) +[](https://badge.fury.io/py/pylibjpeg-rle) +[](https://img.shields.io/pypi/pyversions/pylibjpeg-rle.svg) + +## pylibjpeg-rle + +A fast DICOM ([PackBits](https://en.wikipedia.org/wiki/PackBits)) RLE plugin for [pylibjpeg](https://github.com/pydicom/pylibjpeg), written in Rust with a Python 3.7+ wrapper. + +Linux, MacOS and Windows are all supported. + +### Installation +#### Installing the current release +```bash +pip install pylibjpeg-rle +``` +#### Installing the development version + +Make sure [Python](https://www.python.org/), [Git](https://git-scm.com/) and +[Rust](https://www.rust-lang.org/) are installed. For Windows, you also need to install +[Microsoft's C++ Build Tools](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16). +```bash +git clone https://github.com/pydicom/pylibjpeg-rle +cd pylibjpeg-rle +python -m pip install . +``` + +### Supported Transfer Syntaxes + +| UID | Description | Decoding | Encoding | +| --- | --- | --- | --- | +| 1.2.840.10008.1.2.5 | RLE Lossless | Yes | Yes | + +### Usage +#### Decoding +##### With pylibjpeg + +```python +from pydicom import dcmread +from pydicom.data import get_testdata_file + +ds = dcmread(get_testdata_file("OBXXXX1A_rle.dcm")) +arr = ds.pixel_array +``` + +##### Standalone with pydicom +Alternatively you can use the included functions to decode a given dataset: +```python +from rle import pixel_array, generate_frames + +# Return the entire Pixel Data as an ndarray +arr = pixel_array(ds) + +# Generator function that only processes 1 frame at a time, +# may help reduce memory usage when dealing with large Pixel Data +for arr in generate_frames(ds): + print(arr.shape) +``` + +#### Encoding +##### Standalone with pydicom + +Convert uncompressed pixel data to RLE encoding and save: +```python +from pydicom import dcmread +from pydicom.data import get_testdata_file +from pydicom.uid import RLELossless + +from rle import pixel_data + +# Get the uncompressed pixel data +ds = dcmread(get_testdata_file("OBXXXX1A.dcm")) +arr = ds.pixel_array + +# RLE encode and encapsulate `arr` +ds.PixelData = pixel_data(arr, ds) +# Set the correct *Transfer Syntax UID* +ds.file_meta.TransferSyntaxUID = RLELossless +ds.save_as('as_rle.dcm') +``` + +### Benchmarks +#### Decoding + +Time per 1000 decodes, pydicom's default RLE handler vs. pylibjpeg-rle + +| Dataset | Pixels | Bytes | pydicom | pylibjpeg-rle | +| --- | --- | --- | --- | --- | +| OBXXXX1A_rle.dcm | 480,000 | 480,000 | 4.89 s | 0.79 s | +| OBXXXX1A_rle_2frame.dcm | 960,000 | 960,000 | 9.89 s | 1.65 s | +| SC_rgb_rle.dcm | 10,000 | 30,000 | 0.20 s | 0.15 s | +| SC_rgb_rle_2frame.dcm | 20,000 | 60,000 | 0.32 s | 0.18 s | +| MR_small_RLE.dcm | 4,096 | 8,192 | 0.35 s | 0.13 s | +| emri_small_RLE.dcm | 40,960 | 81,920 | 1.13 s | 0.28 s | +| SC_rgb_rle_16bit.dcm | 10,000 | 60,000 | 0.33 s | 0.17 s | +| SC_rgb_rle_16bit_2frame.dcm | 20,000 | 120,000 | 0.56 s | 0.21 s | +| rtdose_rle_1frame.dcm | 100 | 400 | 0.12 s | 0.13 s | +| rtdose_rle.dcm | 1,500 | 6,000 | 0.53 s | 0.26 s | +| SC_rgb_rle_32bit.dcm | 10,000 | 120,000 | 0.56 s | 0.19 s | +| SC_rgb_rle_32bit_2frame.dcm | 20,000 | 240,000 | 1.03 s | 0.28 s | + +#### Encoding + +Time per 1000 encodes, pydicom's default RLE handler vs. pylibjpeg-rle + +| Dataset | Pixels | Bytes | pydicom | pylibjpeg-rle | +| --- | --- | --- | --- | --- | +| OBXXXX1A.dcm | 480,000 | 480,000 | 30.7 s | 1.36 s | +| SC_rgb.dcm | 10,000 | 30,000 | 1.80 s | 0.09 s | +| MR_small.dcm | 4,096 | 8,192 | 2.29 s | 0.04 s | +| SC_rgb_16bit.dcm | 10,000 | 60,000 | 3.57 s | 0.17 s | +| rtdose_1frame.dcm | 100 | 400 | 0.19 s | 0.003 s | +| SC_rgb_32bit.dcm | 10,000 | 120,000 | 7.20 s | 0.33 s | + + + + +%prep +%autosetup -n pylibjpeg-rle-1.3.0 + +%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-pylibjpeg-rle -f filelist.lst +%dir %{python3_sitearch}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Wed Apr 12 2023 Python_Bot <Python_Bot@openeuler.org> - 1.3.0-1 +- Package Spec generated |
