yolov8 deepsort行人跟踪
时间: 2025-01-20 13:59:57 浏览: 67
### 使用YOLOv8和DeepSort实现行人跟踪
#### 安装依赖库
为了使用YOLOv8和DeepSort进行行人跟踪,首先需要安装必要的Python包。可以按照以下命令来设置开发环境:
```bash
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
pip install ultralytics opencv-python-headless numpy scipy filterpy lap
```
#### 下载预训练模型
下载YOLOv8的预训练权重文件以及DeepSort所需的资源。通常这些可以在GitHub仓库或者其他公开的数据集中找到。
#### 初始化YOLOv8检测器
创建一个脚本来加载YOLOv8模型并对输入图像执行目标检测操作。
```python
from ultralytics import YOLO
def initialize_yolov8():
model = YOLO('path/to/yolov8n.pt') # 加载YOLOv8 nano模型
return model
```
#### 配置DeepSort参数
配置DeepSort的相关参数,比如最大消失时间、NN预算等,并初始化DeepSort实例。
```python
import deep_sort.nn_matching as nn_matching
from deep_sort.detection import Detection
from deep_sort.tracker import Tracker
def setup_deepsort(max_age=30, n_init=3, nn_budget=None):
metric = nn_matching.NearestNeighborDistanceMetric(
"cosine", max_cosine_distance=0.2, budget=nn_budget)
tracker = Tracker(metric, max_age=max_age, n_init=n_init)
return tracker
```
#### 实现跟踪逻辑
编写主循环,在每一帧上运行YOLOv8得到边界框预测结果,再利用DeepSort完成实际的目标跟踪过程。
```python
import cv2
def run_tracking(video_path='input_video.mp4', output_path='output_video.avi'):
cap = cv2.VideoCapture(video_path)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter(output_path, fourcc, 20.0, (int(cap.get(3)), int(cap.get(4))))
yolov8_model = initialize_yolov8()
deepsort_tracker = setup_deepsort()
while True:
ret, frame = cap.read()
if not ret:
break
results = yolov8_model(frame)[0].boxes.data.cpu().numpy()[:, :4]
detections = []
for bbox in results:
confidences = [1.] * len(results) # 假设所有检测都具有相同的高置信度
class_ids = [-1] * len(results) # 如果只需要处理特定类别,则应调整此处
detection = Detection(bbox=bbox.tolist(), confidence=confidences[i], feature=np.random.rand(128))
detections.append(detection)
deepsort_tracker.predict()
matches = deepsort_tracker.update(detections=detections)
for track_id, bbox in enumerate(matches):
x1, y1, x2, y2 = map(int, bbox[:4])
label = f'Track ID: {track_id}'
cv2.rectangle(frame, pt1=(x1,y1), pt2=(x2,y2), color=(0,255,0), thickness=2)
cv2.putText(img=frame,text=label,org=(x1,y1-10),
fontFace=cv2.FONT_HERSHEY_SIMPLEX,
fontScale=0.9,color=(0,255,0),thickness=2,lineType=cv2.LINE_AA)
out.write(frame)
cap.release()
out.release()
```
此段代码展示了如何结合YOLOv8与DeepSort来进行基本的人群行为分析任务,包括但不限于行人重识别、轨迹绘制等功能[^1]。
阅读全文
相关推荐

















