文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

使用 YOLO 和计算机视觉进行目标跟踪

2024-11-29 19:04

关注

让我们看看目标检测所涉及的步骤。

下面的图像总结了这些步骤:

目标检测步骤 让我们开始编码。

第 0 步:环境设置

我们需要两个库 ultralytics 和 opencv,您可以使用以下代码安装这些库。

pip install ultralytics opencv-python

导入所有必要的库。

import cv2 as cv
from ultralytics import YOLO

第 1 步:加载模型 

#load the model
model = YOLO('yolov8n.pt')

在 YOLO 中加载模型非常容易。我们可以直接使用 ultralytics 提供的 YOLO() 函数,并指定模型名称。一旦运行,它会自动在代码所在的文件夹中下载指定的 YOLO 模型。

第 2 步:加载视频 

我们使用 OpenCV 的 VideoCapture() 函数来加载视频。这个函数的输入是视频的路径。

path = "../videos/football_test.mp4"
#read video
vs = cv.VideoCapture(path)

第 3 步:提取帧 

一旦我们加载了视频,在下一步我们将逐个提取视频中的帧。视频是由连续拼接在一起的帧组成的。

path = "../videos/football_test.mp4"
#read video
vs = cv.VideoCapture(path)

#load the model
model = YOLO('yolov8n.pt')
while True:
    (grabbed,frame) = vs.read()
    if not grabbed:
        break
    cv.imshow('image', frame)
    cv.waitKey(500)

第 4 步:应用预测 

模型的predict()方法是用于对每一帧进行预测的方法。预测结果存储在results变量中。在while循环中,我们从视频中提取每一帧,并在每一帧上进行预测。简单来说,我正在尝试在视频中的每一帧中检测对象。

results = model.predict(frame,stream=False)

path = "../videos/football_test.mp4"
    #read video
    vs = cv.VideoCapture(path)
    #load the model
    model = YOLO('yolov8n.pt')
    while True:
        (grabbed,frame) = vs.read()
        if not grabbed:
            break
        results = model.predict(frame,stream=False)
        cv.imshow('image', frame)
        cv.waitKey(500)

第 5 步:绘制边界框

为了绘制边界框,我创建了一个函数,该函数将输入图像、数据(包含预测结果)、检测到的类别名称,并返回带有检测到的对象边界框的图像。drawBox(data, image, name):data是预测详情,image是帧,name是检测到的类别名称,例如:人、汽车等。

def drawBox(data,image,name):
    x1, y1, x2, y2, conf, id = data
    p1 = (int(x1), int(y1))
    p2 = (int(x2), int(y2))
    cv.rectangle(image, p1, p2, (0, 0, 255), 3)
    cv.putText(image, name, p1, cv.FONT_HERSHEY_SIMPLEX, 3, (0, 0, 255), 3)
    return image
    
results = model.predict(frame,stream=False)
for result in results:
     for data in result.boxes.data.tolist():
           #print(data)
           id = data[5]
           drawBox(data, frame,detection_classes[id])

由于结果包含了帧中所有检测到的对象的详细信息,我们在上述代码中对每个检测到的对象进行解码。对于每个检测,我们调用`drawBox(data, frame, detection_classes[id])`来在检测周围绘制边界框。

第 6 步:完整代码

您也可以在此处访问完整代码:https://github.com/sunnykumar1516/YOLO/blob/main/ReadVideoApplyYoloV8.py。

import cv2 as cv
from ultralytics import YOLO

def drawBox(data,image,name):
    x1, y1, x2, y2, conf, id = data
    p1 = (int(x1), int(y1))
    p2 = (int(x2), int(y2))
    cv.rectangle(image, p1, p2, (0, 0, 255), 3)
    cv.putText(image, name, p1, cv.FONT_HERSHEY_SIMPLEX, 3, (0, 0, 255), 3)
    return image

detection_classes= []
 path = "../videos/football_test.mp4"
    #read video
 vs = cv.VideoCapture(path)
    #load the model
 model = YOLO('yolov8n.pt')
 while True:
    (grabbed,frame) = vs.read()
     if not grabbed:
            break
     results = model.predict(frame,stream=False)
     detection_classes = results[0].names
     for result in results:
         for data in result.boxes.data.tolist():
                #print(data)
                id = data[5]
                drawBox(data, frame,detection_classes[id])

完整代码参考:https://github.com/sunnykumar1516/YOLO/blob/main

来源:小白玩转Python内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯