mag / app.py
gnosticdev's picture
Create app.py
65731df verified
raw
history blame
2.68 kB
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()