import gradio as gr import pandas as pd from pathlib import Path from PIL import Image import sys sys.path.insert(0, str(Path(__file__).parent.parent)) from hydit.constants import SAMPLER_FACTORY from sample_t2i import inferencer ROOT = Path(__file__).parent.parent SAMPLERS = list(SAMPLER_FACTORY.keys()) SIZES = { "square": (1024, 1024), "landscape": (768, 1280), "portrait": (1280, 768), } def get_strings(lang): lang_file = Path(f"app/lang/{lang}.csv") strings = pd.read_csv(lang_file, header=0) strings = strings.set_index("key")['value'].to_dict() return strings args, gen, enhancer = inferencer() strings = get_strings("en") def infer( prompt, negative_prompt, seed, cfg_scale, infer_steps, oriW, oriH, sampler, size, enhance ): if enhance and enhancer is not None: success, enhanced_prompt = enhancer(prompt) if not success: fail_image = Image.open(ROOT / 'app/fail.png') return fail_image else: enhanced_prompt = None height, width = SIZES[size] results = gen.predict(prompt, height=height, width=width, seed=seed, enhanced_prompt=enhanced_prompt, negative_prompt=negative_prompt, infer_steps=infer_steps, guidance_scale=cfg_scale, batch_size=1, src_size_cond=(oriW, oriH), sampler=sampler, ) image = results['images'][0] return image def ui(): block = gr.Blocks() description = f""" # {strings['title']} ## {strings['desc']} """ with block: with gr.Row(): gr.Markdown(description) with gr.Row(): with gr.Column(): with gr.Row(): size = gr.Radio( label=strings['size'], choices=[ (strings['square'], 'square'), (strings['landscape'], 'landscape'), (strings['portrait'], 'portrait'), ], value="square" ) prompt = gr.Textbox(label=strings['prompt'], value=strings['default prompt'], lines=3) with gr.Row(): infer_steps = gr.Slider( label=strings['infer steps'], minimum=1, maximum=200, value=100, step=1, ) seed = gr.Number( label=strings['seed'], minimum=-1, maximum=1_000_000_000, value=1, step=1, precision=0, ) enhance = gr.Checkbox( label=strings['enhance'], value=enhancer is not None, interactive=True, ) with gr.Accordion( strings['accordion'], open=False ): with gr.Row(): negative_prompt = gr.Textbox(label=strings['negative_prompt'], value=gen.default_negative_prompt, lines=2, ) with gr.Row(): sampler = gr.Dropdown(SAMPLERS, label=strings['sampler'], value="ddpm") cfg_scale = gr.Slider( label=strings['cfg'], minimum=1.0, maximum=16.0, value=6.0, step=1 ) oriW = gr.Number( label=strings['width cond'], minimum=1024, maximum=4096, value=1024, step=64, precision=0, min_width=80, ) oriH = gr.Number( label=strings['height cond'], minimum=1024, maximum=4096, value=1024, step=64, precision=0, min_width=80, ) with gr.Row(): advanced_button = gr.Button(strings['run']) with gr.Column(): default_img = Image.open(ROOT / 'app/default.png') output_img = gr.Image( label=strings['generated image'], interactive=False, format='png', value=default_img, ) advanced_button.click( fn=infer, inputs=[ prompt, negative_prompt, seed, cfg_scale, infer_steps, oriW, oriH, sampler, size, enhance, ], outputs=output_img, ) with gr.Row(): gr.Examples([ ['一只小猫'], ['现实主义风格,画面主要描述一个巴洛克风格的花瓶,带有金色的装饰边框,花瓶上盛开着各种色彩鲜艳的花,白色背景'], ['一只聪明的狐狸走在阔叶树林里, 旁边是一条小溪, 细节真实, 摄影'], ['飞流直下三千尺,疑是银河落九天'], ['一只长靴猫手持亮银色的宝剑,身着铠甲,眼神坚毅,站在一堆金币上,背景是暗色调的洞穴,图像上有金币的光影点缀。'], ['麻婆豆腐'], ['苏州园林'], ['一颗新鲜的草莓特写,红色的外表,表面布满许多种子,背景是淡绿色的叶子'], ['请画出“忽如一夜春风来 千树万树梨花开”'], ['请将“杞人忧天”的样子画出来'], ['枯藤老树昏鸦,小桥流水人家'], ['湖水清澈,天空湛蓝,阳光灿烂。一只优雅的白天鹅在湖边游泳。它周围有几只小鸭子,看起来非常可爱,整个画面给人一种宁静祥和的感觉。'], ['一朵鲜艳的红色玫瑰花,花瓣撒有一些水珠,晶莹剔透,特写镜头'], ['臭豆腐'], ['九寨沟'], ['俗语“鲤鱼跃龙门”'], ['风格是写实,画面主要描述一个亚洲戏曲艺术家正在表演,她穿着华丽的戏服,脸上戴着精致的面具,身姿优雅,背景是古色古香的舞台,镜头是近景'], ], [prompt], label=strings['examples'] ) return block if __name__ == "__main__": interface = ui() interface.launch()