【YOLOv8全方位学习手册】第二章:YOLOv8核心功能:预训练模型的使用与结果解析

部署运行你感兴趣的模型镜像

在成功搭建好环境后,我们正式进入YOLOv8的实战环节。本章将引导你使用Ultralytics官方提供的预训练模型,对图片、视频和实时摄像头画面进行检测。你将学习两种核心调用方式——简洁的命令行接口(CLI)和灵活的Python接口,并深入理解检测结果中各项数据的技术含义。

2.1 命令行调用:快速验证与测试

命令行接口(CLI)是与YOLOv8交互最快捷的方式,尤其适合快速测试模型效果或进行简单的批处理任务。其核心命令是yolo

基本语法

yolo命令遵循一个简单的结构:yolo TASK MODE ARGS...

  • TASK (任务): 指定要执行的任务。对于本章,我们主要使用detect(检测),但也可以是segment(分割)或pose(姿态估计)。如果省略,YOLOv8会尝试根据模型类型自动推断。

  • MODE (模式): 指定运行模式。我们现在使用predict(预测),后续章节会学习train(训练)、val(验证)和export(导出)。

  • ARGS (参数): 一系列的key=value参数对,用于配置运行细节。

核心参数

  • model: 指定要使用的模型文件路径。例如yolov8n.pt,这是一个轻量级的预训练检测模型。

  • source: 指定输入源。可以是单个图片路径、包含多张图片的文件夹、视频文件路径,或是代表摄像头的设备ID(通常为0)。

  • save=True: 保存带有检测结果的图片或视频。结果默认保存在runs/detect/predict/目录下。

  • conf: 设置置信度阈值(Confidence Threshold)。只有当模型对检测结果的置信度高于此值时,才会显示。例如conf=0.5表示只显示50%以上置信度的结果。

实战演练

确保你已在终端中激活了之前创建的conda环境 (conda activate yolov8_env)。

1. 图片检测

假设你有一张名为bus.jpg的图片。

yolo predict model=yolov8n.pt source=path/to/your/bus.jpg save=True

执行后,YOLOv8会自动下载yolov8n.pt模型(如果本地没有),完成检测,并在runs/detect/predict/目录下生成一张标注了边界框的新图片。

2. 视频检测
yolo predict model=yolov8n.pt source=path/to/your/video.mp4 save=True

3. 实时摄像头检测

将电脑摄像头对准自己,看看YOLOv8能否将你识别为“person”。按q键退出。

yolo predict model=yolov8n.pt source=0 show=True

注意:show=True会实时弹窗显示检测画面。

2.2 Python接口调用:灵活控制与集成

当需要将YOLOv8集成到更复杂的应用程序中时,Python接口提供了无与伦比的灵活性。你可以编程控制预测的每一个环节,并对结果进行精细化处理。

基本流程

  1. ultralytics库中导入YOLO类。

  2. 实例化YOLO类,并加载一个模型文件。

  3. 调用实例化的模型对象,传入输入源进行预测。

  4. 处理返回的结果对象。

代码示例

创建一个名为predict.py的Python文件,并输入以下代码:

from ultralytics import YOLO
import cv2

# 1. 加载一个预训练的YOLOv8n模型
model = YOLO('yolov8n.pt')

# 2. 定义输入源
# 可以是图片路径, 视频路径, 或者摄像头ID 0
source = 'path/to/your/bus.jpg'

# 3. 从模型进行推理
# stream=True 时为生成器模式,适合处理视频或长时间的推理任务,更节省内存
results = model(source, stream=True)

# 4. 处理结果
for r in results:
    # `r.boxes` 包含检测到的边界框信息
    # `r.masks` 包含分割掩码信息 (仅用于分割模型)
    # `r.keypoints` 包含姿态关键点信息 (仅用于姿态估计模型)
    
    # 将带有结果的图像帧可视化
    im_array = r.plot()  # r.plot() 返回一个 BGR 格式的 numpy 数组
    
    # 使用OpenCV显示图像
    cv2.imshow('YOLOv8 Inference', im_array)
    
    # 按 'q' 键退出循环
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放窗口资源
cv2.destroyAllWindows()

2.3 结果解读:深入理解返回的数据结构

这是从初学者迈向专家的关键一步。model()调用返回的结果是一个列表,其中每个元素都是一个ultralytics.engine.results.Results对象,对应一帧图像的检测结果。让我们深入剖析这个对象。

假设r是单个Results对象(即results[0])。

核心属性

  • r.boxes: 包含边界框信息的对象。

  • r.masks: 包含实例分割掩码信息的对象(仅当使用分割模型如yolov8n-seg.pt时才有效)。

  • r.keypoints: 包含姿态估计关键点信息的对象(仅当使用姿态模型如yolov8n-pose.pt时才有效)。

  • r.plot(): 在原始图像上绘制所有检测结果,并返回一个OpenCV(BGR)格式的numpy数组。

  • r.names: 一个字典,将类别索引映射到类别名称。例如:{0: 'person', 1: 'bicycle', ...}

r.boxes 详解

这是检测任务中最核心的部分。它是一个Boxes对象,其属性均为PyTorch张量(Tensor)。

  • r.boxes.xyxy: [N, 4]形状的张量,N是检测到的物体数量。每行包含4个值 [x1, y1, x2, y2],分别代表边界框左上角和右下角的像素坐标。

  • r.boxes.xyxyn: [N, 4]形状的张量,归一化后的坐标(所有值都在0-1之间)。

  • r.boxes.xywh: [N, 4]形状的张量,每行包含 [x, y, w, h],分别代表边界框中心点的x、y坐标以及框的宽度和高度。

  • r.boxes.conf: [N, 1]形状的张量,每个值代表对应边界框的置信度。

  • r.boxes.cls: [N, 1]形状的张量,每个值代表对应边界框的类别索引。

专业级结果处理代码

以下脚本展示了如何遍历检测结果,并以结构化的方式提取所有关键信息。

from ultralytics import YOLO

# 加载模型
model = YOLO('yolov8n.pt')

# 进行预测
results = model('path/to/your/bus.jpg')

# 假设我们只处理第一张图片的结果
r = results[0]

# 获取类别名称字典
class_names = r.names

# 遍历每个检测到的边界框
for box in r.boxes:
    # 获取边界框坐标
    x1, y1, x2, y2 = box.xyxy[0].tolist()
    
    # 获取置信度
    confidence = box.conf[0].item()
    
    # 获取类别索引
    class_id = int(box.cls[0].item())
    
    # 获取类别名称
    class_name = class_names[class_id]
    
    print(f"检测到物体: {class_name}")
    print(f"  - 坐标 (x1, y1, x2, y2): ({x1:.2f}, {y1:.2f}, {x2:.2f}, {y2:.2f})")
    print(f"  - 置信度: {confidence:.4f}")
    print("-" * 30)

学完本章,你已经掌握了YOLOv8最核心的预测功能,并能像专业开发者一样解析其返回数据。这为你后续训练自定义模型和开发复杂应用打下了坚实的基础。

您可能感兴趣的与本文相关的镜像

Yolo-v5

Yolo-v5

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值