sd3-ControlNet / app.py
gaur3009's picture
Update app.py
47dd84b verified
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()