You need to enable JavaScript to run this app. TensorFlow目标检测API裁剪边界框触发NameError报错解决方案咨询
优惠活动
大模型
产品
解决方案
定价
更多

TensorFlow目标检测API裁剪边界框触发NameError报错解决方案咨询

问题解决方法

错误原因

你抛出NameError: name 'boxes' is not defined的核心原因是裁剪代码中直接调用了未定义的boxes变量。检测模型输出的所有边界框存储在detections['detection_boxes']对象中,你在可视化阶段已经调用过该变量,但没有提前赋值给boxes,所以直接调用会触发未定义错误。
另外你裁剪代码中写的img_np和之前定义的图片变量image_np命名不一致,修复完boxes问题后还会触发新的未定义错误,也需要同步修正。

修正逻辑

  • 先从检测结果中提取边界框、置信度参数,赋值给对应变量
  • 动态读取当前图片的实际宽高,不要硬编码宽高值,避免不同尺寸的图片裁剪偏移
  • 同步匹配图片变量命名,增加置信度过滤逻辑,避免裁剪无效低置信度框

完整可运行裁剪代码

# 从检测结果中提取边界框、置信度
boxes = detections['detection_boxes'][0].numpy()
scores = detections['detection_scores'][0].numpy()
# 置信度阈值和可视化阶段设置的0.5保持一致即可
min_score_thresh = 0.5
# 动态读取当前图片的实际宽高
height, width = image_np.shape[:2]
# 存储所有符合要求的裁剪后图片
cropped_imgs = []

# 遍历所有检测框
for idx in range(boxes.shape[0]):
    # 过滤低于置信度的无效框
    if scores[idx] < min_score_thresh:
        continue
    # 把模型输出的归一化坐标转为实际像素坐标
    ymin = int(boxes[idx][0] * height)
    xmin = int(boxes[idx][1] * width)
    ymax = int(boxes[idx][2] * height)
    xmax = int(boxes[idx][3] * width)
    # 执行裁剪
    crop = image_np[ymin:ymax, xmin:xmax]
    cropped_imgs.append(crop)

# 如果你只需要置信度最高的第一个框,不需要循环,直接取索引0即可
# ymin = int(boxes[0][0] * height)
# xmin = int(boxes[0][1] * width)
# ymax = int(boxes[0][2] * height)
# xmax = int(boxes[0][3] * width)
# result = image_np[ymin:ymax, xmin:xmax]

内容的提问来源于stack exchange,提问作者maryam mehboob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 03:36:04