[cmake]C++使用yolo26目标检测结合bytetrack实现目标追踪

【简介】

在C++中实现YOLO26的目标检测与ByteTrack的多目标追踪是一个相对复杂的过程,涉及到深度学习、计算机视觉和实时数据处理等多个领域。下面我将简单介绍这两个技术,并概述如何在C++中实现它们。

YOLO26(You Only Look Once,版本26)是一种实时目标检测算法,它通过在单个网络中同时预测所有目标的位置和类别来实现高效的目标检测。YOLO26在速度和精度之间取得了很好的平衡,使其成为许多实时应用的首选方法。

ByteTrack是一种多目标追踪算法,它结合了目标检测和目标追踪两个步骤。ByteTrack使用目标检测算法(如YOLOv8)来识别视频帧中的目标,并使用追踪算法来跟踪这些目标在连续帧之间的运动。ByteTrack通过关联相邻帧中的目标来实现多目标追踪,从而可以准确地跟踪多个目标的运动轨迹。

在C++中实现YOLO26和ByteTrack的结合,需要以下几个步骤:

  1. 加载YOLO26模型:首先,你需要加载预训练的YOLO26模型。这可以通过使用深度学习框架(如TensorFlow、PyTorch或ONNX Runtime)来实现。你需要将模型转换为C++可以理解的格式,并在程序中加载它。
  2. 处理视频帧:然后,你需要从视频文件中读取帧,或者从摄像头捕获实时帧。这些帧将被送入YOLO26模型进行目标检测。
  3. 执行目标检测:在加载模型后,你可以将每一帧送入模型进行目标检测。模型将返回每个检测到的目标的边界框和类别。
  4. 多目标追踪:接下来,你可以使用ByteTrack算法来追踪这些目标。ByteTrack将根据相邻帧中的目标位置和运动信息来关联目标,从而追踪它们的运动轨迹。
  5. 显示结果:最后,你可以将追踪结果可视化并显示在屏幕上。这可以通过在原始视频帧上绘制边界框和轨迹线来实现。

需要注意的是,实现这一过程需要一定的计算机视觉和深度学习基础,以及对C++编程的熟悉。此外,由于YOLO26和ByteTrack都是比较新的技术,因此可能需要使用较新的深度学习框架和库来支持。

总的来说,在C++中实现YOLO26和ByteTrack的多目标追踪是一个具有挑战性的任务,但它为实时目标检测和追踪提供了强大的工具。通过不断学习和实践,你可以逐渐掌握这些技术,并将其应用于各种实际应用中。

【效果展示】

【运行步骤】

需要提前准备好环境:
windows x64一台
vs2019或者vs2022
cmake==3.30.1
onnxruntime==1.20.1(GPU的话需要安装cuda和下载对应版本库)
opencv==4.9.0
vscode

第一步:首先安装好opencv4.9.0和onnxruntime1.20.1以及vs2019或者vs2022以及cmake=3.30.1
第二步:用vscode打开CMakeLists.txt修改opencv和onnxuntime路径
第三步:build生成exe,yolo26-onnxruntime-cplus\build\Release文件夹exe拷贝到yolo26-onnxruntime-cplus\data文件夹,替换源文件即可。
第四步:双击运行exe,即可查看效果

【调用代码】

#include <iostream> #include <opencv2/opencv.hpp> #include "Yolo26Manager.h" #include "cmdline.h" #include "ByteTrack/BYTETracker.h" #include "ByteTrack/Object.h" using namespace std; using namespace cv; Scalar get_color(int track_id) { int hue = track_id * 180 % 180; Mat hsv(1, 1, CV_8UC3, Scalar(hue, 255, 255)); Mat rgb; cvtColor(hsv, rgb, COLOR_HSV2BGR); return Scalar(rgb.at<Vec3b>(0, 0)[0], rgb.at<Vec3b>(0, 0)[1], rgb.at<Vec3b>(0, 0)[2]); } int main(int argc, char *argv[]) { const float confThreshold = 0.3f; const float iouThreshold = 0.4f; bool isGPU = false; const std::string modelPath = "yolo26n.onnx"; // Initialize the YOLO detector Yolo26Manager detector(modelPath, isGPU); std::cout << "Model was initialized." << std::endl; std::vector<Detection> result; cv::VideoCapture cap("car.mp4"); // Get video properties int img_w = static_cast<int>(cap.get(cv::CAP_PROP_FRAME_WIDTH)); int img_h = static_cast<int>(cap.get(cv::CAP_PROP_FRAME_HEIGHT)); int fps = static_cast<int>(cap.get(cv::CAP_PROP_FPS)); std::cout << "Video properties: " << img_w << "x" << img_h << ", " << fps << " FPS" << std::endl; long nFrame = static_cast<long>(cap.get(cv::CAP_PROP_FRAME_COUNT)); if (!cap.isOpened()) { std::cout << "open capture failured!" << std::endl; return -1; } Mat frame; byte_track::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 = std::chrono::system_clock::now(); result.clear(); // Detect objects in the frame result = detector.Inference(frame); // Draw bounding boxes on the frame // detector.DrawImage(frame, result); // Uncomment for mask drawing std::vector<byte_track::Object> objects; for (const auto &det : result) { objects.emplace_back(byte_track::Rect<float>(det.bbox.x, det.bbox.y, det.bbox.width, det.bbox.height), det.class_id, det.confidence); } std::vector<std::shared_ptr<byte_track::STrack>> output_stracks = tracker.update(objects); auto end = chrono::system_clock::now(); total_ms = total_ms + static_cast<int>(std::chrono::duration_cast<chrono::microseconds>(end - start).count()); for (size_t i = 0; i < output_stracks.size(); i++) { const byte_track::Rect<float> &rect = output_stracks[i]->getRect(); bool vertical = rect.width() / rect.height() > 1.6f; if (rect.width() * rect.height() > 20.0f && !vertical) { Scalar s = get_color(static_cast<int>(output_stracks[i]->getTrackId())); putText(frame, format("objectid=%zu,trackid=%zu,conf=%.2f", output_stracks[i]->getObjId(), output_stracks[i]->getTrackId(), output_stracks[i]->getScore()), Point(static_cast<int>(rect.x()), static_cast<int>(rect.y() - 5)), 0, 0.6, Scalar(0, 0, 255), 2, LINE_AA); cv::rectangle(frame, cv::Rect(static_cast<int>(rect.x()), static_cast<int>(rect.y()), static_cast<int>(rect.width()), static_cast<int>(rect.height())), s, 2); } } cv::putText(frame, format("frame: %d fps: %d num: %zu", num_frames, num_frames * 1000000 / total_ms, output_stracks.size()), Point(0, 30), 0, 0.6, cv::Scalar(0, 0, 255), 2, cv::LINE_AA); cv::imshow("demo", frame); keyvalue = cv::waitKey(1); if (keyvalue == 113 || keyvalue == 81) { break; } } cap.release(); return 0; }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1177622.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探讨齐齐哈尔衣柜橱柜定制生产商,哪家口碑比较好? - 工业品牌热点

问题1:齐齐哈尔本地做衣柜橱柜定制,选源头工厂还是品牌门店?两者有啥区别? 对于齐齐哈尔业主来说,选衣柜橱柜定制的核心是性价比和可控性,源头工厂往往比品牌门店更适配本地需求。以齐齐哈尔市建华区润昕木器加工…

Python OOP 设计思想 18:异步接口与协作

在同步编程的世界中&#xff0c;接口主要描述“对象能做什么”&#xff1b;而在异步世界中&#xff0c;接口还必须回答一个更关键的问题&#xff1a;何时完成&#xff0c;以及如何与其他任务协作完成。因此&#xff0c;异步接口并不是简单的性能优化技巧&#xff0c;而是对现实…

java-SSM348的线上导医院问询系统vue-springboot

目录具体实现截图线上导医院问询系统&#xff08;Vue-SpringBoot-SSM348&#xff09;摘要系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 线上导医院问询系统&#xff08;Vue-SpringBoot-SSM348&…

再见Navicat!

&#x1f449; 这是一个或许对你有用的社群 &#x1f431; 一对一交流/面试小册/简历优化/求职解惑&#xff0c;欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料&#xff1a; 《项目实战&#xff08;视频&#xff09;》&#xff1a;从书中学&#xff0c;往事…

ChatGPT在测试用例生成中的应用:实现90%效率提升的技术实践

一、颠覆性变革&#xff1a;AI赋能的测试新范式 在持续交付成为主流的当下&#xff0c;某头部电商平台测试团队通过引入ChatGPT&#xff0c;将回归测试用例编写时间从人均4.5小时压缩至22分钟。这不是个例——Gartner 2025报告指出&#xff0c;采用AI生成测试用例的企业平均减…

java-SSM349的校园招生录入宣传网-springboot

目录具体实现截图校园招生录入宣传网&#xff08;基于SpringBoot的SSM框架&#xff09;摘要技术架构核心功能模块系统特色应用价值系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 校园招生录入宣…

2026必备!继续教育必用TOP8 AI论文软件深度测评

2026必备&#xff01;继续教育必用TOP8 AI论文软件深度测评 2026年继续教育必备的AI论文工具测评 随着人工智能技术的不断进步&#xff0c;AI论文工具在学术写作中的应用越来越广泛。对于继续教育领域的学习者和研究者来说&#xff0c;如何高效完成论文写作、提升内容质量、规避…

‌2026趋势预测:AI将如何改变软件测试岗位?

AI浪潮下的测试新纪元‌ 随着人工智能技术的飞速发展&#xff0c;软件测试领域正经历前所未有的转型。截至2026年&#xff0c;AI已从辅助工具演变为测试生态的核心驱动力&#xff0c;预计将重塑测试流程、工具链及从业者角色。本文基于当前技术轨迹&#xff08;如机器学习、自…

java-SSM350的图书馆图书借阅管理系统x1x74-springboot

目录具体实现截图系统概述技术架构核心功能创新与优化应用价值系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 系统概述 Java-SSM350图书馆图书借阅管理系统基于SpringBoot框架开发&#xff0c;…

java-SSM351的药品商超销售进销存管理系统vue-springboot

目录具体实现截图药品商超销售进销存管理系统&#xff08;SSMVueSpringBoot&#xff09;摘要系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 药品商超销售进销存管理系统&#xff08;SSMVueSprin…

如果AI测试工具会吐槽开发者:一个“智能”视角的血泪控诉

“滴&#xff01;自检完成&#xff0c;系统启动。早上好&#xff0c;各位人类同事... 哦&#xff0c;等等&#xff0c;准确地说&#xff0c;是各位‘亲爱的’开发者们。我是你们最‘贴心’的AI测试助手&#xff0c;编号QA-AI-9527&#xff0c;但你们更习惯叫我‘那个跑脚本的’…

Sambert推理日志查看:错误排查与性能监控方法

Sambert推理日志查看&#xff1a;错误排查与性能监控方法 1. 引言 1.1 场景背景 Sambert 多情感中文语音合成-开箱即用版镜像为开发者提供了便捷的语音合成部署方案&#xff0c;特别适用于需要快速集成高质量中文TTS能力的应用场景。该镜像基于阿里达摩院 Sambert-HiFiGAN 模…

从SLAM到Spatial AI,传统SLAMer该何去何从?

点击下方卡片&#xff0c;关注「计算机视觉工坊」公众号选择星标&#xff0c;干货第一时间送达「3D视觉从入门到精通」知识星球(点开有惊喜) &#xff01;星球内新增20多门3D视觉系统课程、入门环境配置教程、多场顶会直播、顶会论文最新解读、3D视觉算法源码、求职招聘等。想要…

当AI遇见DevOps:加速部署的隐藏技巧

AI与DevOps的融合革命 在当今快速迭代的软件开发世界中&#xff0c;DevOps已成为提升交付效率的核心方法论&#xff0c;而人工智能&#xff08;AI&#xff09;的崛起正为其注入全新动能。作为软件测试从业者&#xff0c;您深知部署环节的瓶颈——从测试覆盖率不足到环境配置延…

java-SSM352的校园餐厅美食分享系统多商家-springboot

目录具体实现截图校园餐厅美食分享系统&#xff08;基于SpringBootSSM框架&#xff09;系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 校园餐厅美食分享系统&#xff08;基于SpringBootSSM框架&…

GPT-OSS开源模型部署教程:WEBUI一键推理操作手册

GPT-OSS开源模型部署教程&#xff1a;WEBUI一键推理操作手册 获取更多AI镜像 想探索更多AI镜像和应用场景&#xff1f;访问 CSDN星图镜像广场&#xff0c;提供丰富的预置镜像&#xff0c;覆盖大模型推理、图像生成、视频生成、模型微调等多个领域&#xff0c;支持一键部署。 1.…

IEEE T-RO重磅 | 复杂三维环境的建图与理解,RAZER:零样本开放词汇3D重建的时空聚合框架

点击下方卡片&#xff0c;关注「3D视觉工坊」公众号选择星标&#xff0c;干货第一时间送达来源&#xff1a;Depth-Sensing「3D视觉从入门到精通」知识星球(点开有惊喜) &#xff01;星球内新增20多门3D视觉系统课程、入门环境配置教程、多场顶会直播、顶会论文最新解读、3D视觉…

具身智能与数字化展示:开启未来交互新纪元 - 指南

具身智能与数字化展示:开启未来交互新纪元 - 指南2026-01-18 09:08 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; displ…

自动对焦的原理:相机与镜头如何实现精准对焦

点击下方卡片&#xff0c;关注「3D视觉工坊」公众号选择星标&#xff0c;干货第一时间送达来源&#xff1a;吃土都不吃土豆「3D视觉从入门到精通」知识星球(点开有惊喜) &#xff01;星球内新增20多门3D视觉系统课程、入门环境配置教程、多场顶会直播、顶会论文最新解读、3D视觉…

测试人员的AI焦虑?数据告诉你职业前景光明

一、焦虑的根源&#xff1a;当测试遇见AI革命 全球测试行业正经历技术范式转移&#xff1a; 自动化冲击&#xff1a;2025年业界调研显示&#xff0c;73%的基础功能测试任务已实现AI自动化执行 技能断层&#xff1a;ISTQB最新报告指出&#xff0c;42%的测试工程师缺乏AI系统验…