赞
踩
YOLOv8自带的追踪算法使用的是BoT-SORT和ByteTrack,默认是BoT-SORT算法,总体效果感觉不如deepsort。
下面是官方提供的运行代码
from collections import defaultdict import cv2 import numpy as np from ultralytics import YOLO # 加载YOLOv8模型 model = YOLO('yolov8s.pt')#这里填写你使用的检测模型 # 打开视频文件 video_path = "xxx"#是这里填写你要使用的视频地址 cap = cv2.VideoCapture(video_path) # 存储追踪历史 track_history = defaultdict(lambda: []) # 循环遍历视频帧 while cap.isOpened(): # 从视频读取一帧 success, frame = cap.read() if success: # 在帧上运行YOLOv8追踪,持续追踪帧间的物体 results = model.track(frame, persist=True,device = 0) # 获取框和追踪ID boxes = results[0].boxes.xywh.cpu() track_ids = results[0].boxes.id.int().cpu().tolist() # 在帧上展示结果 annotated_frame = results[0].plot() # 绘制追踪路径 for box, track_id in zip(boxes, track_ids): x, y, w, h = box track = track_history[track_id] track.append((float(x), float(y))) # x, y中心点 if len(track) > 30: # 在90帧中保留90个追踪点 track.pop(0) # 绘制追踪线 points = np.hstack(track).astype(np.int32).reshape((-1, 1, 2)) cv2.polylines(annotated_frame, [points], isClosed=False, color=(230, 230, 230), thickness=10) # 展示带注释的帧 cv2.imshow("YOLOv8 Tracking", annotated_frame) # 如果按下'q'则退出循环 if cv2.waitKey(1) & 0xFF == ord("q"): break else: # 如果视频结束则退出循环 print('如果视频结束则退出循环') break # 释放视频捕获对象并关闭显示窗口 cap.release() cv2.destroyAllWindows()
在安装好torch和yolov8的虚拟环境中运行即可,就会弹窗展示视频,效果并不是很好,有点卡而且检测框经常会断
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。