import numpy as np import pytest from PIL import Image from image_prediction.estimator.preprocessor.preprocessors.basic import BasicPreprocessor from image_prediction.estimator.preprocessor.utils import image_to_normalized_tensor, images_to_batch_tensor @pytest.mark.parametrize("batch_size", [0, 1, 2, 16, 32, 64]) def image_conversion_is_correct(image): tensor = image_to_normalized_tensor(image) image_re = Image.fromarray(np.uint8(tensor * 255), mode="RGB") return image == image_re and tensor.ndim == 3 @pytest.mark.parametrize("batch_size", [0, 1, 2, 16, 32, 64]) def images_conversion_is_correct(images, tensor): if not (images or tensor.size > 0): return True return all([isinstance(tensor, np.ndarray), tensor.ndim == 4, tensor.shape[0] == len(images)]) @pytest.mark.parametrize("batch_size", [0, 1, 2, 16, 32, 64]) def test_image_to_tensor(images): assert all(map(image_conversion_is_correct, images)) @pytest.mark.parametrize("batch_size", [0, 1, 2, 16, 32, 64]) def test_images_to_batch_tensor(images): tensor = images_to_batch_tensor(images) assert images_conversion_is_correct(images, tensor) @pytest.mark.parametrize("batch_size", [0, 1, 2, 4, 6], scope="session") def test_basic_preprocessor(images): tensor = BasicPreprocessor()(images) assert images_conversion_is_correct(images, tensor)