|
import gradio as gr |
|
from PIL import Image |
|
import torch |
|
from diffusers import StableDiffusionPipeline, StableDiffusionImg2ImgPipeline |
|
|
|
|
|
print("Loading models...") |
|
|
|
|
|
colorization_pipeline = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", torch_dtype=torch.float32) |
|
colorization_pipeline = colorization_pipeline.to("cpu") |
|
|
|
|
|
denoising_pipeline = StableDiffusionImg2ImgPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", torch_dtype=torch.float32) |
|
denoising_pipeline = denoising_pipeline.to("cpu") |
|
|
|
|
|
upscaling_pipeline = StableDiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-x4-upscaler", torch_dtype=torch.float32) |
|
upscaling_pipeline = upscaling_pipeline.to("cpu") |
|
|
|
|
|
def colorize_image(grayscale_image): |
|
grayscale_image = grayscale_image.convert("RGB").resize((512, 512)) |
|
prompt = "A colorful and realistic version of this grayscale photo." |
|
result = colorization_pipeline(prompt, image=grayscale_image) |
|
return result.images[0] |
|
|
|
def denoise_image(noisy_image, strength: float = 0.7): |
|
noisy_image = noisy_image.convert("RGB").resize((512, 512)) |
|
prompt = "A high-quality version of this image." |
|
result = denoising_pipeline(prompt, image=noisy_image, strength=strength) |
|
return result.images[0] |
|
|
|
def inpaint_image(base_image, mask_image): |
|
if mask_image is None: |
|
raise ValueError("Mask image is required for inpainting.") |
|
base_image = base_image.convert("RGB").resize((512, 512)) |
|
mask_image = mask_image.convert("RGB").resize((512, 512)) |
|
prompt = "A completed and visually realistic image with the missing parts filled in." |
|
result = colorization_pipeline(prompt, image=base_image, mask_image=mask_image) |
|
return result.images[0] |
|
|
|
def upscale_image(low_res_image): |
|
low_res_image = low_res_image.convert("RGB").resize((256, 256)) |
|
prompt = "An upscaled version of this image." |
|
result = upscaling_pipeline(prompt, image=low_res_image) |
|
return result.images[0] |
|
|
|
|
|
def process_image(task, image, mask=None): |
|
if task == "Colorize": |
|
return colorize_image(image) |
|
elif task == "Denoise": |
|
return denoise_image(image) |
|
elif task == "Inpaint": |
|
return inpaint_image(image, mask) |
|
elif task == "Upscale": |
|
return upscale_image(image) |
|
else: |
|
raise ValueError("Invalid task selected.") |
|
|
|
|
|
interface = gr.Interface( |
|
fn=process_image, |
|
inputs=[ |
|
gr.Dropdown( |
|
["Colorize", "Denoise", "Inpaint", "Upscale"], |
|
label="Select Task", |
|
value="Colorize" |
|
), |
|
gr.Image(type="pil", label="Upload Image"), |
|
gr.Image(type="pil", label="Upload Mask (for Inpainting)", value=None) |
|
], |
|
outputs=gr.Image(label="Processed Image"), |
|
title="AI-Powered Image Restoration", |
|
description=( |
|
"Select an image restoration task from the dropdown menu:\n\n" |
|
"- **Colorize**: Convert grayscale images to realistic color.\n" |
|
"- **Denoise**: Enhance image quality by removing noise.\n" |
|
"- **Inpaint**: Fill missing parts of an image using a mask.\n" |
|
"- **Upscale**: Increase image resolution while preserving details." |
|
) |
|
) |
|
|
|
if __name__ == "__main__": |
|
interface.launch(share=True) |
|
|