Skip to content

switch_endianness assertion error with PILReader #1823

@wyli

Description

@wyli

Describe the bug
switch_endianness is not compatible with meta data items with None value

To Reproduce

import os
import numpy as np
from PIL import Image
import tempfile
from monai.data import PILReader
from monai.transforms import LoadImage
from monai.config import print_config

print_config()

tempdir = tempfile.mkdtemp()
test_image = np.random.randint(0, 256, size=[128, 256])
filename = os.path.join(tempdir, "test_image.png")
Image.fromarray(test_image.astype("uint8")).save(filename)

loader = LoadImage(PILReader(converter=lambda image: image.convert("LA")))
data, meta = loader(filename)
print(f"image data shape:{data.shape}")
print(f"meta data:{meta}")

output:

MONAI version: 0.4.0+184.g5151b15a
Numpy version: 1.19.5
Pytorch version: 1.8.0
MONAI flags: HAS_EXT = False, USE_COMPILED = False
MONAI rev id: 5151b15aaadc90bf578729d85e8011faae5d1836

Optional dependencies:
Pytorch Ignite version: 0.4.4
Nibabel version: 3.2.1
scikit-image version: 0.18.1
Pillow version: 8.1.2
Tensorboard version: 2.4.1
gdown version: 3.12.2
TorchVision version: 0.9.0
ITK version: 5.1.2
tqdm version: 4.59.0
lmdb version: 1.1.1
psutil version: 5.8.0

For details about installing the optional dependencies, please visit:
    https://docs.monai.io/en/latest/installation.html#installing-the-recommended-dependencies

Traceback (most recent call last):
  File "../test.py", line 16, in <module>
    data, meta = loader(filename)
  File "/MONAI/monai/transforms/io/array.py", line 162, in __call__
    meta_data = switch_endianness(meta_data, ">", "<")
  File "/MONAI/monai/transforms/io/array.py", line 49, in switch_endianness
    data = {k: switch_endianness(v, old, new) for k, v in data.items()}
  File "/MONAI/monai/transforms/io/array.py", line 49, in <dictcomp>
    data = {k: switch_endianness(v, old, new) for k, v in data.items()}
  File "/MONAI/monai/transforms/io/array.py", line 53, in switch_endianness
    raise AssertionError()
AssertionError

Expected behavior
load with the PILReader without error

context
(Pdb) print(data)

{'format': None, 'mode': 'LA', 'width': 256, 'height': 128, 'spatial_shape': array([256, 128]), 'original_channel_dim': -1,
'filename_or_obj': '/var/folders/6f/fdkl7m0x7sz3nj_t7p3ccgz00000gp/T/tmpadazr01l/test_image.png'}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions