diff --git a/mindspore/dataset/vision/c_transforms.py b/mindspore/dataset/vision/c_transforms.py index 9ac1228939..deee986311 100644 --- a/mindspore/dataset/vision/c_transforms.py +++ b/mindspore/dataset/vision/c_transforms.py @@ -175,6 +175,22 @@ class Decode(cde.DecodeOp): self.rgb = rgb super().__init__(self.rgb) + def __call__(self, img): + """ + Call method. + + Args: + img (NumPy): Image to be decoded. + + Returns: + img (NumPy), Decoded image. + """ + if not isinstance(img, np.ndarray) or img.ndim != 1 or img.dtype.type is np.str_: + raise TypeError("Input should be a 1-D NumPy with integer type, got {}.".format(type(img))) + decode = cde.Execute(cde.DecodeOp(self.rgb)) + img = decode(cde.Tensor(np.asarray(img))) + return img.as_array() + class CutMixBatch(cde.CutMixBatchOp): """ diff --git a/tests/ut/python/dataset/test_eager_vision.py b/tests/ut/python/dataset/test_eager_vision.py index 078a690d78..3f76f67efa 100644 --- a/tests/ut/python/dataset/test_eager_vision.py +++ b/tests/ut/python/dataset/test_eager_vision.py @@ -13,10 +13,22 @@ # limitations under the License. # ============================================================================== import cv2 +import numpy as np from PIL import Image import mindspore.dataset.vision.c_transforms as C from mindspore import log as logger + +def test_eager_decode(): + img = np.fromfile("../data/dataset/apple.jpg", dtype=np.uint8) + logger.info("Image.type: {}, Image.shape: {}".format(type(img), img.shape)) + + img = C.Decode()(img) + logger.info("Image.type: {}, Image.shape: {}".format(type(img), img.shape)) + + assert img.shape == (2268, 4032, 3) + + def test_eager_resize(): img = cv2.imread("../data/dataset/apple.jpg") logger.info("Image.type: {}, Image.shape: {}".format(type(img), img.shape)) @@ -78,6 +90,20 @@ def test_eager_pad(): assert size_padded == (size[0] + 2 * pad, size[1] + 2 * pad, size[2]) def test_eager_exceptions(): + try: + img = "../data/dataset/apple.jpg" + img = C.Decode()(img) + assert False + except TypeError as e: + assert "Input should be a 1-D NumPy with integer type" in str(e) + + try: + img = np.array(["a", "b", "c"]) + img = C.Decode()(img) + assert False + except TypeError as e: + assert "Input should be a 1-D NumPy with integer type" in str(e) + try: img = cv2.imread("../data/dataset/apple.jpg") img = C.Resize(size=(-32, 32))(img) @@ -94,6 +120,7 @@ def test_eager_exceptions(): if __name__ == '__main__': + test_eager_decode() test_eager_resize() test_eager_rescale() test_eager_normalize()