Spaces:
Sleeping
Sleeping
File size: 9,083 Bytes
164398f 7e0ad3e 164398f |
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 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 |
import gradio as gr
from suggestion import generate_outfit_advice
from clothGen import cloth_gen
from user_dress import user_cloths
import requests
import os
from io import BytesIO
from PIL import Image
from cal_compatibility import cal_compatibility
gen_pic_num = 6
def get_select_index(evt: gr.SelectData, gallery):
print(gallery[evt.index][0])
# response = requests.get(gallery[evt.index][0])
# img = Image.open(BytesIO(response.content))
return gallery[evt.index][0]
def update_choices(dropout1, dropout2,):
if dropout1 == "男":
option = ['倒三角形', '矩形', '苹果形', '沙漏型', '胖型']
else:
option = ["梨形", "草莓形", "沙漏形", "标准", "苹果形"]
dropout2 = gr.Dropdown(choices=option)
return dropout2
with gr.Blocks(css="styles.css", theme=gr.themes.Base()) as demo:
with gr.Row():
# 左侧模块
with gr.Column(scale=1):
with gr.Row():
gr.Markdown(""
"# 用户信息"
"")
with gr.Row():
text_input1 = gr.Textbox(label="用户姓名", min_width=100)
text_input2 = gr.Textbox(label="身高/cm", min_width=100)
text_input3 = gr.Textbox(label="体重/kg", min_width=100)
text_input4 = gr.Textbox(label="腰围/cm", min_width=100)
text_input5 = gr.Textbox(label="胸围/cm", min_width=100)
text_input6 = gr.Textbox(label="臀围/cm", min_width=100)
text_input7 = gr.Textbox(label="肩宽/cm", min_width=100)
text_input8 = gr.Textbox(label="腿长/cm", min_width=100)
text_input9 = gr.Textbox(label="臂长/cm", min_width=100)
dropdown_options1 = ["男", "女"]
dropdown_input1 = gr.Dropdown(choices=dropdown_options1, value="", label="性别", min_width=100)
dropdown_input2 = gr.Dropdown(choices=['倒三角形', '矩形', '苹果形', '沙漏型', '胖型'], value="", label="体型分类", min_width=100)
dropdown_input1.change(fn=update_choices, inputs=[dropdown_input1, dropdown_input2], outputs=dropdown_input2)
dropdown_options3 = ["浅色", "中等偏黄色", "中等偏褐色", "深色"]
dropdown_input3 = gr.Dropdown(choices=dropdown_options3, label="肤色", min_width=100)
text_input10 = gr.Textbox(label="穿衣风格偏好", min_width=1000)
text_input11 = gr.Textbox(label="生话方式和场景需求", min_width=1000)
text_input12 = gr.Textbox(label="其他特殊需求", min_width=1000)
with gr.Row():
user_pic = gr.Image(label="用户照片", value="model.jpg", height=550, width=300)
# 右侧模块
with gr.Column(scale=2):
with gr.Row():
gr.Markdown(""
"# 穿搭建议"
"")
with gr.Row():
text_output1 = gr.Textbox(label="穿搭建议", lines=12, max_lines=12, interactive=False, show_label=False,
min_width=1000)
submit_button_1 = gr.Button("AI智能分析,生成穿搭建议", min_width=1000)
image_output_1 = gr.Image(label="显示图像", value="image 209.png")
gallery_1 = gr.Gallery(
label="服装", elem_id="gallery",
value=[
# os.path.join(example_path, '上衣/_WEB_2016_09_26__2016092617451357e8ee2957aa1_TD.jpg'),
# os.path.join(example_path, '上衣/_WEB_2016_09_27__2016092717211057ea3a069c749_TD.jpg'),
# os.path.join(example_path, '上衣/_WEB_2016_09_27__2016092717391657ea3e446ce3f_TD.jpg'),
# os.path.join(example_path, '上衣/_WEB_2016_09_27__2016092717573057ea428a305bc_TD.jpg'),
# os.path.join(example_path, '上衣/_WEB_2016_09_28__2016092810150157eb27a56a631_TD.jpg'),
# os.path.join(example_path, '上衣/_WEB_2016_09_28__2016092810464557eb2f15e1df3_TD.jpg'),
],
columns=[4], rows=[2], object_fit="contain", height=250, min_width=450)
gallery_3 = gr.Gallery(
label="配饰", elem_id="gallery",
value=[
'downloads/access_1.jpg',
'downloads/access_2.jpg',
'downloads/access_3.jpg',
'downloads/access_4.jpg',
'downloads/access_5.jpg',
'downloads/access_6.jpg',
],
columns=[4], rows=[2], object_fit="contain", height=250, min_width=450)
submit_button_2 = gr.Button("AI智能分析,生成民族服饰")
with gr.Column(scale=2):
with gr.Row():
gr.Markdown(""
"# 搭配生成"
"")
with gr.Row():
gallery_4 = gr.Gallery(
label="套装", elem_id="gallery",
value=[],
columns=[3], rows=[1], object_fit="contain", height=180, min_width=450)
with gr.Row():
submit_button_3 = gr.Button("服饰及搭配兼容性排序")
with gr.Row():
image_output_5 = gr.Image(label="显示图像", show_label=False, min_width=200, height=350)
intro = gr.Textbox(label="服饰介绍", lines=14, max_lines=14)
with gr.Row():
submit_button_4 = gr.Button("虚拟试穿")
with gr.Row():
with gr.Column(scale=1):
gallery_user = gr.Gallery(
label="试穿结果",
elem_id="gallery",
value=[],
columns=[3], rows=[2],
object_fit="contain",
min_width=200,
height=350,
)
with gr.Column(scale=1):
feedback = gr.Textbox(label="反馈", placeholder="可以从款式、颜色、图案、风格倾向、文化偏好角度进行反馈", lines=1,
max_lines=1, elem_id="feedback")
submit_button_5 = gr.Button("反馈")
with gr.Row():
gr.Markdown("""
女性体型备注:
1. **梨形身材**:臀围比胸围**至少大5.08厘米**
2. **草莓形身材**:臀围比胸围**至少小5.08厘米**
3. **沙漏形身材**:胸围比腰围**至少大3.81厘米**且腰部线条明显
4. **标准身材**:胸围比腰围**至少大3.81厘米**且腰部线条不明显
5. **苹果形身材**:胸围比腰围**至少小3.81厘米**
男性体型备注:
1. **倒三角形身材**:肩宽比腰围**至少大10厘米**
2. **矩形身材**:肩宽与腰围的差异**小于5厘米**
3. **苹果形身材**:腰围比肩宽**至少大7.5厘米**
4. **沙漏型身材**:腰围比肩宽或臀围**至少小10厘米**,且肩宽和臀围的差异**小于5厘米**
5. **胖型身材**:腰围比胸围或肩宽**至少大10厘米**
""")
submit_button_1.click(fn=generate_outfit_advice,
inputs=[text_input1, text_input2, text_input3, text_input4, text_input5,
text_input6, text_input7, text_input8, text_input9, dropdown_input1,
dropdown_input2, dropdown_input3, text_input10, text_input11, text_input12,
feedback, user_pic],
outputs=text_output1)
submit_button_2.click(fn=cloth_gen,
inputs=[text_output1, dropdown_input1],
outputs=[gallery_1, image_output_5, intro])
gallery_1.select(get_select_index, gallery_1, image_output_5)
submit_button_3.click(fn=cal_compatibility,
inputs=[],
outputs=[gallery_4])
submit_button_4.click(fn=user_cloths,
inputs=[user_pic, image_output_5],
outputs=gallery_user)
submit_button_5.click(fn=generate_outfit_advice,
inputs=[text_input1, text_input2, text_input3, text_input4, text_input5,
text_input6, text_input7, text_input8, text_input9, dropdown_input1,
dropdown_input2, dropdown_input3, text_input10, text_input11, text_input12,
feedback, user_pic],
outputs=text_output1)
demo.launch(server_port=7860, share=True)
|