File size: 2,655 Bytes
4f12a6e
 
e740229
 
4f12a6e
 
 
23a2028
4f12a6e
 
 
 
 
23a2028
 
 
 
4f12a6e
23a2028
 
 
 
eb45514
23a2028
 
 
 
 
4f12a6e
 
23a2028
4f12a6e
23a2028
4f12a6e
23a2028
 
4f12a6e
 
 
 
 
eb45514
4f12a6e
eb45514
23a2028
4f12a6e
 
 
23a2028
 
1c45b4a
9e050dc
344cce7
bab6e23
e740229
 
 
 
a3438df
e740229
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bab6e23
23a2028
 
 
 
 
 
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
import os
import io
# Workaround for PIL/Gradio bug :contentReference[oaicite:13]{index=13}
import PIL.Image
import gradio as gr
from gradio_client import Client, handle_file

from gradio_client.client import re
from numpy import array
# 1. Load your HF token from env
HF_TOKEN = os.getenv("HF_TOKEN")  # export HF_TOKEN="hf_..."
# 1) Connect to the Leffa Gradio app’s predict endpoint
# Use the full "/call/predict" API path as shown on the View API page
client = Client(
    "franciszzj/Leffa",
    hf_token=HF_TOKEN,
)  # Gradio Python client


def virtual_tryon(
    person_path,
    garment_path,
    garment_type,
):
    # 2) Wrap file inputs so Gradio client uploads them correctly
    person_file = handle_file(
        person_path
    )  # handle_file uploads the image :contentReference[oaicite:6]{index=6}
    garment_file = handle_file(garment_path)

    # 3) Build inputs in the exact order shown on the “Use via API” page :contentReference[oaicite:7]{index=7}

    # 4) Call the named endpoint with handle_file inputs
    result = client.predict(
        person_file,  # Person Image
        garment_file,  # Garment Image
        ref_acceleration=False,
        step=30,
        scale=2.5,
        seed=42,
        vt_model_type="viton_hd",
        vt_garment_type=garment_type,
        vt_repaint=False,
        api_name="/leffa_predict_vt",)
    # result[0] is the generated image filepath on the server
    return result[0]  # Gradio will download & display this file

    # 5) Gradio UI


with gr.Blocks(theme=gr.themes.Soft()) as demo:
    gr.Markdown("## V_TRY DEMO")
    with gr.Row():
        with gr.Column():
            gr.Markdown("####UPLOAD PERSON IMAGE")
            src = gr.Image(sources="upload", type="filepath",
                           label="Person Image")
        with gr.Column():
            gr.Markdown("####UPLOAD GARMENT IMAGE")
            ref = gr.Image(sources="upload", type="filepath",
                           label="Garment Image")
        with gr.Column():
            gr.Markdown("####Select the Garment type")
            garment_type = gr.Radio(
                choices=[("Upper", "upper_body"),
                         ("Lower", "lower_body"), ("Dress", "dresses")],
                value="upper_body",
                label="Garment Type",
            )
        with gr.Column():
            gr.Markdown("####Output Image")
            out = gr.Image(type="filepath", label="Result",)
            with gr.Row():
                btn = gr.Button("Generate")

        btn.click(virtual_tryon, [src, ref, garment_type], out)

demo.launch(
    share=True,
    show_error=True,
    pwa=True,
)