YOLOv8+DeepSORT多目标车辆跟踪(车辆检测+跟踪+车辆计数)(内附免费资源+部署讲解)

目录

一、前言

二、开发环境(前提条件)

三、环境搭建教程

3.1、创建虚拟环境

3.2、选择虚拟环境并安装所需要的包

3.3、运行代码步骤

3.3.1、克隆 git 储存库

3.3.2、转到克隆库的文件夹下

3.3.3、安装依赖项

3.3.4、转到检测目录下

3.3.5、用于yolov8物体检测+跟踪+车辆计数

四、效果图


一、前言

欢迎阅读本篇博客!今天我们深入探索YOLOv8+deepsort视觉跟踪算法。结合YOLOv8的目标检测和deepsort的特征跟踪,该算法在复杂环境下确保了目标的准确与稳定跟踪。在计算机视觉中,这种跟踪技术在安全监控、无人驾驶等领域有着广泛应用。本文重点探讨基于此算法的车辆检测、跟踪及计数。演示效果如下:

二、开发环境(前提条件)

1、Anaconda3 环境

2、pycharm 代码编辑器

3、虚拟环境 python 3.8

(安装教程:Anaconda3+pycharm安装教程)(强烈推荐

(代码安装资源:YOLOv8-Deepsort 免费源码)(强烈推荐

因为看到很多开源的资源都是要么付费,要么需要vip才能下载,实在看不下去了!!!所以我决定代码直接免费,这么良心的博主不给个点赞+关注+收藏嘛 (๑′ᴗ‵๑)

三、环境搭建教程

3.1、创建虚拟环境

首先打开anaconda prompt,输入conda env list查看环境列表,如果没有安装虚拟环境,会显示只有一个base。

然后输入指令:

conda create -n YOLOv8-Deepsort python=3.8

接着输入y,等待安装完毕,即可创建好虚拟环境。

(注意:YOLOv8-Deepsort 是我自己命名的环境名称,可随意命名。)

等待安装好后再次输入:

conda env list

查看环境列表,此时环境中就会多出自己创建的虚拟环境了。

3.2、选择虚拟环境并安装所需要的包

输入 conda activate YOLOv8-Deepsort 进入你的虚拟环境

conda activate YOLOv8-Deepsort

如果前面的括号里由原来的base变成了你的虚拟环境名称,那么恭喜你,环境选择成功了哟! 

3.3、运行代码步骤

3.3.1、克隆 git 储存库

git clone https://github.com/MuhammadMoinFaisal/YOLOv8-DeepSORT-Object-Tracking.git

也可以点击这个资源免费下载:YOLOv8-Deepsort 免费源码(强烈推荐)

3.3.2、转到克隆库的文件夹下

cd YOLOv8-DeepSORT-Object-Tracking

3.3.3、安装依赖项

pip install -e ".[dev]"

3.3.4、转到检测目录下

cd ultralytics/yolo/v8/detect

3.3.5、用于yolov8物体检测+跟踪+车辆计数

python predict.py model=yolov8l.pt source="test3.mp4" show=True

四、效果图

运行完以上那些命令就可以像视频那样的效果啦(~ ̄▽ ̄)~

五、可能出现的Error(如果出现报错请看这个)

AttributeError: module 'numpy' has no attribute 'float'

Set the environment variable HYDRA_FULL_ERROR=1 for a complete stack trace.

出现以上的报错呢,可以这样改,我使用的numpy版本是1.24,但是从代码中所用的代码是依赖于旧版本的Numpy。您可以将你的Numpy版本降级到1.23.5。

pip install numpy==1.23.5

然后再运行上面那个用于yolov8物体检测+跟踪+车辆计数的运行命令即可。

YOLOv8DeepSORT多目标追踪中常用的两种技术,结合使用可以实现高效的多目标追踪。以下是对YOLOv8DeepSORT的介绍以及如何在C++中实现多目标追踪的简要说明。 ### YOLOv8 YOLOv8(You Only Look Once version 8)是一种实时的目标检测算法,具有高精度和高速度的特点。它通过卷积神经网络(CNN)来检测图像中的目标,并返回目标的边界框和类别信息。 ### DeepSORT DeepSORT是一种多目标追踪算法,基于SORT(Simple Online and Realtime Tracking)算法进行改进。DeepSORT通过结合目标的外观信息和运动信息来实现更稳定的多目标追踪。它使用深度学习模型来提取目标的特征向量,并通过这些特征向量来进行目标匹配和身份保持。 ### C++实现 在C++中实现YOLOv8DeepSORT多目标追踪需要以下几个步骤: 1. **环境配置**: - 安装C++编译器(如g++或clang++)。 - 安装OpenCV库,用于图像处理和视频读取。 - 安装深度学习框架(如TensorFlow C++ API或PyTorch C++ API),用于加载和使用YOLOv8DeepSORT模型。 2. **加载YOLOv8模型**: - 使用深度学习框架加载预训练的YOLOv8模型。 - 对输入图像进行预处理(如缩放、归一化等)。 - 通过模型进行前向传播,得到目标检测结果。 3. **实现DeepSORT**: - 使用深度学习框架加载预训练的DeepSORT特征提取模型。 - 提取目标的外观特征向量。 - 实现卡尔曼滤波器(Kalman Filter)进行目标运动预测。 - 实现匈牙利算法(Hungarian Algorithm)进行目标匹配。 4. **多目标追踪流程**: - 读取视频帧。 - 对每一帧进行目标检测。 - 提取每个目标的外观特征。 - 更新卡尔曼滤波器。 - 进行目标匹配和身份保持。 - 绘制追踪结果。 ### 示例代码 以下是一个简单的示例代码,展示了如何在C++中结合使用YOLOv8DeepSORT进行多目标追踪: ```cpp #include <opencv2/opencv.hpp> #include <tensorflow/c/c_api.h> #include <vector> // 加载YOLOv8模型并进行目标检测 std::vector<Object> DetectWithYOLOv8(TF_Session* session, const cv::Mat& frame); // 加载DeepSORT模型并提取特征 std::vector<float> ExtractFeatureWithDeepSORT(TF_Session* session, const cv::Mat& frame, const cv::Rect& bbox); // 多目标追踪类 class MultiObjectTracker { public: MultiObjectTracker(); void Update(const std::vector<Object>& detections, const cv::Mat& frame); void Draw(cv::Mat& frame); private: // 实现卡尔曼滤波器和匈牙利算法 // ... }; int main() { // 初始化TensorFlow会话 TF_Session* yolov8_session = LoadYOLOv8Model(); TF_Session* deepsort_session = LoadDeepSORTModel(); cv::VideoCapture cap("input_video.mp4"); if (!cap.isOpened()) { std::cerr << "Error opening video file" << std::endl; return -1; } MultiObjectTracker tracker; cv::Mat frame; while (cap.read(frame)) { std::vector<Object> detections = DetectWithYOLOv8(yolov8_session, frame); tracker.Update(detections, frame); tracker.Draw(frame); cv::imshow("Multi-Object Tracking", frame); if (cv::waitKey(1) == 27) break; // 按下ESC键退出 } // 释放资源 TF_DeleteSession(yolov8_session, nullptr); TF_DeleteSession(deepsort_session, nullptr); return 0; } ``` ###
评论 141
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李同学Lino

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值