手把手教你YOLOv8画
时间: 2024-12-27 07:19:30 浏览: 4
### 使用 YOLOv8 进行目标检测结果可视化
#### 准备工作
为了实现YOLOv8的目标检测结果可视化,需先安装必要的库。通常情况下,`ultralytics`包已经包含了YOLOv8模型以及一些辅助工具来帮助完成这一过程。
```bash
pip install ultralytics
```
#### 加载预训练模型并执行预测
加载YOLOv8模型可以非常简单地通过调用`Yolo()`函数,并指定版本号为`'yolov8n.pt'`或其他任何可用的权重文件名。之后可以通过给定图片路径来进行推理操作[^1]。
```python
from ultralytics import YOLO
model = YOLO('yolov8n.pt') # Load model
results = model.predict(source='path/to/image.jpg', save=True, show_labels=True)
```
上述代码不仅会返回检测的结果对象列表,还会自动保存带有标注框的图像副本至运行目录下的`runs\detect\predict`子文件夹内;同时如果设置了`show_labels=True`参数,则会在绘制边界框的同时显示类别名称和置信度分数。
对于更复杂的情况比如实例分割标签的可视化,在处理过程中涉及到更多细节上的解析逻辑。这包括但不限于理解数据集中每条记录所代表的具体含义、如何提取mask信息并与原始图像相结合等问题。这些知识点可以从实例分割标签可视化的具体实现中学到很多关于`YOLOv8_seg`内部机制的内容。
#### 自定义绘图功能
当默认提供的选项无法满足需求时,还可以进一步自定义绘图行为。例如修改颜色方案、调整字体大小等样式属性:
```python
import matplotlib.pyplot as plt
import cv2
from pathlib import Path
def plot_results(result):
img_path = result.path # 获取原图路径
im0 = cv2.imread(img_path)[..., ::-1] # BGR to RGB
fig, ax = plt.subplots(figsize=(12, 9))
for *xyxy, conf, cls in reversed(result.boxes.data.tolist()):
c = int(cls) # integer class
label = f'{result.names[c]} {conf:.2f}'
color = (0, 255, 0) # Green bounding box color
xywh = (xyxy[0], xyxy[1]), (xyxy[2]-xyxy[0]), (xyxy[3]-xyxy[1])
rect = plt.Rectangle(*xywh, fill=False, edgecolor=color, linewidth=3)
ax.add_patch(rect)
txt_color = 'white'
font_size = max(round(sum(im0.shape) / 2 * 0.003), 2)
t_size = cv2.getTextSize(label, 0, fontScale=font_size / 3, thickness=font_size)[0]
# Draw text background rectangle
c1, c2 = (int(xyxy[0]), int(xyxy[1])), (int(xyxy[0]) + t_size[0], int(xyxy[1]) - t_size[1] - 3)
cv2.rectangle(im0, c1, c2, color, -1, lineType=cv2.LINE_AA)
# Put the actual text on top of it
cv2.putText(im0,
label, (c1[0], c1[1] - 2),
0,
font_size / 3,
txt_color,
thickness=font_size,
lineType=cv2.LINE_AA)
ax.imshow(im0)
ax.axis('off')
plt.show()
```
这段脚本展示了如何遍历每一个检测出来的物体,并为其画上绿色边界的矩形框,同时也支持中文字符在内的各种文字渲染效果。值得注意的是这里采用了matplotlib作为最终展示平台之一,因此能够轻松集成进Jupyter Notebook环境中供交互式探索使用。
阅读全文