File size: 4,437 Bytes
2c2acce
f75e089
95ecf9b
f75e089
a1f69bb
2c2acce
 
 
 
 
 
 
 
 
 
 
 
1949e8b
 
 
 
 
 
2c2acce
1949e8b
 
a1f69bb
8d4c07e
a1f69bb
 
 
 
 
 
 
 
 
 
 
 
 
 
1949e8b
8d4c07e
 
657d017
 
8d4c07e
 
 
 
 
 
 
 
 
 
 
2c2acce
8d4c07e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2c2acce
8d4c07e
95ecf9b
8d4c07e
95ecf9b
8d4c07e
 
 
 
 
 
 
2c2acce
8d4c07e
 
 
 
2c2acce
 
8d4c07e
 
2c2acce
8d4c07e
2c2acce
 
 
8d4c07e
2c2acce
8d4c07e
2c2acce
 
 
 
8d4c07e
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
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")
                scale = gr.Slider(label="Control Image Scale", minimum=0.1, maximum=1.0, step=0.1, value=0.5)
                control_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=[control_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", show_download_button=True, show_label=False)

        button_gen.click(check_prompt, inputs=[prompt]).success(generate_image, inputs=[prompt, negative_prompt, control_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():
                    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]
    )

GenDemo.launch()