Spaces:
Running
Running
import gradio as gr | |
from PIL import Image | |
import torch | |
from diffusers import StableDiffusionInpaintPipeline, StableDiffusionUpscalePipeline | |
import numpy as np | |
def process_image(image, prompt, mode, scale_factor=2): | |
if mode == "upscale": | |
# Upscale pipeline | |
pipeline = StableDiffusionUpscalePipeline.from_pretrained( | |
"stabilityai/stable-diffusion-x4-upscaler" | |
) | |
pipeline.to("cuda" if torch.cuda.is_available() else "cpu") | |
# Process image | |
upscaled_image = pipeline( | |
prompt=prompt, | |
image=image, | |
noise_level=20, | |
num_inference_steps=20 | |
).images[0] | |
return upscaled_image | |
elif mode == "inpaint": | |
# Inpainting pipeline | |
pipeline = StableDiffusionInpaintPipeline.from_pretrained( | |
"runwayml/stable-diffusion-inpainting" | |
) | |
pipeline.to("cuda" if torch.cuda.is_available() else "cpu") | |
# Create mask for extending the image | |
width, height = image.size | |
mask = Image.new('RGB', (width, height), 'white') | |
# Process image | |
result = pipeline( | |
prompt=prompt, | |
image=image, | |
mask_image=mask, | |
num_inference_steps=20 | |
).images[0] | |
return result | |
# Gradio Interface | |
def create_interface(): | |
with gr.Blocks(title="AI Image Enhancement") as interface: | |
gr.Markdown("# AI Image Enhancement Studio") | |
gr.Markdown("Enhance, upscale, and recreate images using AI") | |
with gr.Row(): | |
with gr.Column(): | |
input_image = gr.Image(type="pil", label="Upload Image") | |
prompt = gr.Textbox(label="Prompt", placeholder="Describe the desired enhancement...") | |
mode = gr.Radio( | |
choices=["upscale", "inpaint"], | |
label="Processing Mode", | |
value="upscale" | |
) | |
scale_factor = gr.Slider( | |
minimum=2, | |
maximum=8, | |
step=2, | |
label="Upscale Factor", | |
value=2 | |
) | |
process_btn = gr.Button("Process Image") | |
with gr.Column(): | |
output_image = gr.Image(type="pil", label="Enhanced Result") | |
process_btn.click( | |
fn=process_image, | |
inputs=[input_image, prompt, mode, scale_factor], | |
outputs=output_image | |
) | |
return interface | |
if __name__ == "__main__": | |
interface = create_interface() | |
interface.launch() |