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

人工智能 深度学习
在本文中,我将带您了解如何使用预训练的 YOLO 模型进行目标跟踪。这是最简单的教程,我们只处理简单的目标检测。

YOLO 是一种能够实时进行目标检测的深度学习算法。您可以使用预训练的 YOLO 模型,如 YOLOv8 或 YOLOv9,或者在需要时在自定义数据集上训练自己的模型。在本文中,我将带您了解如何使用预训练的 YOLO 模型进行目标跟踪。这是最简单的教程,我们只处理简单的目标检测。

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

  • 我们将加载模型
  • 我们将加载视频
  • 我们将逐帧提取视频
  • 对每一帧进行预测并使用 OpenCV 显示结果

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

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

第 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 步:提取帧 

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

  • vs = cv.VideoCapture(path):包含指向视频的指针。
  • vs.read():允许我们逐帧读取视频。一旦我们调用vs上的read函数,它将以迭代的方式返回当前的视频帧。
  • cv.imshow('image', frame):显示每个提取出的帧。
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
相关推荐

2019-10-31 16:14:28

物联网机器学习AI

2023-11-22 13:45:37

计算机视觉数据预处理

2021-05-19 09:00:00

人工智能机器学习技术

2024-11-29 16:10:31

2023-07-07 10:53:08

2023-06-26 10:44:42

2024-11-06 16:56:51

2024-07-24 08:54:11

2023-04-04 08:25:31

计算机视觉图片

2024-11-27 16:06:12

2023-11-20 22:14:16

计算机视觉人工智能

2023-09-04 15:15:17

计算机视觉人工智能

2023-06-30 14:01:00

增强现实AR和VR

2020-11-05 13:50:23

计算机视觉

2020-08-04 10:24:50

计算机视觉人工智能AI

2024-03-01 10:08:43

计算机视觉工具开源

2020-12-24 13:44:14

计算机互联网 技术

2020-05-13 20:35:05

物联网安全技术

2021-03-29 11:52:08

人工智能深度学习

2021-01-14 21:40:40

机器学习计算机视觉图像数据集
点赞
收藏

51CTO技术栈公众号