You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在YOLOv8代码中获取检测到的目标对象?

如何在YOLOv8代码中获取检测到的目标对象?

嘿,我来帮你搞定这个问题!你现在用的是YOLOv8的追踪功能,其实results变量里已经藏着所有检测/追踪到的目标信息了,只是你还没把它提取出来而已~

你当前的代码里,model.track()返回的results是包含每帧检测结果的对象集合,咱们可以直接从里面提取目标的各类信息,比如追踪ID、类别、置信度、坐标这些。下面给你调整代码,顺便讲讲怎么用:

from ultralytics import YOLO

model = YOLO("/media/aceryohan/_Yohan/Pycharm projects/myfirstproject/computer vision/best.pt")

# 用stream=True开启逐帧处理,适配实时摄像头的场景
for result in model.track(source=2, show=True, tracker="bytetrack.yaml", stream=True):
    # 先判断当前帧是否检测到目标(且开启追踪后有track_id)
    if result.boxes.id is not None:
        # 把GPU上的张量转到CPU,再转成numpy数组方便后续处理
        track_ids = result.boxes.id.cpu().numpy().astype(int)
        class_ids = result.boxes.cls.cpu().numpy().astype(int)
        confidences = result.boxes.conf.cpu().numpy()
        # xyxy格式是左上角+右下角坐标,需要中心坐标+宽高的话可以用xywh
        boxes = result.boxes.xyxy.cpu().numpy()

        # 逐个遍历目标,输出详细信息
        for track_id, class_id, conf, box in zip(track_ids, class_ids, confidences, boxes):
            # 通过类别ID获取对应的类别名称
            class_name = result.names[class_id]
            print(f"追踪ID: {track_id}, 类别: {class_name}, 置信度: {conf:.2f}, 坐标: {box}")
    else:
        # 没检测到目标时的提示(可选)
        print("当前帧未检测到目标")

给你划几个关键细节:

  • stream=True:这样能逐帧处理摄像头画面,而不是只返回最后一帧的结果,更适合实时场景
  • result.boxes是核心:里面包含所有检测框的关键数据——id是追踪ID(仅track模式有),cls是类别ID,conf是置信度,xyxy是坐标
  • .cpu()的作用:YOLOv8默认用GPU计算,张量存在GPU内存里,得转到CPU才能转成numpy数组方便后续操作
  • 如果不需要追踪,只是单纯检测目标:去掉tracker参数,忽略track_ids部分即可,其他提取逻辑完全通用

这样你就能拿到每个检测目标的详细信息,不管是存数据还是做后续处理都没问题~

备注:内容来源于stack exchange,提问作者ubuntu_is_life

火山引擎 最新活动