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("input_image.png") # Run the script file subprocess.run(["python", "src/inversion.py", "--input_image", "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" 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: with gr.Row(): image_in = gr.Image(type="pil", label="Upload the image of a cat or a dog 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) 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="Edit the image!",visible=False) 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_name_radio.change(set_visible_true, [], btn_imageedit) task_name_radio.change(set_visible_true, [], image_out) btn_imageedit.click(image_edit,[task_name_radio],[image_out]) 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)