Spaces:
Running
Running
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, | |
) | |