• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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