Python中绘制边界框的指南

计算机视觉领域,边界框是一种常用的工具,用于可视化模型的预测结果。通过分析边界框,可以评估模型的性能,比如模型是否错过了某些预测,或者某些对象是否更倾向于产生误报。结合对数据集中类别平衡的理解,测试模型并分析边界框所学到的知识将有助于提高模型性能。

然而,边界框并不是由模型本身在照片上绘制的。这是一个后处理步骤,可能由模型执行,也可能不执行。例如,使用Roboflow Python包时,可以选择只解析模型的JSON输出,并选择自己绘制边界框。

在本教程中,将创建一个带有边界框的示例图像。在开始之前,可以查看下面的实时演示,了解这种方法的实际效果。这个工作流程使用了将在本文中介绍的相同代码。

如何在Python中绘制边界框

要在Python中绘制边界框,需要四个坐标:一个坐标代表边界框的每个角落。例如,Roboflow API提供了边界框的x和y坐标以及高度和宽度。有了这些信息,可以计算出盒子每个角落的坐标并可视化边界框。

在本指南中,将使用名为supervision的Python包,它提供了超过10个标注器,用于可视化计算机视觉预测。这些包括标签、盒子、分割掩码和模糊标注器。可以使用supervision从原始坐标绘制边界框。还可以从各种支持的库(例如Roboflow Inference、Detectron2、Transformers、Ultralytics)加载坐标并绘制预测。

首先,安装supervision:

pip install supervision

创建一个新文件,并添加以下代码:

import supervision as sv import cv2 import numpy as np image = cv2.imread("image.jpeg") detections = sv.Detections( xyxy=np.array([x0, y0, x1, y1]), class_id=np.array([0]), confidence=np.array([0.94]) ) bounding_box_annotator = sv.BoundingBoxAnnotator() annotated_frame = bounding_box_annotator.annotate( scene=image.copy(), detections=detections ) sv.plot_image(annotated_frame)

需要添加自己的预测列表,其中包含代表想要绘制的边界框的x、y、宽度和高度值。在这个例子中,添加了Roboflow模型返回的预测,该模型在本文末尾讨论。

在上面的代码中,用预测对应的值替换x0、y0、x1和y1的值。如果有多个框要绘制,在NumPy数组中将它们作为新的列表项添加。

或者,可以直接从detectron2、Ultralytics YOLO模型和Roboflow模型等模型加载预测。要了解更多信息,请参考supervision Detections API文档。

以下是从Roboflow supervision加载检测的示例:

import cv2 import supervision as sv from inference import get_model model = get_model(model_id="yolov8n-640") image = cv2.imread(<SOURCE_IMAGE_PATH>) results = model.infer(image)[0] detections = sv.Detections.from_inference(results)

让在这张图片上运行代码:运行代码后,可以打开“example_with_bounding_boxes.jpg”文件,查看预测结果。以下是结果:

成功地在图片上绘制了边界框和相应的标签!

supervision Python包支持广泛的标注器,用于目标检测、分割和关键点检测。例如,可以使用圆角框标注器在对象周围绘制圆角边界框,或者使用颜色标注器用特定颜色填充边界框区域。要了解更多关于Roboflow supervision中可用的标注器,请参考supervision Annotators文档。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485