process_and_import_api_test.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import requests
  2. import os
  3. from datetime import datetime
  4. # --- 配置区域 ---
  5. # 替换为你的存储服务端实际地址和端口
  6. SERVER_URL = "http://127.0.0.1:7755"
  7. API_ENDPOINT = f"{SERVER_URL}/api/import/process_and_import"
  8. def import_card(
  9. card_name: str,
  10. cardNo: str,
  11. card_type: str,
  12. is_reflect_card: bool,
  13. strict_mode: bool,
  14. paths: dict
  15. ):
  16. """
  17. 请求后端的自动导入接口
  18. """
  19. # 构造请求的 JSON Payload
  20. payload = {
  21. "card_name": card_name,
  22. "cardNo": cardNo,
  23. "card_type": card_type,
  24. "is_reflect_card": is_reflect_card,
  25. "strict_mode": strict_mode,
  26. "path_front_ring": paths.get("front_ring"),
  27. "path_front_coaxial": paths.get("front_coaxial"),
  28. "path_back_ring": paths.get("back_ring"),
  29. "path_back_coaxial": paths.get("back_coaxial"),
  30. "path_front_gray": paths.get("front_gray"),
  31. "path_back_gray": paths.get("back_gray")
  32. }
  33. # 可选:在客户端进行一次基础的文件存在性校验,避免浪费网络请求
  34. for key, path in payload.items():
  35. if key.startswith("path_") and path is not None:
  36. if not os.path.exists(path):
  37. print(f"[警告] 本地文件不存在: {path}")
  38. # 如果文件不存在,将其置为 None,交由服务端的 strict_mode 决定是否报错
  39. payload[key] = None
  40. print(f"\n🚀 开始请求导入接口: {card_name} (编号: {cardNo})")
  41. try:
  42. # 注意:由于后端要并发调用推理服务、转正并保存数据库,这里把 timeout 设置得稍微长一点 (120秒)
  43. response = requests.post(API_ENDPOINT, json=payload, timeout=120)
  44. if response.status_code == 200:
  45. data = response.json()
  46. print(f"✅ 导入成功! 返回数据: {data}")
  47. else:
  48. print(f"❌ 导入失败! 状态码: {response.status_code}")
  49. try:
  50. print(f"❌ 错误详情: {response.json()}")
  51. except:
  52. print(f"❌ 错误详情: {response.text}")
  53. except requests.exceptions.Timeout:
  54. print("❌ 请求超时!后端可能还在处理,请检查服务端日志。")
  55. except requests.exceptions.RequestException as e:
  56. print(f"❌ 请求发生异常: {e}")
  57. if __name__ == "__main__":
  58. # --- 测试配置 ---
  59. BASE_PATH = r"C:\Code\ML\Image\Card\img20_test"
  60. IS_REFLECT = True
  61. CARD_TYPE = "pokemon"
  62. # 模拟循环处理 (类似你原来的逻辑)
  63. for img_num in range(2, 3): # 测试 1 到 3
  64. print(f"\n>>>>> 准备处理图片组: {img_num}")
  65. # 构造卡牌信息
  66. timestamp = datetime.now().strftime('%m%d_%H%M%S')
  67. card_name = f"API测试卡_{img_num}_{timestamp}"
  68. cardNo = f"SN-TEST-{img_num:03d}"
  69. # 构造路径字典 (根据你的实际命名规则修改)
  70. # 注意:我在 back_ring 的地方复用了你之前脚本里硬编码的路径作为示例
  71. image_paths = {
  72. "front_coaxial": os.path.join(BASE_PATH, f"{img_num}_front_coaxial.jpg"),
  73. "front_ring": os.path.join(BASE_PATH, f"{img_num}_front_ring.jpg"),
  74. "back_coaxial": os.path.join(BASE_PATH, f"{img_num}_back_coaxial.jpg"),
  75. "back_ring": r"C:\Code\ML\Image\Card\b2.jpg", # 你原脚本中的硬编码测试路径
  76. "front_gray": os.path.join(BASE_PATH, f"{img_num}_front_gray.jpg"),
  77. "back_gray": os.path.join(BASE_PATH, f"{img_num}_back_gray.jpg")
  78. }
  79. # 调用封装的函数发送 HTTP 请求
  80. import_card(
  81. card_name=card_name,
  82. cardNo=cardNo,
  83. card_type=CARD_TYPE,
  84. is_reflect_card=IS_REFLECT,
  85. strict_mode=True, # 严格模式:如果缺主图,服务端会直接拦截报错
  86. paths=image_paths
  87. )