YOLOv8 DeepSORT跟踪算法车
时间: 2025-03-05 11:42:25 浏览: 86
### 使用YOLOv8和DeepSORT实现车辆跟踪
为了实现在视频流中对车辆的有效跟踪,可以采用YOLOv8作为检测器来识别每一帧中的车辆位置,并利用DeepSORT算法为这些车辆分配唯一ID并持续跟踪其运动轨迹。
#### 1. 安装依赖库
首先需要安装必要的Python包:
```bash
pip install ultralytics opencv-python-headless numpy scipy filterpy scikit-learn lap
```
`ultralytics` 是官方支持YOLOv8的PyTorch模型库;其他软件包则是构建DeepSORT所必需的支持工具[^1]。
#### 2. 加载预训练模型
加载YOLOv8权重文件以及初始化DeepSORT实例化对象。这里假设已经下载好了相应的.pt格式权重组件。
```python
from ultralytics import YOLO
import torch
from deep_sort_realtime.deepsort_tracker import DeepSort
model = YOLO('yolov8n.pt') # 替换成自己的YOLOv8模型路径
tracker = DeepSort(max_age=30, nn_budget=None)
device = 'cuda' if torch.cuda.is_available() else 'cpu'
```
这段代码片段展示了如何通过Ultralytics框架快速加载YOLOv8网络结构及其参数配置,并创建了一个具有特定超参设置(如最大年龄max_age)的DeepSort追踪器实例[^3]。
#### 3. 处理图像序列
对于每一张输入图片或者来自摄像头直播的数据流切片,执行如下操作流程:
- 应用YOLOv8获取当前时刻所有可能存在的物体边界框;
- 将上述结果传递给DeepSORT模块完成身份确认与历史状态更新;
- 绘制最终带有标签编号的结果图返回显示或保存下来。
```python
def process_frame(frame):
results = model.predict([frame], conf=0.5)[0]
bboxes = []
scores = []
classes = []
for r in results.boxes.data.tolist():
x1, y1, x2, y2, score, cls_id = int(r[0]), int(r[1]), int(r[2]), int(r[3]), r[4], int(r[5])
if cls_id == 2: # 假设类别索引2对应于汽车
bbox = [x1, y1, x2-x1, y2-y1]
bboxes.append(bbox)
scores.append(score)
dets = tracker.update_tracks(bboxes, frame.shape[:2][::-1])
output_image = frame.copy()
for det in dets:
if not det.is_confirmed(): continue
track_id = det.track_id
ltrb = det.to_ltrb()
cv2.rectangle(output_image,
(int(ltrb[0]), int(ltrb[1])),
(int(ltrb[2]), int(ltrb[3])),
color=(255, 255, 255),
thickness=3)
cv2.putText(output_image,
f"ID:{track_id}",
org=(int(ltrb[0]), int(ltrb[1])-10),
fontFace=cv2.FONT_HERSHEY_SIMPLEX,
fontScale=.5,
color=(255, 255, 255),
thickness=2)
return output_image
```
该函数接收单张RGB色彩空间下的numpy数组形式的画面数据作为输入,经过一系列处理之后输出同样类型的可视化效果增强版画面,在其中可以看到被标记出来的各个正在行驶当中的机动车辆连同各自独一无二的身份编码信息[^2]。
#### 4. 测试验证
最后一步就是编写简单的循环逻辑读取本地存储好的测试集样本或者是开启实时采集模式连接至USB接口外接设备进行在线调试工作了。
```python
cap = cv2.VideoCapture(0) # 或者指定一个视频文件路径代替数字0
while True:
ret, frame = cap.read()
if not ret: break
result_img = process_frame(frame)
cv2.imshow("Vehicle Tracking", result_img)
key = cv2.waitKey(1)&0xFF
if key==ord('q'):break
cv2.destroyAllWindows()
cap.release()
```
以上即完成了整个基于YOLOv8加DeepSORT组合方案下针对移动目标——特别是机动车类别的高效稳定型多目标连续定位任务的整体架构设计思路介绍。
阅读全文
相关推荐




















