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
相关产品推荐
相关产品推荐

