my_gradio / test /components /test_image.py
xray918's picture
Upload folder using huggingface_hub
0ad74ed verified
raw
history blame
5.04 kB
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")