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()