Spaces:
Build error
Build error
Commit
·
9d8d63c
1
Parent(s):
5842b4a
Additional changes for style transfer and examples
Browse files- app.py +67 -20
- utils/shared_utils.py +1 -1
app.py
CHANGED
|
@@ -1,15 +1,41 @@
|
|
| 1 |
-
|
| 2 |
-
import numpy as np
|
| 3 |
import gradio as gr
|
| 4 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5 |
|
|
|
|
| 6 |
|
| 7 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
from torch import autocast
|
| 9 |
-
import torchvision.transforms as T
|
| 10 |
from contextlib import nullcontext
|
|
|
|
|
|
|
|
|
|
| 11 |
device = "cuda" if torch.cuda.is_available() else "cpu"
|
| 12 |
context = autocast if device == "cuda" else nullcontext
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 13 |
# Apply the transformations needed
|
| 14 |
|
| 15 |
|
|
@@ -32,8 +58,14 @@ def infer(prompt,samples):
|
|
| 32 |
return images
|
| 33 |
|
| 34 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 35 |
|
| 36 |
-
|
|
|
|
| 37 |
|
| 38 |
def change_bg_option(choice):
|
| 39 |
if choice == "I have an Image":
|
|
@@ -49,16 +81,16 @@ def change_bg_option(choice):
|
|
| 49 |
title = "FSDL- One-Shot, Green-Screen, Composition-Transfer"
|
| 50 |
DEFAULT_TEXT = "Photorealistic scenery of bookshelf in a room"
|
| 51 |
description = """
|
| 52 |
-
<center><a href="https://docs.google.com/document/d/1fde8XKIMT1nNU72859ytd2c58LFBxepS3od9KFBrJbM/edit?usp=sharing">[PAPER]</a>
|
| 53 |
<details>
|
| 54 |
<summary><b>Instructions</b></summary>
|
| 55 |
<p style="margin-top: -3px;">With this app, you can generate a suitable background image to overlay your portrait!<br />You have several ways to set how your final auto-edited image will look like:<br /></p>
|
| 56 |
<ul style="margin-top: -20px;margin-bottom: -15px;">
|
| 57 |
-
<li style="margin-bottom: -10px;margin-left: 20px;">Use the "<i>Inputs</i>" tab to either upload an image from your device
|
| 58 |
-
<li style="margin-left: 20px;">Use the "<i>Background Image Inputs</i>" to upload your own background</li>
|
| 59 |
-
<li style="margin-left: 20px;">Use the "<i>Text prompt</i>" tab to generate a satisfactory
|
| 60 |
</ul>
|
| 61 |
-
<p>After
|
| 62 |
</details>
|
| 63 |
"""
|
| 64 |
|
|
@@ -71,6 +103,13 @@ running = """
|
|
| 71 |
* **Smoothing** - Given than image resolutions and clarity can be an issue, this smoothing button makes your final image crisp after the stylization transfer. Fair warning - this last process can take 5-10 mins
|
| 72 |
"""
|
| 73 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 74 |
|
| 75 |
demo = gr.Blocks()
|
| 76 |
|
|
@@ -101,10 +140,7 @@ with demo:
|
|
| 101 |
placeholder="Enter your prompt to generate a background image... something like - Photorealistic scenery of bookshelf in a room")
|
| 102 |
|
| 103 |
samples = gr.Slider(label="Number of Images", minimum=1, maximum=5, value=2, step=1)
|
| 104 |
-
btn = gr.Button("Generate images",variant="primary")
|
| 105 |
-
margin=False,
|
| 106 |
-
rounded=(False, True, True, False),
|
| 107 |
-
)
|
| 108 |
|
| 109 |
gallery = gr.Gallery(label="Generated images", show_label=True).style(grid=(1, 3), height="auto")
|
| 110 |
# image_options = gr.Radio(label="Pick", interactive=True, choices=None, type="value")
|
|
@@ -130,10 +166,17 @@ with demo:
|
|
| 130 |
|
| 131 |
with gr.Row(scale=1):
|
| 132 |
|
| 133 |
-
with gr.
|
| 134 |
-
|
| 135 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 136 |
|
|
|
|
| 137 |
|
| 138 |
with gr.Column(scale=1):
|
| 139 |
style_btn = gr.Button("Composition-Transfer",variant="primary")
|
|
@@ -143,10 +186,14 @@ with demo:
|
|
| 143 |
submit_btn = gr.Button("Smoothen",variant="primary")
|
| 144 |
output_img = gr.Image(shape=(800, 800),label="FinalSmoothened Image",type="pil")
|
| 145 |
|
| 146 |
-
supimp_btn.click(fn=st.superimpose, inputs=[final_input_img, final_back_img], outputs=[overlay_img])
|
| 147 |
-
style_btn.click(fn=st.style_transfer, inputs=[overlay_img,
|
| 148 |
submit_btn.click(fn=st.smoother, inputs=[style_img,overlay_img], outputs=[output_img])
|
| 149 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 150 |
demo.queue()
|
| 151 |
demo.launch()
|
| 152 |
|
|
|
|
| 1 |
+
import os
|
|
|
|
| 2 |
import gradio as gr
|
| 3 |
+
from pathlib import Path
|
| 4 |
+
from diffusers import StableDiffusionPipeline
|
| 5 |
+
from PIL import Image
|
| 6 |
+
from huggingface_hub import notebook_login
|
| 7 |
+
|
| 8 |
+
from huggingface_hub import notebook_login
|
| 9 |
+
#if not (Path.home()/'.huggingface'/'token').exists():
|
| 10 |
+
#token = os.environ.get("HUGGING_FACE_HUB_TOKEN")
|
| 11 |
+
token = "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"
|
| 12 |
|
| 13 |
+
import src.utils.shared_utils as st
|
| 14 |
|
| 15 |
+
|
| 16 |
+
import torch, logging
|
| 17 |
+
logging.disable(logging.WARNING)
|
| 18 |
+
torch.cuda.empty_cache()
|
| 19 |
+
torch.manual_seed(3407)
|
| 20 |
from torch import autocast
|
|
|
|
| 21 |
from contextlib import nullcontext
|
| 22 |
+
torch.backends.cudnn.benchmark = True
|
| 23 |
+
|
| 24 |
+
model_id = "CompVis/stable-diffusion-v1-4"
|
| 25 |
device = "cuda" if torch.cuda.is_available() else "cpu"
|
| 26 |
context = autocast if device == "cuda" else nullcontext
|
| 27 |
+
|
| 28 |
+
# pipe = StableDiffusionPipeline.from_pretrained(model_id,use_auth_token=token).to(device)
|
| 29 |
+
#
|
| 30 |
+
#
|
| 31 |
+
# def infer_original(prompt,samples):
|
| 32 |
+
# with context(device):
|
| 33 |
+
# images = pipe(samples*[prompt], guidance_scale=7.5).images
|
| 34 |
+
# return images
|
| 35 |
+
|
| 36 |
+
|
| 37 |
+
|
| 38 |
+
|
| 39 |
# Apply the transformations needed
|
| 40 |
|
| 41 |
|
|
|
|
| 58 |
return images
|
| 59 |
|
| 60 |
|
| 61 |
+
# def newstyleimage(choice):
|
| 62 |
+
# print(choice)
|
| 63 |
+
# if choice == "yes":
|
| 64 |
+
# return gr.Image.update(visible=True,interactive=True)
|
| 65 |
+
# return
|
| 66 |
|
| 67 |
+
def styleimpose(final_input_img, ref_img):
|
| 68 |
+
return st.superimpose(final_input_img, ref_img)[0]
|
| 69 |
|
| 70 |
def change_bg_option(choice):
|
| 71 |
if choice == "I have an Image":
|
|
|
|
| 81 |
title = "FSDL- One-Shot, Green-Screen, Composition-Transfer"
|
| 82 |
DEFAULT_TEXT = "Photorealistic scenery of bookshelf in a room"
|
| 83 |
description = """
|
| 84 |
+
<center><a href="https://docs.google.com/document/d/1fde8XKIMT1nNU72859ytd2c58LFBxepS3od9KFBrJbM/edit?usp=sharing">[PAPER - Documentation]</a> </center>
|
| 85 |
<details>
|
| 86 |
<summary><b>Instructions</b></summary>
|
| 87 |
<p style="margin-top: -3px;">With this app, you can generate a suitable background image to overlay your portrait!<br />You have several ways to set how your final auto-edited image will look like:<br /></p>
|
| 88 |
<ul style="margin-top: -20px;margin-bottom: -15px;">
|
| 89 |
+
<li style="margin-bottom: -10px;margin-left: 20px;">Use the "<i>Inputs</i>" tab to either upload an image from your device OR allow the use of your webcam to capture</li>
|
| 90 |
+
<li style="margin-left: 20px;">Use the "<i>Background Image Inputs</i>" to upload your own background. OR</li>
|
| 91 |
+
<li style="margin-left: 20px;">Use the "<i>Text prompt</i>" tab to generate a satisfactory background image using Stable Diffusion.</li>
|
| 92 |
</ul>
|
| 93 |
+
<p>After deciding, just hit "<i>Select</i>" to ensure those images are processed.<br />The final image will be available for download <br /> <b>Enjoy!<b><p>
|
| 94 |
</details>
|
| 95 |
"""
|
| 96 |
|
|
|
|
| 103 |
* **Smoothing** - Given than image resolutions and clarity can be an issue, this smoothing button makes your final image crisp after the stylization transfer. Fair warning - this last process can take 5-10 mins
|
| 104 |
"""
|
| 105 |
|
| 106 |
+
style_message = """
|
| 107 |
+
This image above will be the content image. By default, the style will be copied from the input foreground image.
|
| 108 |
+
|
| 109 |
+
If you have a different image in mind, would you like to upload a different image?
|
| 110 |
+
Click yes to add a new style reference image"""
|
| 111 |
+
|
| 112 |
+
|
| 113 |
|
| 114 |
demo = gr.Blocks()
|
| 115 |
|
|
|
|
| 140 |
placeholder="Enter your prompt to generate a background image... something like - Photorealistic scenery of bookshelf in a room")
|
| 141 |
|
| 142 |
samples = gr.Slider(label="Number of Images", minimum=1, maximum=5, value=2, step=1)
|
| 143 |
+
btn = gr.Button("Generate images",variant="primary")
|
|
|
|
|
|
|
|
|
|
| 144 |
|
| 145 |
gallery = gr.Gallery(label="Generated images", show_label=True).style(grid=(1, 3), height="auto")
|
| 146 |
# image_options = gr.Radio(label="Pick", interactive=True, choices=None, type="value")
|
|
|
|
| 166 |
|
| 167 |
with gr.Row(scale=1):
|
| 168 |
|
| 169 |
+
with gr.Box():
|
| 170 |
+
with gr.Column(scale=1):
|
| 171 |
+
supimp_btn = gr.Button("SuperImpose")
|
| 172 |
+
overlay_img = gr.Image(shape=(800, 800), label="Overlay", type="pil")
|
| 173 |
+
gr.Markdown(style_message)
|
| 174 |
+
#img_choice = gr.Radio(choices= ["yes"],interactive=True,type='value')
|
| 175 |
+
ref_img = gr.Image(shape=(800, 800),label="Style Reference", type="pil",interactive=True)
|
| 176 |
+
ref_img2 = gr.Image(shape=(800, 800), label="Style Reference", type="pil", interactive=True, visible=False)
|
| 177 |
+
ref_btn = gr.Button("Use this style")
|
| 178 |
|
| 179 |
+
ref_btn.click(fn=styleimpose, inputs=[final_input_img, ref_img], outputs=[ref_img2])
|
| 180 |
|
| 181 |
with gr.Column(scale=1):
|
| 182 |
style_btn = gr.Button("Composition-Transfer",variant="primary")
|
|
|
|
| 186 |
submit_btn = gr.Button("Smoothen",variant="primary")
|
| 187 |
output_img = gr.Image(shape=(800, 800),label="FinalSmoothened Image",type="pil")
|
| 188 |
|
| 189 |
+
supimp_btn.click(fn=st.superimpose, inputs=[final_input_img, final_back_img], outputs=[overlay_img,ref_img])
|
| 190 |
+
style_btn.click(fn=st.style_transfer, inputs=[overlay_img,ref_img2], outputs=[style_img])
|
| 191 |
submit_btn.click(fn=st.smoother, inputs=[style_img,overlay_img], outputs=[output_img])
|
| 192 |
|
| 193 |
+
|
| 194 |
+
gr.Examples([["profile_new.png","back_img.png"]],[final_input_img, final_back_img])
|
| 195 |
+
gr.Examples([["profile_new.png","bedroom with a bookshelf in the background and a small stool to sit on the right side, photorealistic",3]], [final_input_img,text,samples])
|
| 196 |
+
|
| 197 |
demo.queue()
|
| 198 |
demo.launch()
|
| 199 |
|
utils/shared_utils.py
CHANGED
|
@@ -80,7 +80,7 @@ def memory_limit_image_resize(cont_img):
|
|
| 80 |
def superimpose(input_img,back_img):
|
| 81 |
matte_img = remove(input_img)
|
| 82 |
back_img.paste(matte_img, (0, 0), matte_img)
|
| 83 |
-
return back_img
|
| 84 |
|
| 85 |
|
| 86 |
|
|
|
|
| 80 |
def superimpose(input_img,back_img):
|
| 81 |
matte_img = remove(input_img)
|
| 82 |
back_img.paste(matte_img, (0, 0), matte_img)
|
| 83 |
+
return back_img,input_img
|
| 84 |
|
| 85 |
|
| 86 |
|