fastsdcpu / frontend /webui /text_to_image_ui.py
rupeshs's picture
changed upscaling
6c8f4d4
raw
history blame
5.63 kB
from typing import Any
import gradio as gr
from backend.models.lcmdiffusion_setting import LCMDiffusionSetting
from context import Context
from models.interface_types import InterfaceType
from app_settings import Settings
from constants import LCM_DEFAULT_MODEL, LCM_DEFAULT_MODEL_OPENVINO
from frontend.utils import is_reshape_required
from app_settings import AppSettings
from constants import DEVICE
from frontend.utils import enable_openvino_controls
from scipy.ndimage import zoom
import numpy as np
from PIL import Image
random_enabled = True
context = Context(InterfaceType.WEBUI)
previous_width = 0
previous_height = 0
previous_model_id = ""
previous_num_of_images = 0
def generate_text_to_image(
prompt,
inference_steps,
guidance_scale,
seed,
use_openvino,
use_safety_checker,
) -> Any:
global previous_height, previous_width, previous_model_id, previous_num_of_images
model_id = LCM_DEFAULT_MODEL
if use_openvino:
model_id = LCM_DEFAULT_MODEL_OPENVINO
use_seed = True if seed != -1 else False
lcm_diffusion_settings = LCMDiffusionSetting(
lcm_model_id=model_id,
prompt=prompt,
image_height=384,
image_width=384,
inference_steps=inference_steps,
guidance_scale=guidance_scale,
number_of_images=1,
seed=seed,
use_openvino=use_openvino,
use_safety_checker=use_safety_checker,
use_seed=use_seed,
)
settings = Settings(
lcm_diffusion_setting=lcm_diffusion_settings,
)
reshape = False
if use_openvino:
reshape = is_reshape_required(
previous_width,
384,
previous_height,
384,
previous_model_id,
model_id,
previous_num_of_images,
1,
)
images = context.generate_text_to_image(
settings,
reshape,
DEVICE,
)
previous_width = 384
previous_height = 384
previous_model_id = model_id
previous_num_of_images = 1
out_images = []
for image in images:
out_images.append(image.resize((768, 768),resample=Image.LANCZOS))
return out_images
def get_text_to_image_ui(app_settings: AppSettings) -> None:
with gr.Blocks():
with gr.Row():
with gr.Column():
def random_seed():
global random_enabled
random_enabled = not random_enabled
seed_val = -1
if not random_enabled:
seed_val = 42
return gr.Number.update(
interactive=not random_enabled, value=seed_val
)
with gr.Row():
prompt = gr.Textbox(
label="Describe the image you'd like to see",
lines=3,
placeholder="A fantasy landscape",
)
generate_btn = gr.Button(
"Generate",
elem_id="generate_button",
scale=0,
)
with gr.Accordion("Advanced options", open=False):
guidance_scale = gr.Slider(
1.0, 30.0, value=8, step=0.5, label="Guidance Scale"
)
seed = gr.Number(
label="Seed",
value=-1,
precision=0,
interactive=False,
)
seed_checkbox = gr.Checkbox(
label="Use random seed",
value=True,
interactive=True,
)
openvino_checkbox = gr.Checkbox(
label="Use OpenVINO",
value=True,
interactive=False,
)
safety_checker_checkbox = gr.Checkbox(
label="Use Safety Checker",
value=True,
interactive=True,
)
num_inference_steps = gr.Slider(
1, 8, value=4, step=1, label="Inference Steps"
)
# image_height = gr.Slider(
# 256, 768, value=384, step=64, label="Image Height",interactive=Fa
# )
# image_width = gr.Slider(
# 256, 768, value=384, step=64, label="Image Width"
# )
# num_images = gr.Slider(
# 1,
# 50,
# value=1,
# step=1,
# label="Number of images to generate",
# )
input_params = [
prompt,
num_inference_steps,
guidance_scale,
seed,
openvino_checkbox,
safety_checker_checkbox,
]
with gr.Column():
output = gr.Gallery(
label="Generated images",
show_label=True,
elem_id="gallery",
columns=2,
)
seed_checkbox.change(fn=random_seed, outputs=seed)
generate_btn.click(
fn=generate_text_to_image,
inputs=input_params,
outputs=output,
)