File size: 2,752 Bytes
f69cd15
eaa8689
f69cd15
1ecb321
 
 
eaa8689
1ecb321
 
eaa8689
 
 
 
 
 
 
1ecb321
eaa8689
1ecb321
534e5bb
 
 
 
f69cd15
 
 
 
 
1ecb321
 
f69cd15
 
 
 
 
1ecb321
f69cd15
 
 
 
1ecb321
 
 
f69cd15
 
 
 
1ecb321
f69cd15
 
 
 
4311e2a
f69cd15
 
 
 
 
1ecb321
f69cd15
4311e2a
f69cd15
 
fe775c6
f69cd15
 
fe775c6
eaa8689
fe775c6
1ecb321
f69cd15
 
 
534e5bb
 
 
 
 
 
 
 
1ecb321
eaa8689
1ecb321
f69cd15
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
import os
import cv2
from PIL import Image
import gradio as gr
import numpy as np
import random
import base64


def start_tryon(person_img, garment_img, seed, randomize_seed):
    if randomize_seed:
        seed = random.randint(0, MAX_SEED)
    encoded_person_img = cv2.imencode('.jpg', person_img)[1].tobytes()
    encoded_person_img = base64.b64encode(encoded_person_img).decode('utf-8')
    encoded_garment_img = cv2.imencode('.jpg', garment_img)[1].tobytes()
    encoded_garment_img = base64.b64encode(encoded_garment_img).decode('utf-8')
    
    return person_img, seed

MAX_SEED = 999999

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

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]

css="""
#col-left {
    margin: 0 auto;
    max-width: 600px;
}
#col-right {
    margin: 0 auto;
    max-width: 750px;
}
#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():
            imgs = gr.Image(label="Person image", sources='upload', type="numpy")
            # category = gr.Dropdown(label="Garment category", choices=['upper_body', 'lower_body', 'dresses'],  value="upper_body")
            example = gr.Examples(
                inputs=imgs,
                examples_per_page=10,
                examples=human_list_path
            )
        with gr.Column():
            garm_img = gr.Image(label="Garment image", sources='upload', type="numpy")
            example = gr.Examples(
                inputs=garm_img,
                examples_per_page=10,
                examples=garm_list_path)
        with gr.Column():
            image_out = gr.Image(label="Output", show_share_button=False)
            seed_used = gr.Number(label="Seed Used")
            try_button = gr.Button(value="Try-on", elem_id="button")


    with gr.Column():
        with gr.Accordion(label="Advanced Settings", open=False):
            seed = gr.Slider(
                    label="Seed",
                    minimum=0,
                    maximum=MAX_SEED,
                    step=1,
                    value=0,
                )
            randomize_seed = gr.Checkbox(label="Randomize seed", value=True)

    try_button.click(fn=start_tryon, inputs=[imgs, garm_img, seed, randomize_seed], outputs=[image_out, seed_used], api_name='tryon')

Tryon.queue(max_size=10).launch()