File size: 5,044 Bytes
0ad74ed |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
from typing import cast
import numpy as np
import PIL
import pytest
from gradio_client import media_data
from gradio_client import utils as client_utils
import gradio as gr
from gradio.components.image import ImageData
from gradio.exceptions import Error
class TestImage:
def test_component_functions(self, gradio_temp_dir):
"""
Preprocess, postprocess, serialize, get_config, _segment_by_slic
type: pil, file, filepath, numpy
"""
img = ImageData(path="test/test_files/bus.png", orig_name="bus.png")
image_input = gr.Image()
image_input = gr.Image(type="filepath")
image_temp_filepath = image_input.preprocess(img)
assert image_temp_filepath in [
str(f) for f in gradio_temp_dir.glob("**/*") if f.is_file()
]
image_input = gr.Image(type="pil", label="Upload Your Image")
assert image_input.get_config() == {
"image_mode": "RGB",
"sources": ["upload", "webcam", "clipboard"],
"name": "image",
"show_share_button": False,
"show_download_button": True,
"show_fullscreen_button": True,
"streaming": False,
"show_label": True,
"label": "Upload Your Image",
"container": True,
"min_width": 160,
"scale": None,
"height": None,
"width": None,
"elem_id": None,
"elem_classes": [],
"visible": True,
"value": None,
"interactive": None,
"format": "webp",
"proxy_url": None,
"mirror_webcam": True,
"_selectable": False,
"key": None,
"streamable": False,
"type": "pil",
"placeholder": None,
}
assert image_input.preprocess(None) is None
image_input = gr.Image()
assert image_input.preprocess(img) is not None
image_input.preprocess(img)
file_image = gr.Image(type="filepath", image_mode=None)
assert img.path == file_image.preprocess(img)
with pytest.raises(ValueError):
gr.Image(type="unknown") # type: ignore
with pytest.raises(Error):
gr.Image().preprocess(
ImageData(path="test/test_files/test.svg", orig_name="test.svg")
)
string_source = gr.Image(sources="upload")
assert string_source.sources == ["upload"]
# Output functionalities
image_output = gr.Image(type="pil")
processed_image = image_output.postprocess(
PIL.Image.open(img.path) # type: ignore
).model_dump() # type: ignore
assert processed_image is not None
if processed_image is not None:
processed = PIL.Image.open(cast(dict, processed_image).get("path", "")) # type: ignore
source = PIL.Image.open(img.path) # type: ignore
assert processed.size == source.size
def test_in_interface_as_output(self):
"""
Interface, process
"""
def generate_noise(height, width):
return np.random.randint(0, 256, (height, width, 3))
iface = gr.Interface(generate_noise, ["slider", "slider"], "image")
assert iface(10, 20).endswith(".webp")
def test_static(self):
"""
postprocess
"""
component = gr.Image("test/test_files/bus.png")
value = component.get_config().get("value")
base64 = client_utils.encode_file_to_base64(value["path"])
assert base64 == media_data.BASE64_IMAGE
component = gr.Image(None)
assert component.get_config().get("value") is None
def test_images_upright_after_preprocess(self):
component = gr.Image(type="pil")
file_path = "test/test_files/rotated_image.jpeg"
im = PIL.Image.open(file_path) # type: ignore
assert im.getexif().get(274) != 1
image = component.preprocess(ImageData(path=file_path))
assert image == PIL.ImageOps.exif_transpose(im) # type: ignore
def test_image_format_parameter(self):
component = gr.Image(type="filepath", format="jpeg")
file_path = "test/test_files/bus.png"
assert (image := component.postprocess(file_path))
assert image.path.endswith("png") # type: ignore
assert (
image := component.postprocess(
np.random.randint(0, 256, (100, 100, 3), dtype=np.uint8)
)
)
assert image.path.endswith("jpeg") # type: ignore
assert (
image_pre := component.preprocess(
ImageData(path=file_path, orig_name="bus.png")
)
)
assert isinstance(image_pre, str)
assert image_pre.endswith("png")
image_pre = component.preprocess(
ImageData(path="test/test_files/cheetah1.jpg", orig_name="cheetah1.jpg")
)
assert isinstance(image_pre, str)
assert image_pre.endswith("jpg")
|