使用 Ultralytics YOLO 进行模型预测的详细细节介绍

使用 Ultralytics YOLO 进行模型预测的详细细节介绍

使用 Ultralytics YOLO 进行模型预测

简介

在机器学习和计算机视觉的世界中,将视觉数据转化为可理解信息的过程被称为"推理"或"预测"。Ultralytics YOLOv8 提供了一项强大的功能,称为预测模式,专为在各种数据源上进行高性能、实时推理而设计。

为什么使用 Ultralytics YOLO 进行推理?

以下是您应该考虑使用 YOLOv8 预测模式进行各种推理需求的原因:

  • 多功能性:能够对图像、视频甚至实时流进行推理。
  • 性能:为实时高速处理而设计,同时不牺牲准确性。
  • 易用性:直观的 Python 和 CLI 界面,便于快速部署和测试。
  • 高度可定制:可以根据您的具体要求调整模型的推理行为的各种设置和参数。

预测模式的关键特性

YOLOv8 的预测模式设计为稳健且多功能,具有以下特性:

  • 多数据源兼容性:无论您的数据是单个图像、图像集合、视频文件还是实时视频流,预测模式都能处理。
  • 流模式:使用流功能生成内存高效的结果对象生成器。通过在预测器的调用方法中设置 stream=True 启用此功能。
  • 批处理:能够在单个批处理中处理多个图像或视频帧,从而加快推理时间。
  • 集成友好:由于其灵活的 API,轻松与现有数据管道和其他软件组件集成。

Ultralytics YOLO 模型在推理期间返回 Python 结果对象列表或在传递 stream=True 时返回内存高效的结果对象生成器:

预测

  • 返回列表,设置 stream=False
python 复制代码
from ultralytics import YOLO

# 加载模型
model = YOLO("yolov8n.pt")  # 预训练 YOLOv8n 模型

# 对图像列表进行批量推理
results = model(["im1.jpg", "im2.jpg"])  # 返回结果对象列表

# 处理结果列表
for result in results:
    boxes = result.boxes  # 边界框输出的 Boxes 对象
    masks = result.masks  # 分割掩码输出的 Masks 对象
    keypoints = result.keypoints  # 姿态输出的 Keypoints 对象
    probs = result.probs  # 分类输出的 Probs 对象
    obb = result.obb  # 方向性边界框输出的 OBB 对象
    result.show()  # 显示在屏幕上
    result.save(filename="result.jpg")  # 保存到磁盘
  • 返回生成器,设置 stream=True
python 复制代码
from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.pt")  # pretrained YOLOv8n model

# Run batched inference on a list of images
results = model(["im1.jpg", "im2.jpg"], stream=True)  # return a generator of Results objects

# Process results generator
for result in results:
    boxes = result.boxes  # Boxes object for bounding box outputs
    masks = result.masks  # Masks object for segmentation masks outputs
    keypoints = result.keypoints  # Keypoints object for pose outputs
    probs = result.probs  # Probs object for classification outputs
    obb = result.obb  # Oriented boxes object for OBB outputs
    result.show()  # display to screen
    result.save(filename="result.jpg")  # save to disk

推理数据可以是哪些来源

YOLOv8 可以处理不同类型的输入源进行推理,如下表所示。这些来源包括静态图像、视频流和各种数据格式。表格还指出每种来源是否可以在使用参数 stream=True 时以流模式使用。流模式在处理视频或实时流时非常有用,因为它会创建一个结果生成器,而不是将所有帧加载到内存中。

提示

使用 stream=True 来处理长视频或大型数据集,以有效管理内存。当 stream=False 时,所有帧或数据点的结果都存储在内存中,对于大输入来说,这些结果会迅速累加并导致内存不足错误。相反,stream=True 利用生成器,仅将当前帧或数据点的结果保存在内存中,从而显著减少内存消耗并防止内存不足问题。

来源 参数 类型 备注
图像 'image.jpg' str 或 Path 单个图像文件。
URL 'https://ultralytics.com/images/bus.jpg' str 图像的 URL。
截屏 'screen' str 捕捉截屏。
PIL Image.open('im.jpg') PIL.Image 具有 RGB 通道的 HWC 格式。
OpenCV cv2.imread('im.jpg') np.ndarray 具有 BGR 通道 uint8 (0-255) 的 HWC 格式。
numpy np.zeros((640,1280,3)) np.ndarray 具有 BGR 通道 uint8 (0-255) 的 HWC 格式。
torch torch.zeros(16,3,320,640) torch.Tensor 具有 RGB 通道 float32 (0.0-1.0) 的 BCHW 格式。
CSV 'sources.csv' str 或 Path 包含图像、视频或目录路径的 CSV 文件。
视频 ✅ 'video.mp4' str 或 Path MP4、AVI 等格式的视频文件。
目录 ✅ 'path/' str 或 Path 包含图像或视频的目录路径。
glob ✅ 'path/*.jpg' str 匹配多个文件的 glob 模式。使用 * 字符作为通配符。
YouTube ✅ 'https://youtu.be/LNwODJXcvt4' str YouTube 视频的 URL。
流 ✅ 'rtsp://example.com/media.mp4' str 用于流协议(如 RTSP、RTMP、TCP)或 IP 地址的 URL。
多流 ✅ 'list.streams' str 或 Path 包含每行一个流 URL 的 *.streams 文本文件,即 8 个流将在批处理大小为 8 的情况下运行。

以下是使用每种来源类型的代码示例:

预测来源

  • 图像
    对图像文件进行推理。
python 复制代码
from ultralytics import YOLO

# 加载预训练的 YOLOv8n 模型
model = YOLO("yolov8n.pt")

# 定义图像文件的路径
source = "path/to/image.jpg"

# 对来源进行推理
results = model(source)  # 结果对象列表
  • 截屏
python 复制代码
from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Define current screenshot as source
source = "screen"

# Run inference on the source
results = model(source)  # list of Results objects
  • URL
python 复制代码
from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Define remote image or video URL
source = "https://ultralytics.com/images/bus.jpg"

# Run inference on the source
results = model(source)  # list of Results objects
  • PIL
python 复制代码
from PIL import Image

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Open an image using PIL
source = Image.open("path/to/image.jpg")

# Run inference on the source
results = model(source)  # list of Results objects
  • OpenCV
python 复制代码
import cv2

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Read an image using OpenCV
source = cv2.imread("path/to/image.jpg")

# Run inference on the source
results = model(source)  # list of Results objects
  • numpy
python 复制代码
import numpy as np

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Create a random numpy array of HWC shape (640, 640, 3) with values in range [0, 255] and type uint8
source = np.random.randint(low=0, high=255, size=(640, 640, 3), dtype="uint8")

# Run inference on the source
results = model(source)  # list of Results objects
  • torch
python 复制代码
import torch

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Create a random torch tensor of BCHW shape (1, 3, 640, 640) with values in range [0, 1] and type float32
source = torch.rand(1, 3, 640, 640, dtype=torch.float32)

# Run inference on the source
results = model(source)  # list of Results objects
  • CSV
python 复制代码
from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Define a path to a CSV file with images, URLs, videos and directories
source = "path/to/file.csv"

# Run inference on the source
results = model(source)  # list of Results objects
  • 视频
python 复制代码
from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Define path to video file
source = "path/to/video.mp4"

# Run inference on the source
results = model(source, stream=True)  # generator of Results objects
  • 目录
python 复制代码
from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Define path to directory containing images and videos for inference
source = "path/to/dir"

# Run inference on the source
results = model(source, stream=True)  # generator of Results objects
  • glob
python 复制代码
from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Define a glob search for all JPG files in a directory
source = "path/to/dir/*.jpg"

# OR define a recursive glob search for all JPG files including subdirectories
source = "path/to/dir/**/*.jpg"

# Run inference on the source
results = model(source, stream=True)  # generator of Results objects
  • YouTube
python 复制代码
from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Define source as YouTube video URL
source = "https://youtu.be/LNwODJXcvt4"

# Run inference on the source
results = model(source, stream=True)  # generator of Results objects
python 复制代码
from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Single stream with batch-size 1 inference
source = "rtsp://example.com/media.mp4"  # RTSP, RTMP, TCP or IP streaming address

# Multiple streams with batched inference (i.e. batch-size 8 for 8 streams)
source = "path/to/list.streams"  # *.streams text file with one streaming address per row

# Run inference on the source
results = model(source, stream=True)  # generator of Results objects

推理参数

model.predict() 接受多个参数,这些参数可以在推理时传递以覆盖默认值:

例子:

python 复制代码
from ultralytics import YOLO

# 加载预训练的YOLOv8n模型
model = YOLO("yolov8n.pt")

# 使用参数在 'bus.jpg' 上运行推理
model.predict("bus.jpg", save=True, imgsz=320, conf=0.5)

推理参数:

参数 类型 默认值 描述
source str 'ultralytics/assets' 指定推理的数据源。可以是图像路径、视频文件、目录、URL或用于实时馈送的设备ID。支持广泛的格式和来源,允许在不同类型的输入中灵活应用。
conf float 0.25 设置检测的最小置信度阈值。置信度低于此阈值的检测对象将被忽略。调整此值可以帮助减少误报。
iou float 0.7 非极大值抑制(NMS)的交并比(IoU)阈值。较低的值通过消除重叠框减少检测数量,有助于减少重复检测。
imgsz int 或 tuple 640 定义推理的图像大小。可以是一个整数 640 进行方形调整,或是一个 (height, width) 元组。适当的尺寸可以提高检测精度和处理速度。
half bool False 启用半精度(FP16)推理,可以在支持的GPU上加速模型推理,并对精度影响较小。
device str None 指定推理设备(例如,cpu, cuda:0 或 0)。允许用户在CPU、特定GPU或其他计算设备之间选择来执行模型。
max_det int 300 每张图像允许的最大检测数量。限制模型在一次推理中可以检测的对象总数,防止在密集场景中产生过多输出。
vid_stride int 1 视频输入的帧间隔。允许在视频中跳过帧以加速处理,但会降低时间分辨率。值为1时处理每一帧,较高的值会跳过帧。
stream_buffer bool False 确定在处理视频流时是否缓冲所有帧(True),还是只返回最新帧(False)。对实时应用很有用。
visualize bool False 在推理过程中激活模型特征的可视化,提供模型"看到"的内容的洞察。对调试和模型解释很有用。
augment bool False 启用预测的测试时间增强(TTA),可能会提升检测的鲁棒性,但会降低推理速度。
agnostic_nms bool False 启用类无关的非极大值抑制(NMS),可以合并不同类的重叠框。在类重叠常见的多类检测场景中很有用。
classes list[int] None 将预测结果过滤为一组类ID。只返回属于指定类的检测结果。在多类检测任务中专注于相关对象很有用。
retina_masks bool False 如果模型中可用,使用高分辨率分割掩码。这可以提高分割任务中掩码的质量,提供更细的细节。
embed list[int] None 指定要提取特征向量或嵌入的层。对聚类或相似性搜索等下游任务很有用。

可视化参数

参数 类型 默认值 描述
show bool False 如果为True,则在窗口中显示标注的图像或视频。在开发或测试期间提供即时视觉反馈很有用。
save bool False 启用将标注的图像或视频保存到文件。对文档、进一步分析或共享结果很有用。
save_frames bool False 在处理视频时,将各个帧保存为图像。对提取特定帧或进行详细的逐帧分析很有用。
save_txt bool False 将检测结果保存到文本文件,格式为 [class] [x_center] [y_center] [width] [height] [confidence]。对与其他分析工具集成很有用。
save_conf bool False 在保存的文本文件中包括置信度分数。增强了可供后处理和分析的细节。
save_crop bool False 保存检测到的裁剪图像。对数据集增强、分析或创建特定对象的聚焦数据集很有用。
show_labels bool True 在视觉输出中显示每个检测的标签。提供对检测对象的即时理解。
show_conf bool True 在标签旁边显示每个检测的置信度分数。提供对每个检测模型确定性的洞察。
show_boxes bool True 在检测对象周围绘制边界框。对图像或视频帧中的对象进行视觉识别和定位是必不可少的。
line_width None或int None 指定边界框的线宽。如果为None,线宽将根据图像大小自动调整。提供视觉定制以提高清晰度。

图像和视频格式

YOLOv8支持多种图像和视频格式,如在 ultralytics/data/utils.py 中指定。请参阅下表以获取有效的后缀和示例预测命令。

图像格式

下表包含有效的Ultralytics图像格式。

图像后缀 示例预测命令 参考
.bmp yolo predict source=image.bmp Microsoft BMP File Format
.dng yolo predict source=image.dng Adobe DNG
.jpeg yolo predict source=image.jpeg JPEG
.jpg yolo predict source=image.jpg JPEG
.mpo yolo predict source=image.mpo Multi Picture Object
.png yolo predict source=image.png Portable Network Graphics
.tif yolo predict source=image.tif Tag Image File Format
.tiff yolo predict source=image.tiff Tag Image File Format
.webp yolo predict source=image.webp WebP
.pfm yolo predict source=image.pfm Portable FloatMap

视频格式

下表包含有效的Ultralytics视频格式。

视频后缀 示例预测命令 参考
.asf yolo predict source=video.asf Advanced Systems Format
.avi yolo predict source=video.avi Audio Video Interleave
.gif yolo predict source=video.gif Graphics Interchange Format
.m4v yolo predict source=video.m4v MPEG-4 Part 14
.mkv yolo predict source=video.mkv Matroska
.mov yolo predict source=video.mov QuickTime File Format
.mp4 yolo predict source=video.mp4 MPEG-4 Part 14 - Wikipedia
.mpeg yolo predict source=video.mpeg MPEG-1 Part 2
.mpg yolo predict source=video.mpg MPEG-1 Part 2
.ts yolo predict source=video.ts MPEG Transport Stream
.wmv yolo predict source=video.wmv Windows Media Video
.webm yolo predict source=video.webm WebM Project

处理结果

所有Ultralytics的 predict() 调用都会返回一个 Results 对象的列表:

python 复制代码
from ultralytics import YOLO

# 加载预训练的YOLOv8n模型
model = YOLO("yolov8n.pt")

# 对图像运行推理
results = model("bus.jpg")  # 1个Results对象的列表
results = model(["bus.jpg", "zidane.jpg"])  # 2个Results对象的列表

Results 对象具有以下属性:

属性 类型 描述
orig_img numpy.ndarray 原始图像,以numpy数组表示。
orig_shape tuple 原始图像的形状,以(height, width)格式表示。
boxes Boxes, optional 包含检测边界框的 Boxes 对象。
masks Masks, optional 包含检测掩码的 Masks 对象。
probs Probs, optional 包含每个类的概率的 Probs 对象,用于分类任务。
keypoints Keypoints, optional 包含每个对象检测关键点的 Keypoints 对象。
obb OBB, optional 包含定向边界框的 OBB 对象。
speed dict 一个字典,包含预处理、推理和后处理的速度(以毫秒为单位,针对每张图像)。
names dict 一个字典,包含类名。
path str 图像文件的路径。

Results 对象具有以下方法:

方法 返回类型 描述
update() None 更新 Results 对象的 boxesmasksprobs 属性。
cpu() Results 返回一个 Results 对象的副本,所有张量都在CPU内存中。
numpy() Results 返回一个 Results 对象的副本,所有张量都转换为numpy数组。
cuda() Results 返回一个 Results 对象的副本,所有张量都在GPU内存中。
to() Results 返回一个 Results 对象的副本,张量在指定的设备和数据类型上。
new() Results 返回一个新的 Results 对象,具有相同的图像、路径和名称。
plot() numpy.ndarray 绘制检测结果。返回标注图像的numpy数组。
show() None 在屏幕上显示标注结果。
save() None 将标注结果保存到文件。
verbose() str 返回每个任务的日志字符串。
save_txt() None 将预测结果保存到txt文件中。
save_crop() None 将裁剪的预测结果保存到 save_dir/cls/file_name.jpg 中。
tojson() str 将对象转换为JSON格式。

有关更多详细信息,请参阅 Results 类文档。

Boxes

Boxes 对象可用于索引、操作和转换边界框为不同格式。

python 复制代码
from ultralytics import YOLO

# 加载预训练的YOLOv8n模型
model = YOLO("yolov8n.pt")

# 对图像运行推理
results = model("bus.jpg")  # results 列表

# 查看结果
for r in results:
    print(r.boxes)  # 打印包含检测边界框的Boxes对象

以下是 Boxes 类的方法和属性的表格,包括它们的名称、类型和描述:

名称 类型 描述
cpu() 方法 将对象移动到CPU内存。
numpy() 方法 将对象转换为numpy数组。
cuda() 方法 将对象移动到CUDA内存。
to() 方法 将对象移动到指定设备。
xyxy 属性 (torch.Tensor) 返回xyxy格式的边界框。
conf 属性 (torch.Tensor) 返回边界框的置信度值。
cls 属性 (torch.Tensor) 返回边界框的类别值。
id 属性 (torch.Tensor) 返回边界框的跟踪ID(如果可用)。
xywh 属性 (torch.Tensor) 返回xywh格式的边界框。
xyxyn 属性 (torch.Tensor) 返回以原始图像大小归一化的xyxy格式的边界框。
xywhn 属性 (torch.Tensor) 返回以原始图像大小归一化的xywh格式的边界框。

有关更多详细信息,请参阅 Boxes 类文档。

Masks

Masks 对象可用于索引、操作和转换掩码为分段。

python 复制代码
from ultralytics import YOLO

# 加载预训练的YOLOv8n-seg分割模型
model = YOLO("yolov8n-seg.pt")

# 对图像运行推理
results = model("bus.jpg")  # results 列表

# 查看结果
for r in results:
    print(r.masks)  # 打印包含检测实例掩码的Masks对象

以下是 Masks 类的方法和属性的表格,包括它们的名称、类型和描述:

名称 类型 描述
cpu() 方法 返回在CPU内存中的掩码张量。
numpy() 方法 返回作为numpy数组的掩码张量。
cuda() 方法 返回在GPU内存中的掩码张量。
to() 方法 返回具有指定设备和数据类型的掩码张量。
xyn 属性 (torch.Tensor) 以张量表示的归一化分段列表。
xy 属性 (torch.Tensor) 以像素坐标表示的分段列表,以张量表示。

有关更多详细信息,请参阅 Masks 类文档。

Keypoints

Keypoints 对象可用于索引、操作和归一化坐标。

python 复制代码
from ultralytics import YOLO

# 加载预训练的YOLOv8n-pose姿态模型
model = YOLO("yolov8n-pose.pt")

# 对图像运行推理
results = model("bus.jpg")  # results 列表

# 查看结果
for r in results:
    print(r.keypoints)  # 打印包含检测关键点的Keypoints对象

以下是 Keypoints 类的方法和属性的表格,包括它们的名称、类型和描述:

名称 类型 描述
cpu() 方法 返回在CPU内存中的关键点张量。
numpy() 方法 返回作为numpy数组的关键点张量。
cuda() 方法 返回在GPU内存中的关键点张量。
to() 方法 返回具有指定设备和数据类型的关键点张量。
xyn 属性 (torch.Tensor) 以张量表示的归一化关键点列表。
xy 属性 (torch.Tensor) 以像素坐标表示的关键点列表,以张量表示。
conf 属性 (torch.Tensor) 返回关键点的置信度值(如果可用),否则为None。

有关更多详细信息,请参阅 Keypoints 类文档。

Probs

Probs 对象可用于索引、获取分类任务的top1和top5索引及分数。

python 复制代码
from ultralytics import YOLO

# 加载预训练的YOLOv8n-cls分类模型
model = YOLO("yolov8n-cls.pt")

# 对图像运行推理
results = model("bus.jpg")  # results 列表

# 查看结果
for r in results:
    print(r.probs)  # 打印包含检测类概率的Probs对象

以下是 Probs 类的方法和属性的表格:

名称 类型 描述
cpu() 方法 返回在CPU内存中的概率张量的副本。
numpy() 方法 返回作为numpy数组的概率张量的副本。
cuda() 方法 返回在GPU内存中的概率张量的副本。
to() 方法 返回具有指定设备和数据类型的概率张量的副本。
top1 属性 (int) top1类别的索引。
top5 属性 (list[int]) top5类别的索引。
top1conf 属性 (torch.Tensor) top1类别的置信度。
top5conf 属性 (torch.Tensor) top5类别的置信度。

有关更多详细信息,请参阅 Probs 类文档。

OBB

OBB 对象可用于索引、操作和转换定向边界框为不同格式。

python 复制代码
from ultralytics import YOLO

# 加载预训练的YOLOv8n模型
model = YOLO("yolov8n-obb.pt")

# 对图像运行推理
results = model("bus.jpg")  # results 列表

# 查看结果
for r in results:
    print(r.obb)  # 打印包含定向检测边界框的OBB对象

以下是 OBB 类的方法和属性的表格,包括它们的名称、类型和描述:

名称 类型 描述
cpu() 方法 将对象移动到CPU内存。
numpy() 方法 将对象转换为numpy数组。
cuda() 方法 将对象移动到CUDA内存。
to() 方法 将对象移动到指定设备。
conf 属性 (torch.Tensor) 返回边界框的置信度值。
cls 属性 (torch.Tensor) 返回边界框的类别值。
id 属性 (torch.Tensor) 返回边界框的跟踪ID(如果可用)。
xyxy 属性 (torch.Tensor) 返回水平边界框的xyxy格式。
xywhr 属性 (torch.Tensor) 返回旋转边界框的xywhr格式。
xyxyxyxy 属性 (torch.Tensor) 返回旋转边界框的xyxyxyxy格式。
xyxyxyxyn 属性 (torch.Tensor) 返回以图像大小归一化的xyxyxyxy格式的旋转边界框。

有关更多详细信息,请参阅 OBB 类文档。

绘制结果

Results 对象中的 plot() 方法通过将检测到的对象(如边界框、掩码、关键点和概率)叠加在原始图像上,方便了预测结果的可视化。此方法返回注释后的图像作为 NumPy 数组,便于显示或保存。

python 复制代码
from PIL import Image
from ultralytics import YOLO

# 加载预训练的YOLOv8n模型
model = YOLO("yolov8n.pt")

# 对 'bus.jpg' 和 'zidane.jpg' 运行推理
results = model(["bus.jpg", "zidane.jpg"])  # results 列表

# 可视化结果
for i, r in enumerate(results):
    # 绘制结果图像
    im_bgr = r.plot()  # BGR 顺序的 numpy 数组
    im_rgb = Image.fromarray(im_bgr[..., ::-1])  # RGB 顺序的 PIL 图像

    # 在支持的环境中显示结果
    r.show()

    # 将结果保存到磁盘
    r.save(filename=f"results{i}.jpg")

plot() 方法参数

plot() 方法支持各种参数来定制输出:

参数 类型 描述 默认值
conf bool 包含检测置信度分数。 True
line_width float 边界框的线宽。如果为None,则随图像大小缩放。 None
font_size float 文本字体大小。如果为None,则随图像大小缩放。 None
font str 文本注释的字体名称。 'Arial.ttf'
pil bool 将图像作为 PIL Image 对象返回。 False
img numpy.ndarray 用于绘图的替代图像。如果为None,则使用原始图像。 None
im_gpu torch.Tensor 用于更快掩码绘制的 GPU 加速图像。形状:(1, 3, 640, 640)。 None
kpt_radius int 绘制关键点的半径。 5
kpt_line bool 用线连接关键点。 True
labels bool 在注释中包含类别标签。 True
boxes bool 在图像上叠加边界框。 True
masks bool 在图像上叠加掩码。 True
probs bool 包括分类概率。 True
show bool 使用默认图像查看器直接显示注释图像。 False
save bool 将注释图像保存到由 filename 指定的文件。 False
filename str 如果 save 为 True,保存注释图像的文件路径和名称。 None

这些参数可以帮助你根据需要自定义绘制的结果。有关更多详细信息,请参阅 plot() 方法文档。

线程安全推理

在不同线程中并行运行多个 YOLO 模型时,确保推理过程的线程安全至关重要。线程安全推理可以保证每个线程的预测是独立的,互不干扰,从而避免竞争条件,并确保输出的一致性和可靠性。

在多线程应用中使用 YOLO 模型时,重要的是为每个线程实例化单独的模型对象,或使用线程局部存储来防止冲突。

线程安全推理

在每个线程中实例化一个模型以确保线程安全推理:

python 复制代码
from threading import Thread
from ultralytics import YOLO

def thread_safe_predict(image_path):
    """使用本地实例化的 YOLO 模型对图像进行线程安全的预测。"""
    local_model = YOLO("yolov8n.pt")
    results = local_model.predict(image_path)
    # 处理结果

# 启动每个线程都有自己模型实例的线程
Thread(target=thread_safe_predict, args=("image1.jpg",)).start()
Thread(target=thread_safe_predict, args=("image2.jpg",)).start()

有关使用 YOLO 模型进行线程安全推理的详细信息和分步说明,请参阅我们的 YOLO 线程安全推理指南。该指南将为您提供所有必要的信息,以避免常见的陷阱,并确保您的多线程推理顺利进行。

流媒体源 for 循环

以下是一个使用 OpenCV (cv2) 和 YOLOv8 在视频帧上运行推理的 Python 脚本。该脚本假设您已安装必要的软件包(opencv-python 和 ultralytics)。

流媒体 for 循环
python 复制代码
import cv2
from ultralytics import YOLO

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

# 打开视频文件
video_path = "path/to/your/video/file.mp4"
cap = cv2.VideoCapture(video_path)

# 循环处理视频帧
while cap.isOpened():
    # 从视频中读取一帧
    success, frame = cap.read()

    if success:
        # 对帧运行 YOLOv8 推理
        results = model(frame)

        # 在帧上可视化结果
        annotated_frame = results[0].plot()

        # 显示注释后的帧
        cv2.imshow("YOLOv8 Inference", annotated_frame)

        # 如果按下 'q' 键,跳出循环
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # 如果达到视频末尾,跳出循环
        break

# 释放视频捕获对象并关闭显示窗口
cap.release()
cv2.destroyAllWindows()

该脚本将对视频的每一帧进行预测,可视化结果,并在窗口中显示。按下 'q' 键可以退出循环。

相关推荐
AI前沿技术追踪3 分钟前
人工智能安全治理新篇章:《2024人工智能安全治理框架1.0版》深度解读@附20页PDF文件下载
人工智能
weixin_419349797 分钟前
Python pdf转换为html
python·pdf
吉小雨18 分钟前
PyTorch经典模型
人工智能·pytorch·python
可愛小吉29 分钟前
Python 课程10-单元测试
开发语言·python·单元测试·tdd·unittest
student.J35 分钟前
傅里叶变换
python·算法·傅里叶
无名之逆42 分钟前
计算机专业的就业方向
java·开发语言·c++·人工智能·git·考研·面试
CV-杨帆1 小时前
大语言模型-教育方向数据集
人工智能·语言模型·自然语言处理
Freak嵌入式1 小时前
全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类
java·开发语言·数据结构·python·接口·抽象基类
Jackilina_Stone1 小时前
【AI】简单了解AIGC与ChatGPT
人工智能·chatgpt·aigc
paixiaoxin1 小时前
学术新手进阶:Zotero插件全解锁,打造你的高效研究体验
人工智能·经验分享·笔记·机器学习·学习方法·zotero