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

使用 Ultralytics YOLO 进行模型预测

简介

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

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

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

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

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

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

预测

  • 返回列表,设置 stream=False
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
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捕捉截屏。
PILImage.open(‘im.jpg’)PIL.Image具有 RGB 通道的 HWC 格式。
OpenCVcv2.imread(‘im.jpg’)np.ndarray具有 BGR 通道 uint8 (0-255) 的 HWC 格式。
numpynp.zeros((640,1280,3))np.ndarray具有 BGR 通道 uint8 (0-255) 的 HWC 格式。
torchtorch.zeros(16,3,320,640)torch.Tensor具有 RGB 通道 float32 (0.0-1.0) 的 BCHW 格式。
CSV‘sources.csv’str 或 Path包含图像、视频或目录路径的 CSV 文件。
视频 ✅‘video.mp4’str 或 PathMP4、AVI 等格式的视频文件。
目录 ✅‘path/’str 或 Path包含图像或视频的目录路径。
glob ✅‘path/*.jpg’str匹配多个文件的 glob 模式。使用 * 字符作为通配符。
YouTube ✅‘https://youtu.be/LNwODJXcvt4’strYouTube 视频的 URL。
流 ✅‘rtsp://example.com/media.mp4’str用于流协议(如 RTSP、RTMP、TCP)或 IP 地址的 URL。
多流 ✅‘list.streams’str 或 Path包含每行一个流 URL 的 *.streams 文本文件,即 8 个流将在批处理大小为 8 的情况下运行。

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

预测来源

  • 图像
    对图像文件进行推理。
from ultralytics import YOLO

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

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

# 对来源进行推理
results = model(source)  # 结果对象列表
  • 截屏
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
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
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
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
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
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
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
  • 视频
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
  • 目录
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
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
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
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() 接受多个参数,这些参数可以在推理时传递以覆盖默认值:

例子:

from ultralytics import YOLO

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

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

推理参数:

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

可视化参数

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

图像和视频格式

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

图像格式

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

图像后缀示例预测命令参考
.bmpyolo predict source=image.bmpMicrosoft BMP File Format
.dngyolo predict source=image.dngAdobe DNG
.jpegyolo predict source=image.jpegJPEG
.jpgyolo predict source=image.jpgJPEG
.mpoyolo predict source=image.mpoMulti Picture Object
.pngyolo predict source=image.pngPortable Network Graphics
.tifyolo predict source=image.tifTag Image File Format
.tiffyolo predict source=image.tiffTag Image File Format
.webpyolo predict source=image.webpWebP
.pfmyolo predict source=image.pfmPortable FloatMap

视频格式

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

视频后缀示例预测命令参考
.asfyolo predict source=video.asfAdvanced Systems Format
.aviyolo predict source=video.aviAudio Video Interleave
.gifyolo predict source=video.gifGraphics Interchange Format
.m4vyolo predict source=video.m4vMPEG-4 Part 14
.mkvyolo predict source=video.mkvMatroska
.movyolo predict source=video.movQuickTime File Format
.mp4yolo predict source=video.mp4MPEG-4 Part 14 - Wikipedia
.mpegyolo predict source=video.mpegMPEG-1 Part 2
.mpgyolo predict source=video.mpgMPEG-1 Part 2
.tsyolo predict source=video.tsMPEG Transport Stream
.wmvyolo predict source=video.wmvWindows Media Video
.webmyolo predict source=video.webmWebM Project

处理结果

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

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_imgnumpy.ndarray原始图像,以numpy数组表示。
orig_shapetuple原始图像的形状,以(height, width)格式表示。
boxesBoxes, optional包含检测边界框的 Boxes 对象。
masksMasks, optional包含检测掩码的 Masks 对象。
probsProbs, optional包含每个类的概率的 Probs 对象,用于分类任务。
keypointsKeypoints, optional包含每个对象检测关键点的 Keypoints 对象。
obbOBB, optional包含定向边界框的 OBB 对象。
speeddict一个字典,包含预处理、推理和后处理的速度(以毫秒为单位,针对每张图像)。
namesdict一个字典,包含类名。
pathstr图像文件的路径。

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 对象可用于索引、操作和转换边界框为不同格式。

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 对象可用于索引、操作和转换掩码为分段。

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 对象可用于索引、操作和归一化坐标。

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索引及分数。

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 对象可用于索引、操作和转换定向边界框为不同格式。

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 数组,便于显示或保存。

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() 方法支持各种参数来定制输出:

参数类型描述默认值
confbool包含检测置信度分数。True
line_widthfloat边界框的线宽。如果为None,则随图像大小缩放。None
font_sizefloat文本字体大小。如果为None,则随图像大小缩放。None
fontstr文本注释的字体名称。‘Arial.ttf’
pilbool将图像作为 PIL Image 对象返回。False
imgnumpy.ndarray用于绘图的替代图像。如果为None,则使用原始图像。None
im_gputorch.Tensor用于更快掩码绘制的 GPU 加速图像。形状:(1, 3, 640, 640)。None
kpt_radiusint绘制关键点的半径。5
kpt_linebool用线连接关键点。True
labelsbool在注释中包含类别标签。True
boxesbool在图像上叠加边界框。True
masksbool在图像上叠加掩码。True
probsbool包括分类概率。True
showbool使用默认图像查看器直接显示注释图像。False
savebool将注释图像保存到由 filename 指定的文件。False
filenamestr如果 save 为 True,保存注释图像的文件路径和名称。None

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

线程安全推理

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

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

线程安全推理

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

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 循环
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’ 键可以退出循环。

  • 17
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

脑洞笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值