sd3-ControlNet / app.py
gaur3009's picture
Update app.py
47dd84b verified
raw
history blame
1.73 kB
import gradio as gr
import torch
import numpy as np
from PIL import Image
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel, UniPCMultistepScheduler
from diffusers.utils import make_image_grid
import cv2
controlnet = ControlNetModel.from_pretrained("lllyasviel/sd-controlnet-canny", torch_dtype=torch.float16, use_safetensors=True)
pipe = StableDiffusionControlNetPipeline.from_pretrained(
"stable-diffusion-v1-5/stable-diffusion-v1-5", controlnet=controlnet, torch_dtype=torch.float16, use_safetensors=True
)
pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config)
pipe.enable_model_cpu_offload()
def generate_image(input_image, text_prompt):
original_image = np.array(input_image)
low_threshold = 100
high_threshold = 200
edges = cv2.Canny(original_image, low_threshold, high_threshold)
edges = edges[:, :, None]
canny_image = np.concatenate([edges, edges, edges], axis=2)
canny_image_pil = Image.fromarray(canny_image)
output_image = pipe(text_prompt, image=canny_image_pil).images[0]
result_grid = make_image_grid([input_image, canny_image_pil, output_image], rows=1, cols=3)
return result_grid
with gr.Blocks() as demo:
gr.Markdown("# Image Transformation with ControlNet and Stable Diffusion")
with gr.Row():
with gr.Column():
input_image = gr.Image(type="pil", label="Upload Image", tool="editor")
text_prompt = gr.Textbox(label="Enter a prompt for the transformation")
generate_button = gr.Button("Generate Image")
result = gr.Image(label="Result", shape=(768, 256))
generate_button.click(fn=generate_image, inputs=[input_image, text_prompt], outputs=result)
demo.launch()