ldm3d-gaudi / app.py
shaoyent's picture
Update app.py
7cf1859 verified
raw
history blame contribute delete
No virus
4.8 kB
import gradio as gr
import requests
import json
import gradio as gr
import torch
from PIL import Image
from gradio_client import Client
theme = gr.themes.Base(
primary_hue=gr.themes.Color(
c100="#dbeafe", c200="#bfdbfe", c300="#93c5fd", c400="#60a5fa", c50="#eff6ff", c500="#0054ae", c600="#00377c", c700="#00377c", c800="#1e40af", c900="#1e3a8a", c950="#0a0c2b"),
secondary_hue=gr.themes.Color(
c100="#dbeafe", c200="#bfdbfe", c300="#93c5fd", c400="#60a5fa", c50="#eff6ff", c500="#0054ae", c600="#0054ae", c700="#0054ae", c800="#1e40af", c900="#1e3a8a", c950="#1d3660"),
).set(
body_background_fill_dark='*primary_950',
body_text_color_dark='#FFFFFF',
body_text_color='#000000',
border_color_accent='*primary_700',
border_color_accent_dark='*neutral_800',
block_background_fill_dark='*primary_950',
block_border_width='2px',
block_border_width_dark='2px',
button_primary_background_fill_dark='*primary_500',
button_primary_border_color_dark='*primary_500'
)
css='''
@font-face {
font-family: IntelOne;
src: url("file/assets/intelone-bodytext-font-family-regular.ttf");
}
table, td, tr {
border: none !important;
}
'''
html_title = '''
<table>
<tr style="height:150px">
<td style="border-bottom:0; vertical-align:middle">
<p style="font-size:xx-large;font-family:IntelOne, Georgia, sans-serif;color: var(--body-text-color);">
LDM3D: Latent Diffusion Model for 3D
</p>
</td>
<td style="border-bottom:0;"><img src="file/assets/gaudi.png" width="100" height="100"></td>
<td style="border-bottom:0;"><img src="file/assets/xeon.png" width="100" height="100"></td>
</tr>
</table>
'''
client = Client("http://198.175.88.247:17810/")
def build_iframe(rgb_path: str, depth_path: str, viewer_mode: str = "6DOF"):
if viewer_mode == "6DOF":
return f"""<iframe src="file=static/three6dof.html" width="100%" height="500px" data-rgb="/file={rgb_path}" data-depth="/file={depth_path}"></iframe>"""
else:
return f"""<iframe src="file=static/depthmap.html" width="100%" height="500px" data-rgb="/file={rgb_path}" data-depth="/file={depth_path}"></iframe>"""
def generate(
prompt: str,
negative_prompt: str,
guidance_scale: float = 5.0,
seed: int = 0,
randomize_seed: bool = True,
):
rgb_url, depth_url, generated_seed, _ = client.predict(
prompt, # str in 'Prompt' Textbox component
negative_prompt, # str in 'Negative Prompt' Textbox component
guidance_scale, # int | float (numeric value between 0 and 10) in 'Guidance Scale' Slider component
seed, # int | float (numeric value between 0 and 18446744073709551615) in 'Seed' Slider component
randomize_seed, # bool in 'Randomize Seed' Checkbox component
False, # bool in 'Upscale' Checkbox component
fn_index=1
)
iframe = build_iframe(rgb_url, depth_url)
return rgb_url, depth_url, generated_seed, iframe
with gr.Blocks(theme=theme, css=css) as demo:
gr.HTML(value=html_title)
gr.Markdown(
"""
[Model card](https://huggingface.co/Intel/ldm3d-pano)
[Diffusers docs](https://huggingface.co/docs/diffusers/main/en/api/pipelines/stable_diffusion/ldm3d_diffusion)
For better results, specify "360 view of" or "panoramic view of" in the prompt
"""
)
with gr.Row():
with gr.Column(scale=1):
prompt = gr.Textbox(label="Prompt")
negative_prompt = gr.Textbox(label="Negative Prompt")
guidance_scale = gr.Slider(
label="Guidance Scale", minimum=0, maximum=10, step=0.1, value=5.0
)
randomize_seed = gr.Checkbox(label="Randomize Seed", value=True)
seed = gr.Slider(label="Seed", minimum=0,
maximum=2**64 - 1, step=1)
generated_seed = gr.Number(label="Generated Seed")
markdown = gr.Markdown(label="Output Box")
with gr.Row():
new_btn = gr.Button("New Image")
with gr.Column(scale=2):
html = gr.HTML()
with gr.Row():
rgb = gr.Image(label="RGB Image", type="filepath")
depth = gr.Image(label="Depth Image", type="filepath")
gr.Examples(
examples=[
["360 view of a large bedroom", "", 7.0, 42, False]],
inputs=[prompt, negative_prompt, guidance_scale, seed, randomize_seed],
outputs=[rgb, depth, generated_seed, html],
fn=generate,
cache_examples=False)
new_btn.click(
fn=generate,
inputs=[prompt, negative_prompt, guidance_scale, seed, randomize_seed],
outputs=[rgb, depth, generated_seed, html],
)
demo.launch(
allowed_paths=["assets/", "static/", "/tmp/gradio/"]
)