Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
import gradio as gr | |
import kornia as K | |
from kornia.core import concatenate, Tensor | |
from PIL import Image | |
import numpy as np | |
def rescale_aa(image, height, width): | |
# Convert PIL Image to Tensor | |
img_np = np.array(image) | |
img: Tensor = K.utils.image_to_tensor(img_np).float() / 255.0 | |
img = img.unsqueeze(0) # Add batch dimension | |
img_rescale: Tensor = K.geometry.resize(img, (int(img.shape[2]*height), int(img.shape[3]*width)), antialias=False) | |
img_rescale_aa: Tensor = K.geometry.resize(img, (int(img.shape[2]*height), int(img.shape[3]*width)), antialias=True) | |
img_out = concatenate([img_rescale, img_rescale_aa], -1) | |
# Clip the output values from 0 to 1 | |
return K.utils.tensor_to_image(img_out.clamp_(0, 1)) | |
title = "Kornia Resizing Demo" | |
description = """ | |
This demo shows the difference between resizing with and without antialiasing using Kornia. | |
The left half of the output image is resized without antialiasing, and the right half is resized with antialiasing. | |
""" | |
with gr.Blocks(title=title) as demo: | |
gr.Markdown(f"# {title}") | |
gr.Markdown(description) | |
with gr.Row(): | |
with gr.Column(): | |
image_input = gr.Image(type="pil", label="Input Image") | |
height_slider = gr.Slider(minimum=0.005, maximum=2, step=0.005, value=0.25, label="Height Scale") | |
width_slider = gr.Slider(minimum=0.005, maximum=2, step=0.005, value=0.25, label="Width Scale") | |
image_output = gr.Image(type="pil", label="Resized Image") | |
rescale_button = gr.Button("Rescale") | |
rescale_button.click( | |
fn=rescale_aa, | |
inputs=[image_input, height_slider, width_slider], | |
outputs=image_output | |
) | |
gr.Examples( | |
examples=[ | |
["examples/a.png", 0.25, 0.25], | |
["examples/iron_man.jpeg", 0.25, 0.25], | |
], | |
inputs=[image_input, height_slider, width_slider], | |
outputs=image_output, | |
fn=rescale_aa, | |
cache_examples=True | |
) | |
if __name__ == "__main__": | |
demo.launch() |