import gradio as gr import json import os import pandas as pd from utils import Service, load_image_from_url # 手动设置 Gradio 临时目录 os.environ["GRADIO_TEMP_DIR"] = "/home/yangzeyu/gradio_temp/brand" GRADIO_TEMP_DIR = os.environ["GRADIO_TEMP_DIR"] brand_list = Service.get_brand_list() init_product_list, init_product = Service.get_init_state_product_list(brand_list[0]) with gr.Blocks() as demo: gr.Markdown("## 侵权识别系统", elem_id="header") selected_product = gr.State(value=init_product) with gr.Row(): with gr.Column(): # 左侧控制面板 brand_dropdown = gr.Dropdown( brand_list, label="品牌选择", value=brand_list[0], interactive=True) product_dropdown = gr.Dropdown( init_product_list, value=init_product.title, label="商品列表", interactive=True ) check_button = gr.Button("查询侵权") infringement_result = gr.Textbox( label="侵权识别结果", interactive=False, lines=3 ) with gr.Column(): # 右侧展示面板 product_info = gr.Dataframe( headers=["", ""], row_count=5, col_count=2, value=[ ["商品链接", init_product.url], ["平台", init_product.platFormName], ["商户名称", init_product.shopTitle], ["颜色", init_product.colors], ["尺寸", init_product.sizes], ["价格", init_product.price], ], interactive=False # 设为True可允许编辑 ) image_display = gr.Gallery( label="商品图片", columns=2, # 每行显示2张图片 height="auto", object_fit="contain", # 保持图片比例 value=[load_image_from_url(image_url) for image_url in init_product.images], interactive=False, show_share_button=False ) # 事件绑定 brand_dropdown.change( fn=Service.on_brand_change, inputs=brand_dropdown, outputs=product_dropdown ) product_dropdown.change( fn=Service.on_product_change, inputs=[product_dropdown, brand_dropdown], outputs=[image_display, product_info, selected_product] ) check_button.click( Service.infringement_judgement, inputs=[brand_dropdown, selected_product], outputs=infringement_result ) demo.launch(server_name="0.0.0.0", server_port=7860)