yolov5 deepsort 车辆追踪轨迹
时间: 2025-05-09 21:15:08 AIGC 浏览: 29
### 基于YOLOv5和DeepSort实现车辆跟踪与运动轨迹绘制
为了实现基于YOLOv5和DeepSort的车辆跟踪以及运动轨迹绘制功能,可以通过以下方式构建完整的解决方案:
#### 1. **环境准备**
首先需要安装必要的依赖库,包括但不限于 `torch`, `opencv-python` 和 `numpy`。此外还需要下载预训练好的 YOLOv5 权重文件,并配置好 DeepSort 的模型权重。
```bash
pip install torch torchvision opencv-python numpy filterpy
```
#### 2. **加载YOLOv5模型**
使用官方提供的 YOLOv5 模型来执行目标检测任务。此部分负责识别视频中的所有车辆对象。
```python
import cv2
from ultralytics import YOLO
model = YOLO('yolov5s.pt') # 加载预训练模型
video_capture = cv2.VideoCapture("input_video.mp4") # 打开输入视频
```
上述代码片段展示了如何初始化 YOLOv5 检测器并设置视频捕获设备[^1]。
#### 3. **集成DeepSort进行目标跟踪**
DeepSort 是一种高效的多目标跟踪算法,它能够在复杂场景下保持稳定的 ID 跟踪效果。以下是其基本用法:
```python
from deep_sort_realtime.deepsort_tracker import DeepSort
tracker = DeepSort(max_age=30, n_init=3) # 初始化DeepSort实例
```
这里设置了两个重要参数:`max_age` 表示如果某个目标连续丢失多少帧之后会被移除;而 `n_init` 则定义新目标至少要被观察几次才能正式加入跟踪列表。
#### 4. **处理每一帧图像**
对于每帧图片,先调用 YOLOv5 进行目标检测得到边界框坐标及其置信度分数,再传递给 DeepSort 处理这些预测结果以获得最终带有序列号的目标集合。
```python
while True:
ret, frame = video_capture.read()
if not ret:
break
results = model(frame)[0].boxes.data.cpu().numpy() # 获取检测结果
detections = []
for res in results:
x1, y1, x2, y2, conf, cls_id = map(int, res[:6])
if cls_id == 2 or cls_id == 7: # 只保留汽车(2)或卡车(7)
detections.append(([x1, y1, x2-x1, y2-y1], conf, cls_id))
tracks = tracker.update_tracks(detections, frame=frame) # 更新跟踪状态
```
这段脚本实现了逐帧读取视频数据并对其中感兴趣类别的物体应用目标检测与跟踪逻辑。
#### 5. **绘制轨迹**
最后一步是在画面上标注每个已知目标的历史路径点以便直观展示它们各自的移动路线图。
```python
for track in tracks:
if not track.is_confirmed():
continue
bbox = track.to_tlbr().astype(int)
obj_id = track.track_id
center_x = int((bbox[0]+bbox[2])/2)
center_y = int((bbox[1]+bbox[3])/2)
cv2.rectangle(frame, (bbox[0], bbox[1]), (bbox[2], bbox[3]), (255, 255, 0), 2)
cv2.putText(frame, f'ID-{obj_id}', (center_x - 10, center_y - 10),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
trail_length = min(len(track.trail), 30)
for i in range(trail_length-1):
pt1 = tuple(map(int, track.trail[i]))
pt2 = tuple(map(int, track.trail[i+1]))
thickness = int((trail_length-i)/float(trail_length)*2)+1
cv2.line(frame, pt1, pt2, (0, 0, 255), thickness)
cv2.imshow("Tracking", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
```
以上代码完成了对确认后的每一个目标在其当前位置附近显示唯一编号的同时还连接起过去若干次记录下的中心点形成连贯可视化的行驶痕迹[^2]。
### 结论
综上所述,通过组合运用先进的深度学习框架YOLOv5来进行精准快速的对象定位再加上专门设计用来解决长时间序列关联难题的经典SORT变种——DeepSort就可以轻松达成既定目的即监控区域内机动交通工具动态变化情况并且清晰呈现出来供后续进一步分析研究之用。
阅读全文
相关推荐



















