import requests import os from datetime import datetime # --- 配置区域 --- # 替换为你的存储服务端实际地址和端口 SERVER_URL = "http://127.0.0.1:7755" API_ENDPOINT = f"{SERVER_URL}/api/import/process_and_import" def import_card( card_name: str, cardNo: str, card_type: str, is_reflect_card: bool, strict_mode: bool, paths: dict ): """ 请求后端的自动导入接口 """ # 构造请求的 JSON Payload payload = { "card_name": card_name, "cardNo": cardNo, "card_type": card_type, "is_reflect_card": is_reflect_card, "strict_mode": strict_mode, "path_front_ring": paths.get("front_ring"), "path_front_coaxial": paths.get("front_coaxial"), "path_back_ring": paths.get("back_ring"), "path_back_coaxial": paths.get("back_coaxial"), "path_front_gray": paths.get("front_gray"), "path_back_gray": paths.get("back_gray") } # 可选:在客户端进行一次基础的文件存在性校验,避免浪费网络请求 for key, path in payload.items(): if key.startswith("path_") and path is not None: if not os.path.exists(path): print(f"[警告] 本地文件不存在: {path}") # 如果文件不存在,将其置为 None,交由服务端的 strict_mode 决定是否报错 payload[key] = None print(f"\n🚀 开始请求导入接口: {card_name} (编号: {cardNo})") try: # 注意:由于后端要并发调用推理服务、转正并保存数据库,这里把 timeout 设置得稍微长一点 (120秒) response = requests.post(API_ENDPOINT, json=payload, timeout=120) if response.status_code == 200: data = response.json() print(f"✅ 导入成功! 返回数据: {data}") else: print(f"❌ 导入失败! 状态码: {response.status_code}") try: print(f"❌ 错误详情: {response.json()}") except: print(f"❌ 错误详情: {response.text}") except requests.exceptions.Timeout: print("❌ 请求超时!后端可能还在处理,请检查服务端日志。") except requests.exceptions.RequestException as e: print(f"❌ 请求发生异常: {e}") if __name__ == "__main__": # --- 测试配置 --- BASE_PATH = r"C:\Code\ML\Image\Card\img20_test" IS_REFLECT = True CARD_TYPE = "pokemon" # 模拟循环处理 (类似你原来的逻辑) for img_num in range(2, 3): # 测试 1 到 3 print(f"\n>>>>> 准备处理图片组: {img_num}") # 构造卡牌信息 timestamp = datetime.now().strftime('%m%d_%H%M%S') card_name = f"API测试卡_{img_num}_{timestamp}" cardNo = f"SN-TEST-{img_num:03d}" # 构造路径字典 (根据你的实际命名规则修改) # 注意:我在 back_ring 的地方复用了你之前脚本里硬编码的路径作为示例 image_paths = { "front_coaxial": os.path.join(BASE_PATH, f"{img_num}_front_coaxial.jpg"), "front_ring": os.path.join(BASE_PATH, f"{img_num}_front_ring.jpg"), "back_coaxial": os.path.join(BASE_PATH, f"{img_num}_back_coaxial.jpg"), "back_ring": r"C:\Code\ML\Image\Card\b2.jpg", # 你原脚本中的硬编码测试路径 "front_gray": os.path.join(BASE_PATH, f"{img_num}_front_gray.jpg"), "back_gray": os.path.join(BASE_PATH, f"{img_num}_back_gray.jpg") } # 调用封装的函数发送 HTTP 请求 import_card( card_name=card_name, cardNo=cardNo, card_type=CARD_TYPE, is_reflect_card=IS_REFLECT, strict_mode=True, # 严格模式:如果缺主图,服务端会直接拦截报错 paths=image_paths )