跳到主要内容
Python 目标检测:Ultralytics 安装与 YOLOv8 快速上手 | 极客日志
Python AI 算法
Python 目标检测:Ultralytics 安装与 YOLOv8 快速上手 综述由AI生成 Ultralytics 库的安装方法及 YOLOv8 模型在目标检测、分割、姿态估计等任务中的快速上手指南。内容涵盖模型下载、代码推理示例(图像、视频流)、不同模型规格的性能对比表、支持的输入源类型、推理参数详解、返回值结构解析以及结果可视化方法。通过具体代码片段展示了如何使用 Python 调用 YOLOv8 进行预测,并解释了 Boxes、Masks、Keypoints 等核心对象的使用方法,适合希望快速集成 YOLOv8 进行计算机视觉开发的开发者参考。
禅心 发布于 2026/2/6 更新于 2026/5/29 24 浏览一、Ultralytics 安装
网址:主页 - Ultralytics YOLO 文档
Ultralytics 提供了各种安装方法,包括 pip、conda 和 Docker。通过 ultralytics pip 包安装最新稳定版本的 YOLOv8,或克隆 Ultralytics GitHub 存储库以获取最新版本。可以使用 Docker 在隔离的容器中执行包,避免本地安装。
pip install ultralytics==8.2.28 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install git+https://github.com/ultralytics/ultralytics.git@main
注意:ultralytics 需要 PyTorch 支持。
二、使用 YOLOV8
2.1、使用 Ultralytics 实现 YOLOV8
Python 接口使用户能够快速实现对象检测、分割和分类等功能。
from ultralytics import YOLO
results = model(['./bus.jpg' ])
for result in results:
boxes = result.boxes
masks = result.masks
keypoints = result.keypoints
probs = result.probs
result.show()
result.save(filename='result.jpg' )
2.2、使用 Ultralytics 实现 YOLOV8 流式预测
import cv2
from ultralytics import YOLO
model = YOLO("yolov8n.pt" )
video_path =
cap = cv2.VideoCapture(video_path)
cap.isOpened():
success, frame = cap.read()
success:
results = model(frame)
annotated_frame = results[ ].plot()
cv2.imshow( , annotated_frame)
cv2.waitKey( ) & == ( ):
:
cap.release()
cv2.destroyAllWindows()
'WH038.mp4'
while
if
0
"YOLOV8 推理结果"
if
1
0xFF
ord
"q"
break
else
break
三、了解 YOLOV8
3.1、检测(COCO) 有关在 COCO 上训练的这些模型的使用示例,请参阅 检测文档 ,其中包括 80 个预训练类。
模型 尺寸(像素) mAPval 50-95 速度 CPU ONNX(毫秒) 速度 A100 TensorRT(毫秒) params (M) FLOPs (B) YOLOv8n 640 37.3 80.4 0.99 3.2 8.7 YOLOv8s 640 44.9 128.4 1.20 11.2 28.6 YOLOv8m 640 50.2 234.7 1.83 25.9 78.9 YOLOv8l 640 52.9 375.2 2.39 43.7 165.2 YOLOv8x 640 53.9 479.1 3.53 68.2 257.8
注意:
FLOPs (B) 表示 "Floating Point Operations per second in Billion",即每秒十亿次浮点运算。这个指标通常用于衡量一个模型在进行推断或训练时的计算性能。浮点运算是指包括加法、减法、乘法、除法等在内的基本数学运算,它们在深度学习模型中是非常常见的操作。
YOLOV8n 模型的 FLOPs (B) 值为 8.7,意味着在进行推断或训练时,该模型每秒大约执行 8.7 亿次浮点数运算。
3.2、分割(COCO) 模型 尺寸(像素) mAPbox 50-95 mAPmask 50-95 速度 CPU ONNX(毫秒) 速度 A100 TensorRT(毫秒) params (M) FLOPs (B) YOLOv8n-seg 640 36.7 30.5 96.1 1.21 3.4 12.6 YOLOv8s-seg 640 44.6 36.8 155.7 1.47 11.8 42.6 YOLOv8m-seg 640 49.9 40.8 317.0 2.18 27.3 110.2 YOLOv8l-seg 640 52.3 42.6 572.4 2.79 46.0 220.5 YOLOv8x-seg 640 53.4 43.4 712.1 4.02 71.8 344.1
3.3、姿势(COCO)
3.4、OBB(DOTAv1)
3.5、分类(ImageNet)
四、推理源 YOLOv8 可以处理不同类型的输入源进行推理,如下表所示。输入源包括静态图像、视频流和各种数据格式。表中还标明了每种输入源是否可以在流模式下使用参数 stream=True ✅。流模式有利于处理视频或实时流,因为它会创建一个结果生成器,而不是将所有帧加载到内存中。
使用 stream=True 用于处理长视频或大型数据集,以有效管理内存。当 stream=False 时,所有帧或数据点的结果都会存储在内存中,这可能会迅速累加,并导致大量输入出现内存不足错误。与此形成鲜明对比的是 stream=True 利用生成器,它只将当前帧或数据点的结果保存在内存中,从而大大减少了内存消耗并防止出现内存不足的问题。
资料来源 论据 类型 说明 图像 'image.jpg' str 或 Path 单个图像文件。 网址 '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 频道的 HWC 格式 uint8 (0-255)。 numpy np.zeros((640,1280,3)) np.ndarray 带有 BGR 频道的 HWC 格式 uint8 (0-255)。 torch torch.zeros(16,3,320,640) torch.Tensor 带 RGB 通道的 BCHW 格式 float32 (0.0-1.0)。 CSV 'sources.csv' str 或 Path 包含图像、视频或目录路径的 CSV 文件。 视频 'video.mp4' str 或 Path MP4 和 AVI 等格式的视频文件 目录 'path/' str 或 Path 包含图像或视频的目录路径。 球体 'path/*.jpg' str 全局模式来匹配多个文件。使用 * 字符作为通配符。 YouTube 'https://youtu.be/LNWODJXcvt4 ' str YouTube 视频的 URL。 流 'rtsp://example.com/media.mp4' str 流媒体协议 (如 RTSP、RTMP、TCP) 的 URL 或 IP 地址。 多流 'list.streams' str 或 Path *.streams 文本文件,每行一个流 URL,即 8 个流将以 8 的批处理大小运行。
4.1、在图像文件上运行推理 from ultralytics import YOLO
model = YOLO("yolov8n.pt" )
source = "bus.jpg"
results = model(source)
4.2、通过 URL 对远程托管的图像或视频进行推理 from ultralytics import YOLO
model = YOLO("yolov8n.pt" )
source = "https://ultralytics.com/images/bus.jpg"
results = model(source)
4.3、在使用 Python Imaging Library (PIL) 打开的图像上运行推理 from PIL import Image
from ultralytics import YOLO
model = YOLO("yolov8n.pt" )
source = Image.open ("bus.jpg" )
results = model(source)
4.4、在使用 OpenCV 读取的图像上运行推理 import cv2
from ultralytics import YOLO
model = YOLO("yolov8n.pt" )
source = cv2.imread('bus.jpg' )
results = model(source)
4.5、使用 RTSP、RTMP、TCP 和 IP 地址协议对远程流媒体源进行推理 如果在一个 *.streams 文本文件,则将运行批处理推理,即 8 个数据流将以 8 的批处理大小运行,否则单个数据流将以 1 的批处理大小运行。
from ultralytics import YOLO
model = YOLO("yolov8n.pt" )
source = "rtsp://example.com/media.mp4"
source = "path/to/list.streams"
results = model(source)
五、推理参数 model.predict() 接受多个参数,这些参数可以在推理时传递,以覆盖默认值:
参数 类型 默认值 说明 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')。允许用户选择 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,则根据图像大小自动调整线宽。提供可视化定制,使图像更加清晰。
六、图像和视频格式
6.1、图像 图像后缀 预测命令示例 参考资料 .bmp yolo predict source=image.bmp微软 BMP 文件格式 .dng yolo predict source=image.dngAdobe DNG .jpeg yolo predict source=image.jpegJPEG .jpg yolo predict source=image.jpgJPEG .mpo yolo predict source=image.mpo多画面对象 .png yolo predict source=image.png便携式网络图形 .tif yolo predict source=image.tif标签图像文件格式 .tiff yolo predict source=image.tiff标签图像文件格式 .webp yolo predict source=image.webpWebP .pfm yolo predict source=image.pfm便携式浮图
6.2、视频格式
七、返回值 predict() 调用将返回一个 Results。
from ultralytics import YOLO
model = YOLO("yolov8n.pt" )
results = model("bus.jpg" )
results = model(["bus.jpg" , "zidane.jpg" ])
boxes: ultralytics.engine.results.Boxes object
keypoints: None
masks: None
names: {0: 'person' , 1: 'bicycle' , 2: 'car' , ... }
probs: None
orig_img: array(...)
orig_shape: (1080, 810 )
path: 'D:\目标检测\bus.jpg'
speed: {'preprocess': 6.001710891723633 , 'inference': 35.00771522521973 , 'postprocess': 5.001306533813477 }]
属性 类型 说明 orig_imgnumpy.ndarray原始图像的 numpy 数组。 orig_shapetuple原始图像的形状,格式为(高、宽)。 boxesBoxes, optional包含检测边界框的方框对象。 masksMasks, optional包含检测掩码的掩码对象。 probsProbs, optionalProbs 对象,包含分类任务中每个类别的概率。keypointsKeypoints, optional关键点对象,包含每个对象的检测关键点。 obbOBB, optional包含定向包围盒的 OBB 对象。 speeddict每幅图像的预处理、推理和后处理速度字典,单位为毫秒。 namesdict类名字典。 pathstr图像文件的路径。
方法 返回类型 说明 update()None更新结果对象的方框、掩码和 probs 属性。 cpu()Results返回包含 CPU 内存中所有张量的结果对象副本。 numpy()Results返回结果对象的副本,其中所有张量均为 numpy 数组。 cuda()Results返回包含 GPU 内存中所有张量的 Results 对象副本。 to()Results返回带有指定设备和 dtype 上张量的 Results 对象副本。 new()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 格式。
7.1、Boxes Boxes 对象可用于索引、操作和将边界框转换为不同格式。
from ultralytics import YOLO
model = YOLO("yolov8n.pt" )
results = model("bus.jpg" )
for i in results:
print (i.boxes)
cls: tensor([ 5. , 0. , 0. , 0. , 11. , 0. ], device='cuda:0' )
conf: tensor([0.8705 , 0.8690 , 0.8536 , 0.8193 , 0.3461 , 0.3013 ], device='cuda:0' )
data: tensor([[1.7286e+01 , 2.3059e+02 , 8.0152e+02 , 7.6841e+02 , 8.7054e-01 , 5.0000e+00 ], ...])
id : None
is_track: False
orig_shape: (1080 , 810 )
shape: torch.Size([6 , 6 ])
xywh: tensor([[409.4020 , 499.4991 , 784.2324 , 537.8136 ], ...])
xywhn: tensor([[0.5054 , 0.4625 , 0.9682 , 0.4980 ], ...])
xyxy: tensor([[1.7286e+01 , 2.3059e+02 , 8.0152e+02 , 7.6841e+02 ], ...])
xyxyn: tensor([[2.1340e-02 , 2.1351e-01 , 9.8953e-01 , 7.1149e-01 ], ...])
名称 类型 说明 cpu()方法 将对象移动到 CPU 内存。 numpy()方法 将对象转换为 numpy 数组。 cuda()方法 将对象移动到 CUDA 内存。 to()方法 将对象移动到指定设备。 xyxyProperty (torch.Tensor) 以 xyxy 格式返回方框。 confProperty (torch.Tensor) 返回方框的置信度值。 clsProperty (torch.Tensor) 返回方框的类值。 idProperty (torch.Tensor) 返回盒子的跟踪 ID(如果有)。 xywhProperty (torch.Tensor) 以 xywh 格式返回方框。 xyxynProperty (torch.Tensor) 以 xyxy 格式返回按原始图像大小归一化的方框。 xywhnProperty (torch.Tensor) 以 xywh 格式返回按原始图像大小归一化的方框。
xyxy (torch.Tensor | numpy.ndarray):格式为 [x1, y1, x2, y2] 的方框。
conf (torch.Tensor | numpy.ndarray):每个方框的置信度得分。
cls (torch.Tensor | numpy.ndarray):每个方框的类标签。
id (torch.Tensor | numpy.ndarray,可选):每个方框的跟踪 ID(如果有)。
xywh (torch.Tensor | numpy.ndarray):按要求计算的 [x, y, width, height] 格式的方框。
xyxyn (torch.Tensor | numpy.ndarray):归一化 [x1, y1, x2, y2] 方框,相对于 orig_shape。
xywhn (torch.Tensor | numpy.ndarray):归一化的 [x、y、宽、高] 方框,相对于 orig_shape。
7.2、Masks Masks 对象可用于索引、操作和将掩码转换为线段。
from ultralytics import YOLO
model = YOLO("yolov8n.pt" )
results = model("bus.jpg" )
for i in results:
print (i.masks)
名称 类型 说明 cpu()方法 返回 CPU 内存中的掩码 tensor。 numpy()方法 以 numpy 数组形式返回掩码 tensor。 cuda()方法 返回 GPU 内存中的掩码 tensor。 to()方法 返回具有指定设备和 dtype 的掩码 tensor。 xynProperty (torch.Tensor) 以张量表示的标准化片段列表。 xyProperty (torch.Tensor) 以张量表示的像素坐标线段列表。
7.3、Keypoints Keypoints 对象可用于索引、处理和归一化坐标。
from ultralytics import YOLO
model = YOLO("yolov8n.pt" )
results = model("bus.jpg" )
for i in results:
print (i.keypoints)
名称 类型 说明 cpu()方法 返回 CPU 内存中的关键点 tensor。 numpy()方法 以 numpy 数组形式返回关键点 tensor。 cuda()方法 返回 GPU 内存中的关键点 tensor。 to()方法 返回指定设备和 dtype 的关键点 tensor。 xynProperty (torch.Tensor) 以张量表示的标准化关键点列表。 xyProperty (torch.Tensor) 以张量表示的像素坐标关键点列表。 confProperty (torch.Tensor) 返回关键点的置信度值(如果有),否则为空。
7.4、Probs Probs 对象可用于索引、获取 top1 和 top5 分类指数和分数。
from ultralytics import YOLO
model = YOLO("yolov8n.pt" )
results = model("bus.jpg" )
for i in results:
print (i.probs)
名称 类型 说明 cpu()方法 返回 CPU 内存中 probstensor 的副本。 numpy()方法 以 numpy 数组形式返回 probstensor 的副本。 cuda()方法 返回 GPU 内存中 probstensor 的副本。 to()方法 返回带有指定设备和 dtype 的 probstensor 的副本。 top1Property (int) 置信度第 1 的索引。 top5Property (list[int]) 置信度前 5 的索引。 top1confProperty (torch.Tensor) 返回第 1 名的置信度。 top5confProperty (torch.Tensor) 返回前 5 名的置信度。
7.5、OBB OBB 指的是 "Oriented Bounding Box",即定向边界框。它是一种包围物体的矩形框,与传统的边界框不同,OBB 可以沿着物体的方向进行旋转,以更好地适应物体的实际形状和方向。OBB 对象可用于索引、操作和将定向边界框转换为不同格式。
from ultralytics import YOLO
model = YOLO("yolov8n.pt" )
results = model("bus.jpg" )
for i in results:
print (i.obb)
名称 类型 说明 cpu()方法 将对象移至 CPU 内存。 numpy()方法 将对象转换为 numpy 数组。 cuda()方法 将对象移至 CUDA 内存。 to()方法 将对象移动到指定设备。 confProperty (torch.Tensor) 返回方框的置信度值。 clsProperty (torch.Tensor) 返回方框的类值。 idProperty (torch.Tensor) 返回盒子的轨道 ID(如果有)。 xyxyProperty (torch.Tensor) 以 xyxy 格式返回水平方框。 xywhrProperty (torch.Tensor) 以 xywhr 格式返回旋转后的方框。 xyxyxyxyProperty (torch.Tensor) 以 xyxyxyxy 格式返回旋转后的方框。 xyxyxyxynProperty (torch.Tensor) 以 xyxyxyxy 格式返回按图像大小归一化的旋转方框。
八、绘制结果 plot() 方法中的 Results 对象,将检测到的对象(如边界框、遮罩、关键点和概率)叠加到原始图像上,从而实现预测的可视化。该方法以 NumPy 数组形式返回注释图像,便于显示或保存。
from ultralytics import YOLO
model = YOLO("yolov8n.pt" )
results = model(['./bus.jpg' ])
for result in results:
result.show()
result.save(filename='result.jpg' )
参数 类型 说明 默认值 confbool包括检测置信度分数。 Trueline_widthfloat边界框的线宽。根据图像大小缩放,如果为 None。 Nonefont_sizefloat文字字体大小。与图像大小一致,如果为 None。 Nonefontstr文本注释的字体名称。 'Arial.ttf' pilbool将图像作为 PIL 图像对象返回。 Falseimgnumpy.ndarray用于绘图的替代图像。如果为 None,则使用原始图像。 Noneim_gputorch.Tensor经过 GPU 加速的图像,可更快地绘制遮罩图。形状:(1,3,640,640)。 Nonekpt_radiusint绘制关键点的半径。 5 kpt_linebool用线条连接关键点。 Truelabelsbool在注释中包含类标签。 Trueboxesbool在图像上叠加边界框。 Truemasksbool在图像上叠加蒙版 Trueprobsbool包括分类概率。 Trueshowbool使用默认图像查看器直接显示注释图像。 Falsesavebool将注释的图像保存到由 filename 指定的文件。 Falsefilenamestr保存注释图像的文件路径和名称(如果有)。仅当 save 是 True 时使用。 None
相关免费在线工具 加密/解密文本 使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
RSA密钥对生成器 生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
Mermaid 预览与可视化编辑 基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
随机西班牙地址生成器 随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
Gemini 图片去水印 基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online
curl 转代码 解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online