from diffusers.utils import load_image import cv2 from PIL import Image import numpy as np from diffusers import UniPCMultistepScheduler from pipeline_onnx_stable_diffusion_controlnet import OnnxStableDiffusionControlNetPipeline import onnxruntime as ort image = load_image( "input_image_vermeer.png" ) image = np.array(image) low_threshold = 100 high_threshold = 200 image = cv2.Canny(image, low_threshold, high_threshold) image = image[:, :, None] image = np.concatenate([image, image, image], axis=2) canny_image = Image.fromarray(image) opts = ort.SessionOptions() opts.enable_cpu_mem_arena = False opts.enable_mem_pattern = False pipe = OnnxStableDiffusionControlNetPipeline.from_pretrained( "model/sd1_5-fp16-vae_ft_mse-autoslicing-cn_canny", sess_options=opts, provider="DmlExecutionProvider", ) pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config) prompt = "jpop singer on stage, best quality, extremely detailed" seed=42 generator = np.random.RandomState(seed) images = pipe( prompt, canny_image, negative_prompt="monochrome, lowres, bad anatomy, worst quality, low quality", num_inference_steps=20, generator=generator, ).images[0] images.save("controlnet-canny-test.png")