|
import numpy as np |
|
import gradio as gr |
|
|
|
from pipeline_onnx_stable_diffusion_instruct_pix2pix import OnnxStableDiffusionInstructPix2PixPipeline |
|
from diffusers import DDIMScheduler, EulerAncestralDiscreteScheduler, LMSDiscreteScheduler |
|
|
|
def pix2pix(input_img, prompt, guide, iguide, steps, seed): |
|
if seed == -1: |
|
generator=None |
|
else: |
|
generator=np.random |
|
generator.seed(seed) |
|
img = pipe( |
|
prompt=prompt, |
|
image=input_img, |
|
num_inference_steps=steps, |
|
guidance_scale=guide, |
|
image_guidance_scale=iguide, |
|
generator=generator).images[0] |
|
return img |
|
|
|
if __name__ == "__main__": |
|
model="./model/ip2p-base-fp16-vae_ft_mse-autoslicing" |
|
pipe = OnnxStableDiffusionInstructPix2PixPipeline.from_pretrained(model, provider="DmlExecutionProvider", safety_checker=None) |
|
pipe.scheduler=EulerAncestralDiscreteScheduler.from_pretrained(model, subfolder="scheduler") |
|
|
|
demo=gr.Interface(pix2pix, gr.Image(shape=(512,512)), "image") |
|
title="ONNX Instruct Pix 2 Pix" |
|
css = "#imgbox img {max-width: 100% !important; }\n#imgbox div {height: auto;}" |
|
with gr.Blocks(title=title, css=css) as demo: |
|
with gr.Row(): |
|
with gr.Column(scale=1): |
|
seed = gr.Number(value=-1, label="seed", precision=0) |
|
with gr.Column(scale=14): |
|
prompt = gr.Textbox(value="", lines=2, label="prompt") |
|
with gr.Row(): |
|
with gr.Column(scale=1): |
|
guide = gr.Slider(1.1, 10, value=3, step=0.1, label="Text guidance") |
|
with gr.Column(scale=1): |
|
iguide = gr.Slider(1, 10, value=1.1, step=0.1, label="Image guidance") |
|
with gr.Column(scale=1): |
|
steps = gr.Slider(10,100, value=30, step=1, label="Steps") |
|
with gr.Row(): |
|
with gr.Column(scale=1): |
|
input_img = gr.Image(label="Input Image", type="pil", elem_id="imgbox").style(width=600,height=600) |
|
with gr.Column(scale=1): |
|
image_out = gr.Image(value=None, label="Output Image", elem_id="imgbox").style(width=600,height=600) |
|
gen_btn = gr.Button("Generate", variant="primary", elem_id="gen_button") |
|
|
|
inputs=[input_img, prompt, guide, iguide, steps, seed] |
|
gen_btn.click(fn=pix2pix, inputs=inputs, outputs=[image_out]) |
|
|
|
demo.launch() |
|
|