ELITE / app.py
csyxwei's picture
Update app.py
4e2d827
raw
history blame
3.56 kB
#!/usr/bin/env python
from __future__ import annotations
import pathlib
import gradio as gr
from model import Model
repo_dir = pathlib.Path(__file__).parent
def create_demo():
TITLE = '# [ELITE Demo](https://github.com/csyxwei/ELITE)'
USAGE='''To run the demo, you should:
1. Upload your image.
2. **Draw a mask on the object part.**
3. Input proper text prompts, such as "A photo of S" or "A S wearing sunglasses", where "S" denotes your customized concept.
4. Click the Run button. You can also adjust the hyperparameters to improve the results.
'''
model = Model()
with gr.Blocks(css=repo_dir / 'style.css') as demo:
gr.Markdown(TITLE)
gr.Markdown(USAGE)
with gr.Row():
with gr.Column():
with gr.Box():
image = gr.Image(label='Input', tool='sketch', type='pil')
# gr.Markdown('Draw a mask on your object.')
gr.Markdown('Upload your image and **draw a mask on the object part**')
prompt = gr.Text(
label='Prompt',
placeholder='e.g. "A photo of S", "A S wearing sunglasses"',
info='Use "S" for your concept.')
lambda_ = gr.Slider(
label='Lambda',
minimum=0,
maximum=1.5,
step=0.1,
value=0.6,
info=
'The larger the lambda, the more consistency between the generated image and the input image, but less editability.'
)
run_button = gr.Button('Run')
with gr.Accordion(label='Advanced options', open=False):
seed = gr.Slider(
label='Seed',
minimum=-1,
maximum=1000000,
step=1,
value=-1,
info=
'If set to -1, a different seed will be used each time.'
)
guidance_scale = gr.Slider(label='Guidance scale',
minimum=0,
maximum=50,
step=0.1,
value=5.0)
num_steps = gr.Slider(
label='Steps',
minimum=1,
maximum=100,
step=1,
value=300,
info=
'In the paper, the number of steps is set to 100, but in this demo the default value is 20 to reduce inference time.'
)
with gr.Column():
result = gr.Image(label='Result')
paths = sorted([
path.as_posix()
for path in (repo_dir / 'ELITE/test_datasets').glob('*')
if 'bg' not in path.stem
])
gr.Examples(examples=paths, inputs=image, examples_per_page=20)
inputs = [
image,
prompt,
seed,
guidance_scale,
lambda_,
num_steps,
]
prompt.submit(fn=model.run, inputs=inputs, outputs=result)
run_button.click(fn=model.run, inputs=inputs, outputs=result)
return demo
if __name__ == '__main__':
demo = create_demo()
demo.queue(api_open=False).launch()