Spaces:
Running
Running
import gradio as gr | |
import torch | |
from torchvision import transforms | |
from PIL import Image, ImageEnhance | |
import rembg | |
# Upscaling function using a basic upscaling approach | |
def upscale_image(image, upscale_factor=2, sharpness=1.0, contrast=1.0, brightness=1.0): | |
# Resize the image | |
width, height = image.size | |
new_size = (int(width * upscale_factor), int(height * upscale_factor)) | |
upscaled_image = image.resize(new_size, Image.BICUBIC) | |
# Apply sharpness, contrast, and brightness adjustments | |
upscaled_image = ImageEnhance.Sharpness(upscaled_image).enhance(sharpness) | |
upscaled_image = ImageEnhance.Contrast(upscaled_image).enhance(contrast) | |
upscaled_image = ImageEnhance.Brightness(upscaled_image).enhance(brightness) | |
return upscaled_image | |
# Remastering function with background removal and enhancements | |
def remaster_image(image, remove_background=False, color_balance=1.0, detail_enhancement=1.0): | |
if remove_background: | |
image = rembg.remove(image) | |
# Apply color balance and detail enhancement | |
image = ImageEnhance.Color(image).enhance(color_balance) | |
image = ImageEnhance.Sharpness(image).enhance(detail_enhancement) | |
return image | |
# Main function combining upscaling and remastering | |
def process_image(image, apply_upscale=False, upscale_factor=2, sharpness=1.0, contrast=1.0, brightness=1.0, | |
apply_remaster=False, remove_background=False, color_balance=1.0, detail_enhancement=1.0): | |
if apply_upscale: | |
image = upscale_image(image, upscale_factor, sharpness, contrast, brightness) | |
if apply_remaster: | |
image = remaster_image(image, remove_background, color_balance, detail_enhancement) | |
return image | |
# Gradio UI | |
with gr.Blocks() as demo: | |
with gr.Row(): | |
image_input = gr.Image(label="Upload Image", type="pil") | |
image_output = gr.Image(label="Output Image") | |
with gr.Row(): | |
with gr.Group(): | |
gr.Markdown("### Upscaling Options") | |
upscale_checkbox = gr.Checkbox(label="Apply Upscaling") | |
upscale_factor = gr.Slider(1, 4, value=2, label="Upscale Factor") | |
sharpness = gr.Slider(0.5, 2.0, value=1.0, label="Sharpness") | |
contrast = gr.Slider(0.5, 2.0, value=1.0, label="Contrast") | |
brightness = gr.Slider(0.5, 2.0, value=1.0, label="Brightness") | |
with gr.Group(): | |
gr.Markdown("### Remastering Options") | |
remaster_checkbox = gr.Checkbox(label="Apply Remastering") | |
remove_background = gr.Checkbox(label="Remove Background") | |
color_balance = gr.Slider(0.5, 2.0, value=1.0, label="Color Balance") | |
detail_enhancement = gr.Slider(0.5, 2.0, value=1.0, label="Detail Enhancement") | |
process_button = gr.Button("Process Image") | |
process_button.click( | |
process_image, | |
inputs=[image_input, upscale_checkbox, upscale_factor, sharpness, contrast, brightness, | |
remaster_checkbox, remove_background, color_balance, detail_enhancement], | |
outputs=image_output | |
) | |
demo.launch() |