File size: 4,970 Bytes
2c2acce f75e089 95ecf9b f75e089 a1f69bb 2c2acce 1949e8b 2c2acce 1949e8b a1f69bb 8d4c07e a1f69bb 25c2b12 a1f69bb 25c2b12 a1f69bb 1949e8b 3094469 25c2b12 657d017 8d4c07e 2c2acce 8d4c07e 2c2acce 8d4c07e 95ecf9b 8d4c07e 95ecf9b 8d4c07e 2c2acce 8d4c07e 3aef850 2c2acce 8d4c07e 2c2acce 8d4c07e 2c2acce 8d4c07e 2c2acce 8d4c07e 2c2acce 8d4c07e 2c2acce 3aef850 2c2acce 95ecf9b 1949e8b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
import gradio as gr
import os
from util.instantmesh import generate_mvs, make3d, preprocess, check_input_image
from util.text_img import generate_image, check_prompt
_CITE_ = r"""
```bibtex
@article{xu2024instantmesh,
title={InstantMesh: Efficient 3D Mesh Generation from a Single Image with Sparse-view Large Reconstruction Models},
author={Xu, Jiale and Cheng, Weihao and Gao, Yiming and Wang, Xintao and Gao, Shenghua and Shan, Ying},
journal={arXiv preprint arXiv:2404.07191},
year={2024}
}
```
"""
theme = gr.themes.Soft(
primary_hue="orange",
secondary_hue="gray",
neutral_hue="slate",
font=['Montserrat', gr.themes.GoogleFont('ui-sans-serif'), 'system-ui', 'sans-serif'],
)
with gr.Blocks(theme=theme) as GenDemo:
with gr.Tab("Text to Image Generator"):
with gr.Row(variant="panel"):
with gr.Column():
prompt = gr.Textbox(label="Enter a discription of a shoe")
negative_prompt = gr.Textbox(label="Negative Prompt", value="low quality, bad quality, sketches, legs")
select = gr.Dropdown(label="Select a model", choices=["Canny","Depth","Normal"])
scale = gr.Slider(label="Control Image Scale", minimum=0.1, maximum=1.0, step=0.1, value=0.5, visible=(select == "Canny"))
controlNet_image = gr.Image(label="Enter an image of a shoe, that you want to use as a reference", type='numpy')
gr.Examples(
examples=[
os.path.join("examples", img_name) for img_name in sorted(os.listdir("examples"))
],
inputs=[controlNet_image],
label="Examples",
cache_examples=False,
)
with gr.Column():
button_gen = gr.Button("Generate Image", elem_id="generateIm", variant="primary")
gen_image = gr.Image(label="Generated Image", image_mode="RGBA", type='pil', show_download_button=True, show_label=False)
select.change()
button_gen.click(check_prompt, inputs=[prompt]).success(generate_image, inputs=[prompt, negative_prompt, controlNet_image, scale], outputs=[gen_image])
with gr.Tab("Image to 3D Model Generator"):
with gr.Row(variant="panel"):
with gr.Column():
with gr.Row():
processed_image = gr.Image(
label="Processed Image",
image_mode="RGBA",
#width=256,
#height=256,
type="pil",
interactive=False
)
with gr.Row():
with gr.Group():
do_remove_background = gr.Checkbox(
label="Remove Background", value=True
)
sample_seed = gr.Number(value=42, label="Seed Value", precision=0)
sample_steps = gr.Slider(
label="Sample Steps",
minimum=30,
maximum=75,
value=75,
step=5
)
with gr.Row():
submit = gr.Button("Generate", elem_id="generate", variant="primary")
with gr.Column():
with gr.Row():
with gr.Column():
mv_show_images = gr.Image(
label="Generated Multi-views",
type="pil",
width=379,
interactive=False
)
with gr.Row():
with gr.Tab("glb"):
output_model_glb = gr.Model3D(
label="Output Model (GLB Format)",
interactive=False,
)
with gr.Tab("obj"):
output_model_obj = gr.Model3D(
label="Output Model (OBJ Format)",
interactive=False,
)
with gr.Row():
gr.Markdown('''Try a different <b>seed value</b> if the result is unsatisfying (Default: 42).''')
gr.Markdown(_CITE_)
mv_images = gr.State()
submit.click(fn=check_input_image, inputs=[gen_image]).success(
fn=preprocess,
inputs=[gen_image, do_remove_background],
outputs=[processed_image],
).success(
fn=generate_mvs,
inputs=[processed_image, sample_steps, sample_seed],
outputs=[mv_images, mv_show_images]
).success(
fn=make3d,
inputs=[mv_images],
outputs=[output_model_obj, output_model_glb]
)
GenDemo.launch() |