1# Copyright 2020 Huawei Technologies Co., Ltd 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14# ============================================================================== 15import cv2 16import numpy as np 17from PIL import Image 18import mindspore.dataset.vision.c_transforms as C 19from mindspore import log as logger 20 21 22def test_eager_decode(): 23 img = np.fromfile("../data/dataset/apple.jpg", dtype=np.uint8) 24 logger.info("Image.type: {}, Image.shape: {}".format(type(img), img.shape)) 25 26 img = C.Decode()(img) 27 logger.info("Image.type: {}, Image.shape: {}".format(type(img), img.shape)) 28 29 assert img.shape == (2268, 4032, 3) 30 31 32def test_eager_resize(): 33 img = cv2.imread("../data/dataset/apple.jpg") 34 logger.info("Image.type: {}, Image.shape: {}".format(type(img), img.shape)) 35 36 img = C.Resize(size=(32, 32))(img) 37 logger.info("Image.type: {}, Image.shape: {}".format(type(img), img.shape)) 38 39 assert img.shape == (32, 32, 3) 40 41def test_eager_rescale(): 42 img = cv2.imread("../data/dataset/apple.jpg") 43 logger.info("Image.type: {}, Image.shape: {}".format(type(img), img.shape)) 44 pixel = img[0][0][0] 45 46 rescale_factor = 0.5 47 img = C.Rescale(rescale=rescale_factor, shift=0)(img) 48 logger.info("Image.type: {}, Image.shape: {}".format(type(img), img.shape)) 49 pixel_rescaled = img[0][0][0] 50 51 assert pixel*rescale_factor == pixel_rescaled 52 53def test_eager_normalize(): 54 img = Image.open("../data/dataset/apple.jpg").convert("RGB") 55 logger.info("Image.type: {}, Image.shape: {}".format(type(img), img.size)) 56 pixel = img.getpixel((0, 0))[0] 57 58 mean_vec = [100, 100, 100] 59 std_vec = [2, 2, 2] 60 img = C.Normalize(mean=mean_vec, std=std_vec)(img) 61 logger.info("Image.type: {}, Image.shape: {}".format(type(img), img.shape)) 62 pixel_normalized = img[0][0][0] 63 64 assert (pixel - mean_vec[0]) / std_vec[0] == pixel_normalized 65 66def test_eager_HWC2CHW(): 67 img = cv2.imread("../data/dataset/apple.jpg") 68 logger.info("Image.type: {}, Image.shape: {}".format(type(img), img.shape)) 69 channel = img.shape 70 71 img = C.HWC2CHW()(img) 72 logger.info("Image.type: {}, Image.shape: {}".format(type(img), img.shape)) 73 channel_swaped = img.shape 74 75 assert channel == (channel_swaped[1], channel_swaped[2], channel_swaped[0]) 76 77def test_eager_pad(): 78 img = Image.open("../data/dataset/apple.jpg").convert("RGB") 79 logger.info("Image.type: {}, Image.shape: {}".format(type(img), img.size)) 80 81 img = C.Resize(size=(32, 32))(img) 82 logger.info("Image.type: {}, Image.shape: {}".format(type(img), img.size)) 83 size = img.shape 84 85 pad = 4 86 img = C.Pad(padding=pad)(img) 87 logger.info("Image.type: {}, Image.shape: {}".format(type(img), img.size)) 88 size_padded = img.shape 89 90 assert size_padded == (size[0] + 2 * pad, size[1] + 2 * pad, size[2]) 91 92def test_eager_exceptions(): 93 try: 94 img = "../data/dataset/apple.jpg" 95 img = C.Decode()(img) 96 assert False 97 except TypeError as e: 98 assert "Input should be an encoded image in 1-D NumPy format" in str(e) 99 100 try: 101 img = np.array(["a", "b", "c"]) 102 img = C.Decode()(img) 103 assert False 104 except TypeError as e: 105 assert "Input should be an encoded image in 1-D NumPy format" in str(e) 106 107 try: 108 img = cv2.imread("../data/dataset/apple.jpg") 109 img = C.Resize(size=(-32, 32))(img) 110 assert False 111 except ValueError as e: 112 assert "not within the required interval" in str(e) 113 114 try: 115 img = "../data/dataset/apple.jpg" 116 img = C.Pad(padding=4)(img) 117 assert False 118 except TypeError as e: 119 assert "Input should be NumPy or PIL image" in str(e) 120 121 122if __name__ == '__main__': 123 test_eager_decode() 124 test_eager_resize() 125 test_eager_rescale() 126 test_eager_normalize() 127 test_eager_HWC2CHW() 128 test_eager_pad() 129 test_eager_exceptions() 130