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

如何使用TensorFlow检测图像指定区域内的目标并过滤无关边界框

解决方案

方案1:调用可视化函数前提前过滤(优先推荐)

该方案无需修改官方提供的可视化工具代码,后续版本升级不受影响,适配性最好。

  1. 先定义你需要保留目标的content区域坐标,因为你调用可视化时开启了use_normalized_coordinates=True,建议直接使用归一化坐标(取值范围0~1,为相对于整张图宽高的比例值)
  2. 计算所有检测框的中心点,过滤出中心点落在content区域内的目标,再将过滤后的结果传入可视化函数即可。
    示例代码如下:
# 先拿到原始检测结果
boxes = np.squeeze(boxes)
classes = np.squeeze(classes).astype(np.int32)
scores = np.squeeze(scores)

# 替换为你自己的content区域归一化坐标,顺序为(ymin, xmin, ymax, xmax)
content_ymin, content_xmin, content_ymax, content_xmax = 0.2, 0.1, 0.8, 0.9

# 计算每个检测框的中心点归一化坐标
box_centers_y = (boxes[:, 0] + boxes[:, 2]) / 2
box_centers_x = (boxes[:, 1] + boxes[:, 3]) / 2

# 生成过滤掩码:同时满足中心点在指定区域、分数高于阈值两个条件
filter_mask = (box_centers_y >= content_ymin) & (box_centers_y <= content_ymax) & \
              (box_centers_x >= content_xmin) & (box_centers_x <= content_xmax) & \
              (scores >= 0.2)

# 应用过滤得到符合要求的结果
filtered_boxes = boxes[filter_mask]
filtered_classes = classes[filter_mask]
filtered_scores = scores[filter_mask]

# 传入过滤后的结果调用可视化函数
vis_util.visualize_boxes_and_labels_on_image_array(
    image_np,
    filtered_boxes,
    filtered_classes,
    filtered_scores,
    category_index,
    use_normalized_coordinates=True,
    line_thickness=3,
    min_score_thresh=0.2)

方案2:修改原可视化函数新增区域过滤逻辑

如果需要复用区域过滤能力,可以直接修改visualize_boxes_and_labels_on_image_array函数:

  1. 在函数参数列表中新增可选参数valid_region=None,参数说明:接收格式为(content_ymin, content_xmin, content_ymax, content_xmax)的归一化坐标元组,传入后仅绘制中心点落在该区域内的目标,为None时保留原有逻辑不做过滤。
  2. 找到函数内遍历检测框的循环逻辑:
for i in range(min(max_boxes_to_draw, boxes.shape[0])):
    if scores is None or scores[i] > min_score_thresh:

在该判断下方新增区域过滤逻辑:

# 新增区域过滤逻辑
if valid_region is not None:
    v_ymin, v_xmin, v_ymax, v_xmax = valid_region
    ymin, xmin, ymax, xmax = boxes[i]
    center_y = (ymin + ymax) / 2
    center_x = (xmin + xmax) / 2
    # 中心点不在指定区域则跳过当前框
    if not (v_ymin <= center_y <= v_ymax and v_xmin <= center_x <= v_xmax):
        continue
  1. 调用时传入你的content区域参数即可:
vis_util.visualize_boxes_and_labels_on_image_array(
    image_np,
    np.squeeze(boxes),
    np.squeeze(classes).astype(np.int32),
    np.squeeze(scores),
    category_index,
    use_normalized_coordinates=True,
    line_thickness=3,
    min_score_thresh=0.2,
    valid_region=(0.2, 0.1, 0.8, 0.9) # 替换为你实际的content区域归一化坐标
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:54:04