File size: 3,859 Bytes
b267e96
 
 
 
 
 
f7a4562
 
9c91c6f
 
f7a4562
 
 
 
 
9c91c6f
 
 
b267e96
9c91c6f
 
 
b267e96
 
f7a4562
9c91c6f
 
 
 
b267e96
9c91c6f
 
 
f7a4562
9c91c6f
 
 
 
f7a4562
9c91c6f
 
b267e96
 
 
f7a4562
b267e96
f7a4562
 
 
 
 
 
 
b267e96
 
 
f7a4562
b267e96
2f400e5
9c91c6f
 
f7a4562
9c91c6f
2f400e5
9c91c6f
 
f7a4562
9c91c6f
2f400e5
9c91c6f
 
b267e96
2f400e5
b267e96
 
 
9c91c6f
 
b267e96
9c91c6f
 
 
 
 
 
b267e96
2f400e5
9c91c6f
f7a4562
9c91c6f
 
 
 
 
 
b267e96
 
9c91c6f
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
import os
import cv2
import gradio as gr
import numpy as np
import random

MAX_SEED = 999999
example_path = os.path.join(os.path.dirname(__file__), 'assets')

# Load example images
garm_list = os.listdir(os.path.join(example_path, "cloth"))
garm_list_path = [os.path.join(example_path, "cloth", garm) for garm in garm_list]
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]

def mock_tryon(person_img, garment_img, seed, randomize_seed, progress=gr.Progress()):
    progress(0, desc="Starting mock try-on...")
    
    if person_img is None or garment_img is None:
        gr.Warning("Please upload both images!")
        return None, None, "Error: Empty image"
    
    if randomize_seed:
        seed = random.randint(0, MAX_SEED)

    progress(0.3, desc="Processing person image...")
    # Convert to grayscale for demo (replace with actual try-on logic)
    person_gray = cv2.cvtColor(person_img, cv2.COLOR_RGB2GRAY)
    person_gray = cv2.cvtColor(person_gray, cv2.COLOR_GRAY2RGB)

    progress(0.6, desc="Adding garment...")
    # Resize garment to fit person (demo only)
    garment_resized = cv2.resize(garment_img, (person_img.shape[1], person_img.shape[0]))

    progress(0.8, desc="Blending images...")
    # Simple alpha blending (replace with real try-on)
    alpha = 0.7
    result = cv2.addWeighted(person_gray, 1-alpha, garment_resized, alpha, 0)

    progress(1.0, desc="Done!")
    return result, seed, "Mock try-on complete"

def load_description(fp):
    with open(fp, 'r', encoding='utf-8') as f:
        return f.read()

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; }
"""

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='text-align: center; font-size: 20px;'>Step 1. Upload person ⬇️</div>")
            imgs = gr.Image(label="Person", sources='upload', type="numpy")
            gr.Examples(inputs=imgs, examples_per_page=12, examples=human_list_path)
        
        with gr.Column(elem_id="col-mid"):
            gr.HTML("<div style='text-align: center; font-size: 20px;'>Step 2. Upload garment ⬇️</div>")
            garm_img = gr.Image(label="Garment", sources='upload', type="numpy")
            gr.Examples(inputs=garm_img, examples_per_page=12, examples=garm_list_path)
        
        with gr.Column(elem_id="col-right"):
            gr.HTML("<div style='text-align: center; font-size: 20px;'>Step 3. Click Run</div>")
            image_out = gr.Image(label="Result")
            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="Status")
            test_button = gr.Button("Run", elem_id="button")

    test_button.click(
        fn=mock_tryon,
        inputs=[imgs, garm_img, seed, randomize_seed],
        outputs=[image_out, seed_used, result_info],
        concurrency_limit=5
    )

    with gr.Column(elem_id="col-showcase"):
        gr.HTML("<div style='text-align: center; font-size: 20px;'>Examples</div>")
        gr.Examples(
            examples=[
                [human_list_path[0], garm_list_path[0]],  # First human + first garment
                [human_list_path[1], garm_list_path[1]],  # Second pair
            ],
            inputs=[imgs, garm_img],
            outputs=[image_out]
        )

Tryon.queue().launch()