ubuntu yolov5 deepsort多目标追踪
时间: 2025-05-22 08:53:12 浏览: 25
### 安装依赖库
为了在Ubuntu上使用YOLOv5和DeepSort实现多目标跟踪,需安装必要的Python包和其他依赖项。建议创建虚拟环境来管理项目所需的软件包。
```bash
sudo apt-get update && sudo apt-get install -y python3-pip ffmpeg libsm6 libxext6 protobuf-compiler
pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cpu
pip3 install opencv-python-headless numpy matplotlib cython filterpy scipy lap
```
### 获取源码并配置模型
下载官方仓库中的YOLOv5和DeepSort代码,并按照说明编译所需组件[^1]。
```bash
git clone https://github.com/ultralytics/yolov5.git
cd yolov5
pip3 install -r requirements.txt
cd ..
git clone https://github.com/nwojke/deep_sort_pytorch.git
cd deep_sort_pytorch
pip3 install -r requirements.txt
```
### 准备权重文件
获取预训练好的检测器(YOLOv5)以及特征提取网络(DNN用于Re-ID)。可以从相应项目的发布页面找到这些资源链接。
对于YOLOv5:
```bash
wget https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5s.pt
```
对于DeepSORT:
```bash
mkdir checkpoints
cd checkpoints/
gdown "https://drive.google.com/uc?id=1pdLWfFhIzUoVw8pHnJcYCybPQXZqOaK-" -O osnet_x0_25_msmt17.pth
```
### 修改配置参数
编辑`deep_sort_pytorch/configs/deep_sort.yaml`设置合适的阈值以及其他超参以适应具体应用场景需求。
```yaml
MIN_CONFIDENCE: 0.4 # 物体置信度下限
MAX_COSINE_DISTANCE: 0.5 # Re-ID相似性距离上限
NN_BUDGET: 100 # 跟踪队列长度限制
```
### 运行测试视频或多摄像头实时流处理
通过命令行调用脚本执行对象追踪任务,支持本地视频文件输入或RTSP直播源连接。
```python
from pathlib import Path
import cv2
from yolov5.models.experimental import attempt_load
from yolov5.utils.general import non_max_suppression, scale_coords
from deep_sort_pytorch.deep_sort import DeepSort
def main():
weights_path = 'path/to/yolov5s.pt'
source_video = 'test.mp4' # 或者 RTSP URL
model = attempt_load(weights_path, map_location='cpu')
deepsort_tracker = DeepSort('osnet_x0_25', max_dist=0.2)
cap = cv2.VideoCapture(source_video)
while True:
ret, frame = cap.read()
if not ret:
break
results = detect_objects(model, frame)
outputs = deepsort_tracker.update(results, frame.shape[:2])
draw_tracks(frame, outputs)
if __name__ == '__main__':
main()
```
阅读全文
相关推荐

















