[C++]使用yolov11的onnx模型结合opencv和bytetrack实现目标追踪

【官方框架地址】 

yolov11框架:https://github.com/ultralytics/ultralytics

bytetrack框架:https://github.com/ifzhang/ByteTrack

【算法介绍】

Yolov11与ByTetrack:目标追踪的强大组合

Yolov11和ByTetrack是两种在目标追踪领域具有显著影响力的技术。当它们结合使用时,可以显著提高目标追踪的准确性和实时性。

Yolov11是Yolov系列算法的最新版本,它在目标检测方面具有出色的性能。相较于之前的版本,Yolov11在精度和速度上都进行了优化,使其成为实时目标检测的理想选择。通过结合ByTetrack,Yolov11可以更有效地应用于目标追踪任务。

ByTetrack是一种基于轨迹匹配的目标追踪方法。它利用目标的运动信息和外观特征进行追踪,能够在复杂场景下实现稳定的目标追踪。ByTetrack的优势在于其强大的鲁棒性和适应性,即使在目标被遮挡或出现运动模糊的情况下,它仍能保持较高的追踪精度。

当Yolov11与ByTetrack结合使用时,Yolov5首先检测视频中的目标,并生成目标的初始位置和运动轨迹。然后,ByTetrack利用这些信息对目标进行精确追踪。这种结合方式既发挥了Yolov11的高检测精度,又利用了ByTetrack的高追踪精度,使得整体目标追踪效果显著提升。

综上所述,Yolov11与ByTetrack的结合为解决复杂场景下的目标追踪问题提供了新的解决方案。随着人工智能技术的不断进步,这种结合方式有望成为目标追踪领域的研究热点和发展趋势。通过进一步的研究和优化,我们可以期待这种组合在未来的目标追踪任务中发挥更大的潜力。

【效果展示】

【实现部分代码】

#include <iostream>
#include<opencv2/opencv.hpp>

#include<math.h>
#include "yolov11.h"
#include<time.h>
#include <math.h>
#include <time.h>
#include <vector>
#include <chrono>
#include <float.h>
#include <stdio.h>
#include "BYTETracker.h"

using namespace std;
using namespace cv;
using namespace dnn;



int main() {

	string detect_model_path = "./yolo11n.onnx";
	Yolov11 detector;
	detector.ReadModel(detect_model_path,"labels.txt",false);
	vector<Object> objects;
	cv::VideoCapture cap("D:\\car.mp4");
	int img_w = cap.get(CAP_PROP_FRAME_WIDTH);
	int img_h = cap.get(CAP_PROP_FRAME_HEIGHT);
	int fps = cap.get(CAP_PROP_FPS);
	long nFrame = static_cast<long>(cap.get(CAP_PROP_FRAME_COUNT));
	if (!cap.isOpened())
	{
		std::cout << "open capture failured!" << std::endl;
		return -1;
	}
	Mat frame;
	BYTETracker tracker(fps, 30);
	int num_frames = 0;
	int keyvalue = 0;
    int total_ms = 1;
	while (true)
	{
		cap.read(frame);
		if (frame.empty())
		{
			std::cout << "read to end" << std::endl;
			break;
		}
		num_frames++;
		auto start = chrono::system_clock::now();
		objects.clear();
		detector.Detect(frame, objects);
       vector<STrack> output_stracks = tracker.update(objects);
		auto end = chrono::system_clock::now();
		total_ms = total_ms + chrono::duration_cast<chrono::microseconds>(end - start).count();
		for (int i = 0; i < output_stracks.size(); i++)
		{
			vector<float> tlwh = output_stracks[i].tlwh;
			bool vertical = tlwh[2] / tlwh[3] > 1.6;
			if (tlwh[2] * tlwh[3] > 20 && !vertical)
			{
				Scalar s = tracker.get_color(output_stracks[i].track_id);
				putText(frame, format("%d", output_stracks[i].track_id), Point(tlwh[0], tlwh[1] - 5),
						0, 0.6, Scalar(0, 0, 255), 2, LINE_AA);
				rectangle(frame, Rect(tlwh[0], tlwh[1], tlwh[2], tlwh[3]), s, 2);
			}
		}
		putText(frame, format("frame: %d fps: %d num: %d", num_frames, num_frames * 1000000 / total_ms, (int)output_stracks.size()),
				Point(0, 30), 0, 0.6, Scalar(0, 0, 255), 2, LINE_AA);

		imshow("demo", frame);
		keyvalue = waitKey(1);
		if (keyvalue == 113 || keyvalue == 81)
		{
			break;
		}

	}
	cap.release();

}



 【视频演示】

C++使用yolov11的onnx模型结合opencv和bytetrack实现目标追踪_哔哩哔哩_bilibili【测试环境】 opencv==4.8.0onnxruntime==1.12.0vs2019cmake==3.24.3 更多实现细节和源码下载参考博文https://blog.csdn.net/FL1623863129/article/details/142689907, 视频播放量 6、弹幕量 0、点赞数 0、投硬币枚数 0、收藏人数 0、转发人数 0, 视频作者 未来自主研究中心, 作者简介 未来自主研究中心,相关视频:使用易语言调用opencv进行视频和摄像头每一帧处理,C# winform部署yolov11目标检测的onnx模型,基于C#实现winform版yolov8-onnx+bytetrack目标追踪的算法结果演示,使用C#调用libotrch-yolov5模型实现全网最快winform目标检测,使用python部署yolov10的onnx模型,用C#部署yolov8的tensorrt模型进行目标检测winform最快检测速度,易语言部署yolov8的onnx模型,C++使用纯opencv部署yolov9的onnx模型,VR游戏都在这里了 比魔趣资源还多的资源站来了,Cursor 用中文编程,让程序开发不再有门槛!全能AI编程利器,带你高效开发 ,Cursor教程 !威廉说icon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1zDxDewEDf/

【测试环境】
 opencv==4.8.0

onnxruntime==1.12.0

vs2019

cmake==3.24.3 

 【源码下载地址】

https://mbd.pub/o/bread/ZpyUmp9t

ONNX Runtime是一个开源的深度学习推理库,可用于在多个平台上运行深度学习模型。要使用ONNX Runtime C读取YoloV8 ONNX模型,需要执行以下步骤: 1. 安装ONNX Runtime C库:首先,您需要在您的项目中安装ONNX Runtime C库。您可以在ONNX Runtime的官方GitHub页面上找到相关文档和指南,以了解如何安装和配置ONNX Runtime C库。 2. 下载YoloV8 ONNX模型:您需要从合适的来源(例如Darknet官方网站)下载YoloV8的ONNX模型文件。 3. 加载ONNX模型使用ONNX Runtime C库中的函数,您可以加载已下载的YoloV8 ONNX模型。此过程将创建一个ONNX模型实例,该实例包含了模型的结构和权重。 4. 配置和运行模型使用ONNX Runtime C库中提供的功能,您可以配置模型的输入和输出参数。在此步骤中,您将定义输入张量(如图像)的形状和数据类型,并创建输出张量以存储模型的预测结果。 5. 输入数据:将待处理的图像数据加载到输入张量中。确保输入数据与模型所需的形状和数据类型相匹配。 6. 运行模型使用ONNX Runtime C库中的函数,您可以运行加载的YoloV8 ONNX模型,将输入张量传递给模型,并获得输出张量。 7. 处理输出结果:根据YoloV8模型的输出,您可以解析和处理返回的输出张量,以获得所需的对象检测结果。 通过遵循上述步骤,您可以使用ONNX Runtime C库读取YoloV8 ONNX模型,并进行对象检测。请记住,具体的实现细节可能会因您选择的开发环境和工具而有所不同,建议阅读ONNX Runtime C库的官方文档,以了解更多细节和示例代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

FL1623863129

你的打赏是我写文章最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值