You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用YOLOv5向API提交多边界框列表时返回400状态码

问题解决:YOLOv5边界框POST请求400错误修复

问题分析

你当前的代码存在两个核心问题导致400状态码(请求格式不匹配):

  • 每次检测到一个边界框就发送一次请求,而非收集所有框后一次性提交
  • 构造的Boxes格式是[x,y,w,h]的扁平列表,而非API期望的[{x,y,w,h}, ...]字典列表结构

修复步骤

  1. 在循环外初始化空列表,用于收集所有检测到的边界框
  2. 循环内将单个框的x、y、w、h包装成字典,添加到列表中
  3. 所有框收集完成后,统一构造符合要求的JSON数据并发送POST请求

修改后的代码

command = input('Enter command for a snap')
if command == 'n':
    # 初始化空列表存储所有边界框
    boxes_list = []
    for *xyxy, conf, cls in reversed(det):
        c1, c2 = (int(xyxy[0]), int(xyxy[1])), (int(xyxy[2]), int(xyxy[3]))
        
        center_point = round((c1[0]+c2[0])/2), round((c1[1]+c2[1])/2)
        circle = cv2.circle(im0, center_point,5,(0,255,0),2)
        text_coord = cv2.putText(im0,str(center_point), center_point,cv2.FONT_HERSHEY_PLAIN,2,(0,0,255))
        
        # 构造单个边界框的字典
        box_dict = {
            'x': c1[0],
            'y': c1[1],
            'w': c2[0] - c1[0],
            'h': c2[1] - c1[1]
        }
        boxes_list.append(box_dict)
    
    # 构造符合API要求的请求数据
    data = {
        'Boxes': boxes_list
    }
    json_object = json.dumps(data, indent=4)
    
    r = requests.post(
        "http://127.0.0.1:8000/snippets/",
        data=json_object,
        headers={'Authorization': 'Token 353101b2657b3779199777984c131f33b78656be',
                 "Content-Type": "application/json"},
    )
    print(r.status_code)
    # 若仍有问题,打印响应内容查看具体错误
    # print(r.text)

额外提示

如果修改后仍返回400,建议打印r.text查看API返回的具体错误描述,可进一步定位格式细节问题(比如字段名大小写、数值类型是否匹配等)。

内容的提问来源于stack exchange,提问作者Artemii Khristich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 15:54:24