File size: 5,741 Bytes
d519da8
 
1891461
db84e12
d519da8
 
 
e5f16f0
d38f1ca
d519da8
d4188d5
d519da8
b89c8a3
d519da8
 
 
 
 
 
 
 
 
e5f16f0
d38f1ca
d519da8
 
 
 
 
b896206
 
 
e5f16f0
d38f1ca
b896206
 
 
 
 
 
d519da8
 
 
 
 
 
 
 
42a2bba
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d519da8
e5f16f0
d519da8
b896206
d519da8
 
 
 
 
e5f16f0
d519da8
 
e5f16f0
eb96bac
 
 
 
 
 
 
b896206
d519da8
 
 
 
b896206
 
d519da8
 
eb96bac
d519da8
 
b896206
 
 
 
 
 
 
d519da8
 
 
 
 
 
 
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
import subprocess
from PIL import Image
import gradio as gr
 
# First, running the inversion command to obtain the input noise that will reconstruct the image. 
# It will save the inversion as output/test_cat/inversion/image-name.pt 
# BLIP-generated caption prompt is saved as output/test_cat/prompt/image-name.txt - eg., a painting of a cat sitting on top of a ball
def inversion(image_in):  #, progress=gr.Progress(track_tqdm=True)):
  #progress(0, desc="Starting...")
  # saving the input image
  image_in.save("assets/test_images/cats/input_image.png")
  # Run the script file
  subprocess.run(["python", "src/inversion.py", "--input_image", "assets/test_images/cats/input_image.png", "--results_folder", "output/test_cat"])
  # Open the text file with blip caption
  with open("output/test_cat/prompt/input_image.txt", "r") as file:
      # Read the file 
      prompt = file.read()
  return "output/test_cat/inversion/input_image.pt", prompt


# Performing image editing with the editing directions 
# This will save the edited image as output/test_cat/edit/image-name.png
def image_edit(task_name): #, progress=gr.Progress(track_tqdm=True)):
  #progress(0, desc="Starting...")
  # Run the script file
  subprocess.run(["python", "src/edit_real.py", "--inversion", "output/test_cat/inversion/input_image.pt", 
                  "--prompt", "output/test_cat/prompt/input_image.txt", "--task_name", task_name,
                  "--results_folder", "output/test_cat/"])
  return "output/test_cat/edit/input_image.png"


#Similarly, we can edit the synthetic images generated by Stable Diffusion with the following command.
def synthetic_image_edit(prompt, task_name): #, progress=gr.Progress(track_tqdm=True)):
  #progress(0, desc="Starting...")
  # Run the script file
  subprocess.run(["python", "src/edit_synthetic.py", "--prompt_str", prompt, 
                  "--task", task_name, "--results_folder", "output/synth_editing"])
  return "output/synth_editing/reconstruction.png", "output/synth_editing/edit.png"

    
def set_visible_true():
    return gr.update(visible=True)

def set_visible_False():
    return gr.update(visible=False)

#Gradio Blocks API
with gr.Blocks() as demo:
  gr.HTML("""<div style="text-align: center; max-width: 700px; margin: 0 auto;">
                    <div
                style="
                    display: inline-flex;
                    align-items: center;
                    gap: 0.8rem;
                    font-size: 1.75rem;
                "
                >
                <h1 style="font-weight: 900; margin-bottom: 7px; margin-top: 5px;">
                    Pix2Pix - Zero-shot Image-to-Image Translation
                </h1>
                </div>
                <p style="margin-bottom: 10px; font-size: 94%">
                This is an unofficial demo for <a href="https://pix2pixzero.github.io/" target="_blank">Pix2PixZero</a>. 
                Please visit their website and <a href="https://github.com/pix2pixzero/pix2pix-zero" target="_blank">github repo</a> for more details.
                </p></div>""")
  with gr.Row():
    image_in = gr.Image(type="pil", label="Start by uploading an image of a Cat or a Dog that you want to translate")
    with gr.Column():
      btn_inversion = gr.Button("Get input noise",visible=False )
      with gr.Row():
        blip_prompt = gr.Textbox(visible=False)
        inversion_file = gr.File(visible=False)
        #task_name = gr.Textbox()
  with gr.Row():
    image_out = gr.Image(visible=False, label="Translated Image output")
    with gr.Column():
      task_name_radio  = gr.Radio(choices = ["cat2dog", "dog2cat",], type="value", visible=False, label="Select a task that you want to accomplish") #, value="cat2dog"),
      btn_imageedit = gr.Button(value="Translate the image!",visible=False)
      html_tag = gr.HTML(value="""<h3 style="font-weight: 900; margin-bottom: 7px; margin-top: 5px;">
              Generate synthetic images using Stable Diffusion and Translate them on the fly using Pix2Pix-Zero</h3>""", visible=False)
      prompt_synth = gr.Textbox(visible=False, label="Type in a prompt to generate an Image using SD")
      btn_synth_image = gr.Button(value="Generate & Translate the SD image",visible=False)
      with gr.Row():
        image_synth = gr.Image(visible=False, label="Synthetic image generated by Stable Diffusion on the fly")
        image_synth_translated = gr.Image(visible=False, label="Translated synthetic image")

    btn_inversion.click(inversion,[image_in],[inversion_file, blip_prompt])
    btn_inversion.click(set_visible_true, [], task_name_radio)  #inversion_file, blip_prompt,
    btn_inversion.click(set_visible_False, [], btn_inversion)

    #task_initial_radio.change(set_visible_true, [], btn_imageedit)
    
    task_name_radio.change(set_visible_true, [], btn_imageedit)
    task_name_radio.change(set_visible_true, [], image_out)
    task_name_radio.change(set_visible_true, [], html_tag)

    btn_imageedit.click(image_edit,[task_name_radio],[image_out])
    btn_imageedit.click(set_visible_False, [], btn_imageedit)
    btn_imageedit.click(set_visible_true, [], prompt_synth)
    btn_imageedit.click(set_visible_true, [], btn_synth_image)
    btn_imageedit.click(set_visible_true, [], image_synth)
    btn_imageedit.click(set_visible_true, [], image_synth_translated)
    btn_synth_image.click(synthetic_image_edit,[prompt_synth, task_name_radio],[image_synth, image_synth_translated])

    image_in.clear(set_visible_true, [], btn_inversion)
    image_in.change(set_visible_true, [], btn_inversion)
    image_in.change(set_visible_true, [], blip_prompt)
    image_in.change(set_visible_true, [], inversion_file)

demo.queue(concurrency_count=3)
demo.launch(debug=True)