Saba99/OutfitAnyone
1
1import os2import cv23import numpy as np4import json5import random6from PIL import Image, ImageDraw, ImageFont7import asyncio8 9import requests10import base6411import gradio as gr12# from IPython import embed13 14machine_number = 015model = os.path.join(os.path.dirname(__file__), "models/eva/Eva_0.png")16 17MODEL_MAP = {18 "AI Model Rouyan_0": 'models/rouyan_new/Rouyan_0.png',19 "AI Model Rouyan_1": 'models/rouyan_new/Rouyan_1.png',20 "AI Model Rouyan_2": 'models/rouyan_new/Rouyan_2.png',21 "AI Model Eva_0": 'models/eva/Eva_0.png',22 "AI Model Eva_1": 'models/eva/Eva_1.png',23 "AI Model Simon_0": 'models/simon_online/Simon_0.png',24 "AI Model Simon_1": 'models/simon_online/Simon_1.png',25 "AI Model Xuanxuan_0": 'models/xiaoxuan_online/Xuanxuan_0.png',26 "AI Model Xuanxuan_1": 'models/xiaoxuan_online/Xuanxuan_1.png',27 "AI Model Xuanxuan_2": 'models/xiaoxuan_online/Xuanxuan_2.png',28 "AI Model Yaqi_0": 'models/yaqi/Yaqi_0.png',29 "AI Model Yaqi_1": 'models/yaqi/Yaqi_1.png',30 "AI Model Yaqi_2": 'models/yaqi/Yaqi_2.png',31 "AI Model Yaqi_3": 'models/yaqi/Yaqi_3.png',32 "AI Model Yifeng_0": 'models/yifeng_online/Yifeng_0.png',33 "AI Model Yifeng_1": 'models/yifeng_online/Yifeng_1.png',34 "AI Model Yifeng_2": 'models/yifeng_online/Yifeng_2.png',35 "AI Model Yifeng_3": 'models/yifeng_online/Yifeng_3.png',36}37 38def add_waterprint(img):39 40 h, w, _ = img.shape41 img = cv2.putText(img, 'Powered by OutfitAnyone', (int(0.3*w), h-20), cv2.FONT_HERSHEY_PLAIN, 2, (128, 128, 128), 2, cv2.LINE_AA)42 43 return img44 45 46def get_tryon_result(model_name, garment1, garment2, seed=1234):47 48 # model_name = "AI Model " + model_name.split("\\")[-1].split(".")[0] # windows49 model_name = "AI Model " + model_name.split("/")[-1].split(".")[0] # linux50 print(model_name)51 52 encoded_garment1 = cv2.imencode('.jpg', garment1)[1].tobytes()53 encoded_garment1 = base64.b64encode(encoded_garment1).decode('utf-8')54 55 if garment2 is not None:56 encoded_garment2 = cv2.imencode('.jpg', garment2)[1].tobytes()57 encoded_garment2 = base64.b64encode(encoded_garment2).decode('utf-8')58 else:59 encoded_garment2 = ''60 61 url = os.environ['OA_IP_ADDRESS']62 headers = {'Content-Type': 'application/json'}63 seed = random.randint(0, 1222222222)64 data = {65 "garment1": encoded_garment1,66 "garment2": encoded_garment2,67 "model_name": model_name,68 "seed": seed69 }70 response = requests.post(url, headers=headers, data=json.dumps(data))71 print("response code", response.status_code)72 if response.status_code == 200:73 result = response.json()74 result = base64.b64decode(result['images'][0])75 result_np = np.frombuffer(result, np.uint8)76 result_img = cv2.imdecode(result_np, cv2.IMREAD_UNCHANGED)77 else:78 print('server error!')79 80 81 final_img = add_waterprint(result_img)82 83 return final_img84 85 86 87with gr.Blocks(css = ".output-image, .input-image, .image-preview {height: 400px !important} ") as demo:88 # gr.Markdown("# Outfit Anyone v0.9")89 gr.HTML(90 """91 <div style="display: flex; justify-content: center; align-items: center; text-align: center;">92 <a href="https://github.com/HumanAIGC/OutfitAnyone" style="margin-right: 20px; text-decoration: none; display: flex; align-items: center;">93 </a>94 <div>95 <h1 >Outfit Anyone: Ultra-high quality virtual try-on for Any Clothing and Any Person</h1>96 <h4 >v0.9</h4>97 <h5 style="margin: 0;">If you like our project, please give us a star on Github to stay updated with the latest developments.</h5>98 <div style="display: flex; justify-content: center; align-items: center; text-align: center;>99 <a href="https://github.com/HumanAIGC/OutfitAnyone"><img src="https://img.shields.io/badge/Arxiv-0000.00000-red"></a>100 <a href='https://humanaigc.github.io/outfit-anyone/'><img src='https://img.shields.io/badge/Project_Page-OutfitAnyone-green' alt='Project Page'></a>101 <a href='https://github.com/HumanAIGC/OutfitAnyone'><img src='https://img.shields.io/badge/Github-Repo-blue'></a>102 </div>103 </div>104 </div>105 """)106 with gr.Row():107 with gr.Column():108 init_image = gr.Image(sources='clipboard', type="filepath", label="model", value=model)109 example = gr.Examples(inputs=init_image,110 examples_per_page=4,111 examples=[os.path.join(os.path.dirname(__file__), MODEL_MAP.get('AI Model Rouyan_0')),112 os.path.join(os.path.dirname(__file__), MODEL_MAP.get('AI Model Rouyan_2')),113 os.path.join(os.path.dirname(__file__), MODEL_MAP.get('AI Model Eva_0')),114 os.path.join(os.path.dirname(__file__), MODEL_MAP.get('AI Model Simon_1')),115 os.path.join(os.path.dirname(__file__), MODEL_MAP.get('AI Model Eva_1')),116 os.path.join(os.path.dirname(__file__), MODEL_MAP.get('AI Model Simon_0')),117 os.path.join(os.path.dirname(__file__), MODEL_MAP.get('AI Model Xuanxuan_0')),118 os.path.join(os.path.dirname(__file__), MODEL_MAP.get('AI Model Xuanxuan_2')),119 os.path.join(os.path.dirname(__file__), MODEL_MAP.get('AI Model Yaqi_1')),120 os.path.join(os.path.dirname(__file__), MODEL_MAP.get('AI Model Yifeng_0')),121 os.path.join(os.path.dirname(__file__), MODEL_MAP.get('AI Model Yifeng_3')),122 os.path.join(os.path.dirname(__file__), MODEL_MAP.get('AI Model Rouyan_1')),123 os.path.join(os.path.dirname(__file__), MODEL_MAP.get('AI Model Yifeng_2')),124 os.path.join(os.path.dirname(__file__), MODEL_MAP.get('AI Model Yaqi_0')),125 ])126 with gr.Column():127 gr.HTML(128 """129 <div style="display: flex; justify-content: center; align-items: center; text-align: center;">130 <div>131 <h3>Models are fixed and cannot be uploaded or modified; we only support users uploading their own garments.</h3>132 <h4 style="margin: 0;">For a one-piece dress or coat, you only need to upload the image to the 'top garment' section and leave the 'lower garment' section empty.</h4>133 </div>134 </div>135 """)136 with gr.Row():137 garment_top = gr.Image(sources='upload', type="numpy", label="top garment")138 example_top = gr.Examples(inputs=garment_top,139 examples_per_page=5,140 examples=[os.path.join(os.path.dirname(__file__), "garments/top222.JPG"),141 os.path.join(os.path.dirname(__file__), "garments/top5.png"),142 os.path.join(os.path.dirname(__file__), "garments/top333.png"),143 os.path.join(os.path.dirname(__file__), "garments/dress1.png"),144 os.path.join(os.path.dirname(__file__), "garments/dress2.png"),145 ])146 garment_down = gr.Image(sources='upload', type="numpy", label="lower garment")147 example_down = gr.Examples(inputs=garment_down,148 examples_per_page=5,149 examples=[os.path.join(os.path.dirname(__file__), "garments/bottom1.png"),150 os.path.join(os.path.dirname(__file__), "garments/bottom2.PNG"),151 os.path.join(os.path.dirname(__file__), "garments/bottom3.JPG"),152 os.path.join(os.path.dirname(__file__), "garments/bottom4.PNG"),153 os.path.join(os.path.dirname(__file__), "garments/bottom5.png"),154 ])155 156 run_button = gr.Button(value="Run")157 with gr.Column():158 gallery = gr.Image()159 160 run_button.click(fn=get_tryon_result, 161 inputs=[162 init_image,163 garment_top,164 garment_down,165 ], 166 outputs=[gallery],167 concurrency_limit=2)168 169 170 # Examples171 gr.Markdown("## Examples")172 with gr.Row():173 reference_image1 = gr.Image(label="model", scale=1, value="examples/basemodel.png")174 reference_image2 = gr.Image(label="garment", scale=1, value="examples/garment1.jpg")175 reference_image3 = gr.Image(label="result", scale=1, value="examples/result1.png")176 gr.Examples(177 examples=[178 ["examples/basemodel.png", "examples/garment1.png", "examples/result1.png"],179 ["examples/basemodel.png", "examples/garment2.png", "examples/result2.png"],180 ["examples/basemodel.png", "examples/garment3.png", "examples/result3.png"],181 ],182 inputs=[reference_image1, reference_image2, reference_image3],183 label=None,184 )185 186if __name__ == "__main__":187 ip = requests.get('http://ifconfig.me/ip', timeout=1).text.strip()188 print("ip address alibaba", ip)189 demo.queue(max_size=10)190 demo.launch()191 192 