File size: 2,963 Bytes
00e7506
 
 
 
4cd25c8
00e7506
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4cd25c8
 
 
 
 
 
 
 
 
00e7506
4cd25c8
 
 
 
 
 
 
 
00e7506
4cd25c8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f31b35e
 
 
 
 
 
 
4cd25c8
 
 
 
 
 
 
00e7506
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
import torch
import requests
from PIL import Image
from diffusers import DiffusionPipeline, EulerAncestralDiscreteScheduler
import rembg

# Load the pipeline
pipeline = DiffusionPipeline.from_pretrained(
    "sudo-ai/zero123plus-v1.1", custom_pipeline="sudo-ai/zero123plus-pipeline",
    torch_dtype=torch.float16
)

# Feel free to tune the scheduler!
# `timestep_spacing` parameter is not supported in older versions of `diffusers`
# so there may be performance degradations
# We recommend using `diffusers==0.20.2`
pipeline.scheduler = EulerAncestralDiscreteScheduler.from_config(
    pipeline.scheduler.config, timestep_spacing='trailing'
)
pipeline.to('cuda:0')


def inference(input_img, num_inference_steps, guidance_scale, seed ):
    # Download an example image.
    cond = Image.open(input_img)
    
    # Run the pipeline!
    #result = pipeline(cond, num_inference_steps=75).images[0]
    result = pipeline(cond, num_inference_steps=num_inference_steps, 
                  guidance_scale=guidance_scale, 
                  generator=torch.Generator(pipeline.device).manual_seed(seed)).images[0]

    # for general real and synthetic images of general objects
    # usually it is enough to have around 28 inference steps
    # for images with delicate details like faces (real or anime)
    # you may need 75-100 steps for the details to construct
    
    #result.show()
    #result.save("output.png")
    return result

def remove_background(result):
    result = rembg.remove(result)
    return result


import gradio as gr

with gr.Blocks() as demo:
    gr.Markdown("<h1><center> Zero123++ Demo</center></h1>")
    with gr.Column():
      input_img = gr.Image(label='Input Image', tyoe='filepath')
    with gr.Column():
      output_img = gr.Image(label='Zero123++ Output')
    with gr.Accordion("Advanced options:", open=False):
      rm_in_bkg = gr.Checkbox(label='Remove Input Background', )
      rm_out_bkg = gr.Checkbox(label='Remove Output Background')
      num_inference_steps = gr.Slider(label="Number of Inference Steps",minimum=15, maximum=100, step=1, value=75, interactive=True)
      guidance_scale = gr.Slider(label="Classifier Free Guidance Scale",minimum=1.00, maximum=10.00, step=0.1, value=4.0, interactive=True)
      seed = gr.Number(0, label='Seed')
    btn = gr.Button('Submit')

    btn.click(inference, [input_img, num_inference_steps, guidance_scale, seed ], output_img)
    rm_in_bkg.input(remove_background, input_img, output_img)
    rm_out_bkg.input(remove_background, output_img, output_img)
    
    gr.Examples(
    examples=[["extinguisher.png", 75, 4.0, 0],
              ['mushroom.png', 75, 4.0, 0], 
              ['tianw2.png', 75, 4.0, 0], 
              ['lysol.png', 75, 4.0, 0], 
              ['ghost-eating-burger.png', 75, 4.0, 0]
             ],
    inputs=[input_img, num_inference_steps, guidance_scale, seed],
    outputs=output_img,
    fn=dummy,
    cache_examples=True,
      )


demo.launch()