%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 [![Build Status](https://github.com/pydicom/pylibjpeg-rle/workflows/unit-tests/badge.svg)](https://github.com/pydicom/pylibjpeg-rle/actions?query=workflow%3Aunit-tests) [![codecov](https://codecov.io/gh/pydicom/pylibjpeg-rle/branch/master/graph/badge.svg)](https://codecov.io/gh/pydicom/pylibjpeg-rle) [![PyPI version](https://badge.fury.io/py/pylibjpeg-rle.svg)](https://badge.fury.io/py/pylibjpeg-rle) [![Python versions](https://img.shields.io/pypi/pyversions/pylibjpeg-rle.svg)](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 [![Build Status](https://github.com/pydicom/pylibjpeg-rle/workflows/unit-tests/badge.svg)](https://github.com/pydicom/pylibjpeg-rle/actions?query=workflow%3Aunit-tests) [![codecov](https://codecov.io/gh/pydicom/pylibjpeg-rle/branch/master/graph/badge.svg)](https://codecov.io/gh/pydicom/pylibjpeg-rle) [![PyPI version](https://badge.fury.io/py/pylibjpeg-rle.svg)](https://badge.fury.io/py/pylibjpeg-rle) [![Python versions](https://img.shields.io/pypi/pyversions/pylibjpeg-rle.svg)](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 [![Build Status](https://github.com/pydicom/pylibjpeg-rle/workflows/unit-tests/badge.svg)](https://github.com/pydicom/pylibjpeg-rle/actions?query=workflow%3Aunit-tests) [![codecov](https://codecov.io/gh/pydicom/pylibjpeg-rle/branch/master/graph/badge.svg)](https://codecov.io/gh/pydicom/pylibjpeg-rle) [![PyPI version](https://badge.fury.io/py/pylibjpeg-rle.svg)](https://badge.fury.io/py/pylibjpeg-rle) [![Python versions](https://img.shields.io/pypi/pyversions/pylibjpeg-rle.svg)](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 - 1.3.0-1 - Package Spec generated