File size: 4,254 Bytes
360d274 c4cebf6 ba13333 c4cebf6 360d274 a8e0053 360d274 2b5958f 360d274 6fc6fbe 2b5958f 360d274 a5a9510 360d274 2b5958f 360d274 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
from typing import Any
import gradio as gr
from backend.models.lcmdiffusion_setting import DiffusionTask
from context import Context
from models.interface_types import InterfaceType
from frontend.utils import is_reshape_required
from constants import DEVICE
from state import get_settings
from concurrent.futures import ThreadPoolExecutor
app_settings = get_settings()
context = Context(InterfaceType.WEBUI)
previous_width = 0
previous_height = 0
previous_model_id = ""
previous_num_of_images = 0
def generate_image_to_image(
prompt,
negative_prompt,
init_image,
strength,
) -> Any:
global previous_height, previous_width, previous_model_id, previous_num_of_images, app_settings
w, h = init_image.size
newW = app_settings.settings.lcm_diffusion_setting.image_width
newH = int(h * newW / w)
img = init_image.resize((newW, newH))
print("新图",newH,newW)
app_settings.settings.lcm_diffusion_setting.prompt = prompt
app_settings.settings.lcm_diffusion_setting.negative_prompt = negative_prompt
app_settings.settings.lcm_diffusion_setting.init_image = img
app_settings.settings.lcm_diffusion_setting.strength = strength
app_settings.settings.lcm_diffusion_setting.diffusion_task = (
DiffusionTask.image_to_image.value
)
model_id = app_settings.settings.lcm_diffusion_setting.openvino_lcm_model_id
reshape = False
app_settings.settings.lcm_diffusion_setting.image_height=newH
image_width = app_settings.settings.lcm_diffusion_setting.image_width
image_height = app_settings.settings.lcm_diffusion_setting.image_height
num_images = app_settings.settings.lcm_diffusion_setting.number_of_images
if app_settings.settings.lcm_diffusion_setting.use_openvino:
reshape = is_reshape_required(
previous_width,
image_width,
previous_height,
image_height,
previous_model_id,
model_id,
previous_num_of_images,
num_images,
)
with ThreadPoolExecutor(max_workers=1) as executor:
future = executor.submit(
context.generate_text_to_image,
app_settings.settings,
reshape,
DEVICE,
)
images = future.result()
# images = context.generate_text_to_image(
# app_settings.settings,
# reshape,
# DEVICE,
# )
previous_width = image_width
previous_height = image_height
previous_model_id = model_id
previous_num_of_images = num_images
return images
def get_image_to_image_ui() -> None:
with gr.Blocks():
with gr.Row():
with gr.Column():
input_image = gr.Image(label="Init image", type="pil")
with gr.Row():
prompt = gr.Textbox(
show_label=False,
lines=3,
placeholder="A fantasy landscape",
container=False,
)
generate_btn = gr.Button(
"Generate",
elem_id="generate_button",
scale=0,
)
negative_prompt = gr.Textbox(
label="Negative prompt (Works in LCM-LoRA mode, set guidance > 1.0):",
lines=1,
placeholder="",
)
strength = gr.Slider(
0.1,
1,
value=app_settings.settings.lcm_diffusion_setting.strength,
step=0.01,
label="Strength",
)
input_params = [
prompt,
negative_prompt,
input_image,
strength,
]
with gr.Column():
output = gr.Gallery(
label="Generated images",
show_label=True,
elem_id="gallery",
columns=2,
height=512,
)
generate_btn.click(
fn=generate_image_to_image,
inputs=input_params,
outputs=output,
)
|