webui.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import gradio as gr
  2. import json
  3. import os
  4. import pandas as pd
  5. from utils import Service, load_image_from_url
  6. # 手动设置 Gradio 临时目录
  7. os.environ["GRADIO_TEMP_DIR"] = "/home/yangzeyu/gradio_temp/brand"
  8. GRADIO_TEMP_DIR = os.environ["GRADIO_TEMP_DIR"]
  9. brand_list = Service.get_brand_list()
  10. init_product_list, init_product = Service.get_init_state_product_list(brand_list[0])
  11. with gr.Blocks() as demo:
  12. gr.Markdown("## 侵权识别系统", elem_id="header")
  13. selected_product = gr.State(value=init_product)
  14. with gr.Row():
  15. with gr.Column(): # 左侧控制面板
  16. brand_dropdown = gr.Dropdown(
  17. brand_list,
  18. label="品牌选择",
  19. value=brand_list[0],
  20. interactive=True)
  21. product_dropdown = gr.Dropdown(
  22. init_product_list,
  23. value=init_product.title,
  24. label="商品列表",
  25. interactive=True
  26. )
  27. check_button = gr.Button("查询侵权")
  28. infringement_result = gr.Textbox(
  29. label="侵权识别结果",
  30. interactive=False,
  31. lines=3
  32. )
  33. with gr.Column(): # 右侧展示面板
  34. product_info = gr.Dataframe(
  35. headers=["", ""],
  36. row_count=5,
  37. col_count=2,
  38. value=[
  39. ["商品链接", init_product.url],
  40. ["平台", init_product.platFormName],
  41. ["商户名称", init_product.shopTitle],
  42. ["颜色", init_product.colors],
  43. ["尺寸", init_product.sizes],
  44. ["价格", init_product.price],
  45. ],
  46. interactive=False # 设为True可允许编辑
  47. )
  48. image_display = gr.Gallery(
  49. label="商品图片",
  50. columns=2, # 每行显示2张图片
  51. height="auto",
  52. object_fit="contain", # 保持图片比例
  53. value=[load_image_from_url(image_url) for image_url in init_product.images],
  54. interactive=False,
  55. show_share_button=False
  56. )
  57. # 事件绑定
  58. brand_dropdown.change(
  59. fn=Service.on_brand_change,
  60. inputs=brand_dropdown,
  61. outputs=product_dropdown
  62. )
  63. product_dropdown.change(
  64. fn=Service.on_product_change,
  65. inputs=[product_dropdown, brand_dropdown],
  66. outputs=[image_display, product_info, selected_product]
  67. )
  68. check_button.click(
  69. Service.infringement_judgement,
  70. inputs=[brand_dropdown, selected_product],
  71. outputs=infringement_result
  72. )
  73. demo.launch(server_name="0.0.0.0", server_port=7860)