import gradio as gr from backend.lcm_text_to_image import LCMTextToImage from backend.models.lcmdiffusion_setting import LCMLora, LCMDiffusionSetting from constants import DEVICE, LCM_DEFAULT_MODEL_OPENVINO from time import perf_counter import numpy as np from cv2 import imencode import base64 from backend.device import get_device_name from constants import APP_VERSION from backend.device import is_openvino_device import PIL lcm_text_to_image = LCMTextToImage() lcm_lora = LCMLora( base_model_id="Lykon/dreamshaper-7", lcm_lora_id="latent-consistency/lcm-lora-sdv1-5", ) # https://github.com/gradio-app/gradio/issues/2635#issuecomment-1423531319 def encode_pil_to_base64_new(pil_image): image_arr = np.asarray(pil_image)[:, :, ::-1] _, byte_data = imencode(".png", image_arr) base64_data = base64.b64encode(byte_data) base64_string_opencv = base64_data.decode("utf-8") return "data:image/png;base64," + base64_string_opencv # monkey patching encode pil gr.processing_utils.encode_pil_to_base64 = encode_pil_to_base64_new def predict( prompt, steps, seed, use_seed, ): lcm_text_to_image.init( model_id=LCM_DEFAULT_MODEL_OPENVINO, use_openvino=True, use_lora=False, lcm_lora=lcm_lora, use_tiny_auto_encoder=False, ) print(f"prompt - {prompt}") lcm_diffusion_setting = LCMDiffusionSetting() lcm_diffusion_setting.prompt = prompt lcm_diffusion_setting.guidance_scale = 1.0 lcm_diffusion_setting.inference_steps = steps lcm_diffusion_setting.seed = seed lcm_diffusion_setting.use_seed = use_seed lcm_diffusion_setting.use_safety_checker = True lcm_diffusion_setting.use_tiny_auto_encoder = True lcm_diffusion_setting.image_width = 320 if is_openvino_device() else 512 lcm_diffusion_setting.image_height = 320 if is_openvino_device() else 512 lcm_diffusion_setting.use_openvino = True if is_openvino_device() else False start = perf_counter() images = lcm_text_to_image.generate(lcm_diffusion_setting) latency = perf_counter() - start print(f"Latency: {latency:.2f} seconds") return images[0].resize([512, 512], PIL.Image.ANTIALIAS) css = """ #container{ margin: 0 auto; max-width: 40rem; } #intro{ max-width: 100%; text-align: center; margin: 0 auto; } #generate_button { color: white; border-color: #007bff; background: #007bff; width: 200px; height: 50px; } footer { visibility: hidden } """ def _get_footer_message() -> str: version = f"
{APP_VERSION} " footer_msg = version + ( ' © 2023 ' " Rupesh Sreeraman