try-on-kolor / app.py
rishh76's picture
Update app.py
50ab3df verified
raw
history blame
5.39 kB
import os
import cv2
import spaces
from PIL import Image
import gradio as gr
import numpy as np
import random
import base64
import requests
import json
import time
def tryon(person_img, garment_prompt, seed, randomize_seed):
post_start_time = time.time()
if person_img is None or garment_prompt.strip() == "":
return None, None, "Empty image or prompt"
if randomize_seed:
seed = random.randint(0, MAX_SEED)
encoded_person_img = cv2.imencode('.jpg', cv2.cvtColor(person_img, cv2.COLOR_RGB2BGR))[1].tobytes()
encoded_person_img = base64.b64encode(encoded_person_img).decode('utf-8')
# Simulate generation of garment image from text prompt
generated_garment_img = np.zeros((person_img.shape[0], person_img.shape[1], 3), dtype=np.uint8) # Dummy garment image (black)
# Encode the generated garment image
encoded_garment_img = cv2.imencode('.jpg', generated_garment_img)[1].tobytes()
encoded_garment_img = base64.b64encode(encoded_garment_img).decode('utf-8')
# Simulate request processing (no external API calls)
time.sleep(1)
# Decoding process (dummy)
result_img = cv2.imdecode(np.frombuffer(base64.b64decode(encoded_garment_img), np.uint8), cv2.IMREAD_UNCHANGED)
result_img = cv2.cvtColor(result_img, cv2.COLOR_RGB2BGR)
post_end_time = time.time()
print(f"post time used: {post_end_time - post_start_time}")
# Return the simulated result image, used seed, and success message
return result_img, seed, "Success"
MAX_SEED = 999999
example_path = os.path.join(os.path.dirname(__file__), 'assets')
human_list = os.listdir(os.path.join(example_path, "human"))
human_list_path = [os.path.join(example_path, "human", human) for human in human_list]
css = """
#col-left {
margin: 0 auto;
max-width: 430px;
}
#col-mid {
margin: 0 auto;
max-width: 430px;
}
#col-right {
margin: 0 auto;
max-width: 430px;
}
#col-showcase {
margin: 0 auto;
max-width: 1100px;
}
#button {
color: blue;
}
"""
def load_description(fp):
with open(fp, 'r', encoding='utf-8') as f:
content = f.read()
return content
with gr.Blocks(css=css) as Tryon:
gr.HTML(load_description("assets/title.md"))
with gr.Row():
with gr.Column(elem_id="col-left"):
gr.HTML("""
<div style="display: flex; justify-content: center; align-items: center; text-align: center; font-size: 20px;">
<div>
Step 1. Upload a person image ⬇️
</div>
</div>
""")
with gr.Column(elem_id="col-mid"):
gr.HTML("""
<div style="display: flex; justify-content: center; align-items: center; text-align: center; font-size: 20px;">
<div>
Step 2. Enter a text prompt for the garment ⬇️
</div>
</div>
""")
with gr.Column(elem_id="col-right"):
gr.HTML("""
<div style="display: flex; justify-content: center; align-items: center; text-align: center; font-size: 20px;">
<div>
Step 3. Press “Run” to get try-on results
</div>
</div>
""")
with gr.Row():
with gr.Column(elem_id="col-left"):
imgs = gr.Image(label="Person image", sources='upload', type="numpy")
example = gr.Examples(
inputs=imgs,
examples_per_page=12,
examples=human_list_path
)
with gr.Column(elem_id="col-mid"):
garment_prompt = gr.Textbox(label="Garment text prompt", placeholder="Describe the garment...")
with gr.Column(elem_id="col-right"):
image_out = gr.Image(label="Result", show_share_button=False)
with gr.Row():
seed = gr.Slider(
label="Seed",
minimum=0,
maximum=MAX_SEED,
step=1,
value=0,
)
randomize_seed = gr.Checkbox(label="Random seed", value=True)
with gr.Row():
seed_used = gr.Number(label="Seed used")
result_info = gr.Text(label="Response")
test_button = gr.Button(value="Run", elem_id="button")
test_button.click(fn=tryon, inputs=[imgs, garment_prompt, seed, randomize_seed], outputs=[image_out, seed_used, result_info], concurrency_limit=40)
with gr.Column(elem_id="col-showcase"):
gr.HTML("""
<div style="display: flex; justify-content: center; align-items: center; text-align: center; font-size: 20px;">
<div> </div>
<br>
<div>
Virtual try-on examples in pairs of person and garment images
</div>
</div>
""")
show_case = gr.Examples(
examples=[
["assets/examples/model2.png", "assets/examples/garment2.png", "assets/examples/result2.png"],
["assets/examples/model3.png", "assets/examples/garment3.png", "assets/examples/result3.png"],
["assets/examples/model1.png", "assets/examples/garment1.png", "assets/examples/result1.png"],
],
inputs=[imgs, garment_prompt, image_out],
label=None
)
Tryon.launch()