目标跟踪调用yolo和deepsort进行多目标的跟踪
由于多目标跟踪的TBD范式是由检测和跟踪部分共同决定的,一般主流的TBD范式都是以YOLO作为检测器,跟踪部分调用诸如deepsort的跟踪器进行目标跟踪.Yolo检测器首先将图像中需要检测的物体“框起来”,获取每个物体的位置信息(x1,y1,x2,y2,scorce,class),后面继续调用deepsort跟踪器进行跟踪代码的实现。
关于调用检测yolo和跟踪sort,需要一个的接口文件,以下是简单的代码调用和实现
import os
import randm
import cv2
from ultralytics import YOLO
from tracker import tracker
video_path = os.path.join('.','data','people.mp4')
cap = cv2.VideoCapture(video_path)
ret, frame = cap.read()
model = YOLO("yolov8n.pt")
# 这里面调用跟踪的接口(进行类的初始化)
tracker = Tracker()
colors = [(random.randint(0,255),random.randint(0,255),random.randint(0,255), for j in range(10))]
while ret:
# 将每一帧文件传输到模型中进行目标检测,获得检测的结果
results = model(frame)
# 迭代每一帧的结果(每一帧中,有多个不同的检测框)
for result in results:
detecions = []
for r in result.boxes.data.tolist():
x1,y1,x2,y2, score,class_id = r
x1 = int(x1)
y1 = int(y1)
x2 = int(x2)
y2 = int(y2)
class_id = int(class_id)
detections.append([x1,y1,x2,y2, score,class_id])
# 此处为跟踪最重要的函数update
# 每次更新检测的结果
tracker.update('frame',detections)
# 每一个轨迹都是一个物体
for track in tracker.tracks:
bbox = track.bbox
x1,y1,x2,y2 = bbox
# 每次跟踪得到的行人的id(唯一性)
track_id = track.track_id
cv2.rectangle(frame,(x1,y1),(x2,y2),(colors[track_id % len(colors)]), 3)
cv2.imshow('frame',frame)
cv2.waitKey(25)
ret, frame = cap.read()
cap.release()
cv2.destroyAllWindows()