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

TF Object Detection API调整:移除标签与百分比,仅保留边界框

移除目标检测结果中的标签和置信度,仅显示边界框的方法

嘿,这个需求其实很好实现——核心就是在模型推理后的可视化环节,去掉绘制标签和置信度百分比的逻辑,只保留边界框的绘制。不同框架的具体操作略有不同,我给你整理了几个主流场景的解决方案:

一、YOLO系列(v5/v8最常用)

YOLOv8

Ultralytics的YOLOv8提供了直接的参数控制,不用改核心代码:

from ultralytics import YOLO

# 加载你的自定义模型
model = YOLO("your_trained_model.pt")
# 推理图片
results = model("test_image.jpg")

# 可视化时隐藏标签和置信度
for result in results:
    # 直接设置labels和conf为False即可
    result.show(labels=False, conf=False)
    # 如果要保存处理后的图片
    result.save(filename="output_with_only_boxes.jpg", labels=False, conf=False)

如果是命令行运行,也可以加参数:

yolo detect predict model=your_trained_model.pt source=test_image.jpg show_labels=False show_conf=False

YOLOv5

YOLOv5同样支持命令行参数快速实现:

python detect.py --weights your_trained_model.pt --source test_image.jpg --hide-labels --hide-conf

如果是在代码里自定义可视化,找到utils/plots.py里的Annotator类,或者自己的推理代码中,注释掉绘制标签的部分,只保留画框逻辑:

# 假设你已经完成推理,得到det检测结果
annotator = Annotator(img, line_width=3, example=str(names))
for *xyxy, conf, cls in reversed(det):
    # 注释掉原来的box_label(会画框+写标签)
    # label = f'{names[int(cls)]} {conf:.2f}'
    # annotator.box_label(xyxy, label, color=colors(int(cls), True))
    # 只调用draw_box绘制边界框
    annotator.draw_box(xyxy, color=colors(int(cls), True))

二、TensorFlow Object Detection API

TFOD API的可视化工具visualization_utils提供了跳过标签和分数的参数:

import tensorflow as tf
from object_detection.utils import visualization_utils as vis_utils
from object_detection.utils import label_map_util

# 加载模型和标签映射等步骤省略...

# 推理得到boxes、classes、scores后,可视化时设置skip_labels和skip_scores为True
vis_utils.visualize_boxes_and_labels_on_image_array(
    image_np,
    boxes,
    classes.astype(np.int32),
    scores,
    category_index,
    use_normalized_coordinates=True,
    line_thickness=4,
    skip_labels=True,  # 不显示标签
    skip_scores=True)  # 不显示置信度百分比

三、通用自定义模型(比如PyTorch的Faster R-CNN等)

如果是你自己写的推理和可视化代码,核心逻辑就是:

  • 找到绘制文本的代码(通常是OpenCV的cv2.putText()),把这行代码删掉或者注释掉;
  • 保留绘制矩形框的代码(cv2.rectangle())。

举个OpenCV的简单例子:

import cv2

# 假设已经得到边界框坐标xyxy=(x1, y1, x2, y2)
x1, y1, x2, y2 = 100, 100, 200, 200
img = cv2.imread("test_image.jpg")

# 只画边界框,不写文本
cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
# 注释掉原来的putText代码
# cv2.putText(img, f"{label} {conf:.2f}", (x1, y1-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 2)

cv2.imshow("Only Boxes", img)
cv2.waitKey(0)

总结一下:不管用什么框架,只要找到可视化环节中负责绘制文本的部分,把它去掉就可以啦,非常直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:33:54