Spaces:
Runtime error
Runtime error
| import os | |
| import cv2 | |
| import gradio as gr | |
| import numpy as np | |
| import random | |
| 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) | |
| # Create a copy of the person image to overlay text | |
| result_img = person_img.copy() | |
| # Convert the image to OpenCV format (if needed) | |
| if len(result_img.shape) == 2: # Convert grayscale to RGB | |
| result_img = cv2.cvtColor(result_img, cv2.COLOR_GRAY2RGB) | |
| # Set text position and properties | |
| text_position = (10, 30) | |
| font = cv2.FONT_HERSHEY_SIMPLEX | |
| font_scale = 1 | |
| font_color = (0, 255, 0) # Green color for the text | |
| thickness = 2 | |
| # Overlay the garment description text on the image | |
| cv2.putText(result_img, f'Garment: {garment_prompt}', text_position, font, font_scale, font_color, thickness, cv2.LINE_AA) | |
| post_end_time = time.time() | |
| print(f"post time used: {post_end_time - post_start_time}") | |
| # Return the resulting 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() | |