使用YOLOv5向API提交多边界框列表时返回400状态码
问题解决:YOLOv5边界框POST请求400错误修复
问题分析
你当前的代码存在两个核心问题导致400状态码(请求格式不匹配):
- 每次检测到一个边界框就发送一次请求,而非收集所有框后一次性提交
- 构造的
Boxes格式是[x,y,w,h]的扁平列表,而非API期望的[{x,y,w,h}, ...]字典列表结构
修复步骤
- 在循环外初始化空列表,用于收集所有检测到的边界框
- 循环内将单个框的x、y、w、h包装成字典,添加到列表中
- 所有框收集完成后,统一构造符合要求的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
相关产品推荐
相关产品推荐

