专栏名称: 小白学视觉
本公众号主要介绍机器视觉基础知识和新闻,以及在学习机器视觉时遇到的各种纠结和坑的心路历程。
目录
相关文章推荐
为你读诗  ·  祝你不在意任何节日,盛不盛开,花都是花 ·  9 小时前  
墨语的自言推书  ·  《暗恋他的第十一年春》明媚花店女老板x清冷矜 ... ·  昨天  
为你读诗  ·  元宵:愿蓦然回首,总有良辰可逢 ·  昨天  
为你读诗  ·  花草有本心:走近古典文学中的诗意世界 ·  2 天前  
为你读诗  ·  一缕藏香,独享内心的平静与安宁 ·  3 天前  
51好读  ›  专栏  ›  小白学视觉

​基于 YOLO 和计算机视觉的目标跟踪

小白学视觉  · 公众号  ·  · 2024-07-06 12:13

正文

点击上方 小白学视觉 ”,选择加" 星标 "或“ 置顶

重磅干货,第一时间送达

YOLO是一种深度学习算法,用于实时进行目标检测。您可以使用预训练的YOLO模型,如YOLOv8或YOLOv9,或者根据需要在自定义数据集上训练自己的模型。在本文中,我将带您了解如何使用预训练的YOLO模型进行目标跟踪。这是最简单教程,我们只处理简单的目标检测。
完整代码: https://github.com/sunnykumar1516/YOLO/blob/main
让我们看看涉及目标检测的步骤。
  1. 我们将加载模型
  2. 我们将加载视频
  3. 我们将逐个提取视频中的每一帧
  4. 在每个提取出的帧上,我们将应用预测并使用opencv显示结果。
    下面的图片总结了步骤:
步骤0:环境设置 我们将需要两个库ultralytics和opencv,您可以使用以下代码安装这些库。
pip install opencv-pythonpip install ultralytics
导入所有必要的库。
import cv2 as cvfrom ultralytics import YOLO
步骤1:加载模型
在yolo中加载模型非常容易。我们可以直接使用ultralytics中的YOLO(),并提供模型名称。一旦您运行它,指定的yolo模型将自动下载到您的代码所在文件夹。
#load the modelmodel = YOLO('yolov8n.pt')
步骤2:加载视频
我们使用opencv中的VideoCapture()来加载视频。这个函数的输入是视频的路径。
path = "../videos/football_test.mp4"#read videovs = 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)
一旦我们加载了视频,在下一步我们将逐个提取视频中的帧。视频是一系列帧的组合。
  • vs = cv.VideoCapture(path):包含视频的指针。
  • vs.read():使我们能够逐帧读取视频。一旦我们调用vs上的read函数,它将以迭代方式返回当前的视频帧。
每个提取出的帧都使用cv.imshow('image', frame)显示。
步骤4:应用预测
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)
model.predict()是用于对每个帧进行预测的方法。预测结果存储在results变量中。
在while循环中,我们逐个提取视频中的每个帧,并对每个帧进行预测。简单来说,我正在尝试检测视频中每一帧中的对象。
步骤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 cvfrom 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])
结论






请到「今天看啥」查看全文