[深度学习]基于C++和onnxruntime部署yolov12的onnx模型

news/2025/2/27 10:10:10

基于C++和ONNX Runtime部署YOLOv12的ONNX模型,可以遵循以下步骤:

  1. 准备环境:首先,确保已经下载后指定版本opencv和onnruntime的C++库。

  2. 模型转换: 安装好yolov12环境并将YOLOv12模型转换为ONNX格式。这通常涉及使用深度学习框架(如PyTorch或TensorFlow)加载原始模型,并导出为ONNX格式。转换指令

# End-to-End ONNX
yolo export model=yolov12{n/s/m/b/l/x}.pt format=onnx opset=13 simplify
  1. C++环境配置:在CMakeLists.txt项目中正确引用了opencv和ONNX Runtime的头文件,并链接到相应的库。这允许在C++代码中使用ONNX Runtime的功能。

  2. 加载模型:使用ONNX Runtime的API加载转换后的YOLOv12 ONNX模型。

  3. 执行推理:通过ONNX Runtime的推理引擎,将图像数据输入到模型中,并执行目标检测任务。

  4. 处理结果:解析模型输出的结果,这通常涉及将输出的张量数据转换为可理解的检测结果,如边界框坐标和类别标签。

通过这些步骤,可以在C++环境中利用ONNX Runtime高效地部署YOLOv12模型,实现实时的目标检测功能。

【测试环境】

windows10 x64
vs2019
cmake==3.30.1
onnxruntime==1.16.3
opencv==4.9.0
【使用步骤】
首先cmake生成exe文件,然后将onnxruntime.dll和onnxruntime_providers_shared.dll放到exe一起,不然会提示报错0xc000007b,这是因为系统目录也有个onnxruntime.dll引发冲突,并把car.mp4也放到exe一起。运行直接输入
yolov12.exe 注意onnx路径要是你真实路径我的onnx路径是我桌面上地址

【代码调用】

注意onnxruntime使用的cpu版本库,如需使用GPU还需要修改代码才行

#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgcodecs.hpp>
#include <iostream>
#include <string>
#include "YOLO12.hpp"

int main() {
    // Paths to the model, labels, test image, and save directory
    const std::string labelsPath = "../models/coco.names";
    const std::string imagePath = "../data/dog.jpg";           // Image path
    const std::string savePath = "../data/dog_detections.jpg";   // Save directory

    // Model path for YOLOv12
    const std::string modelPath = "../models/yolov12n.onnx";   // YOLOv12

    // Initialize the YOLO detector with the chosen model and labels
    bool isGPU = true; // Set to false for CPU processing
    YOLO12Detector detector(modelPath, labelsPath, isGPU);

    // Load an image
    cv::Mat image = cv::imread(imagePath);
    if (image.empty()) {
        std::cerr << "Error: Could not open or find the image!\n";
        return -1;
    }

    // Detect objects in the image and measure execution time
    auto start = std::chrono::high_resolution_clock::now();
    std::vector<Detection> results = detector.detect(image);
    auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(
                        std::chrono::high_resolution_clock::now() - start);

    std::cout << "Detection completed in: " << duration.count() << " ms" << std::endl;

    // Draw bounding boxes on the image
    detector.drawBoundingBox(image, results); // Simple bounding box drawing
    // detector.drawBoundingBoxMask(image, results); // Uncomment for mask drawing

    // Save the processed image to the specified directory
    if (cv::imwrite(savePath, image)) {
        std::cout << "Processed image saved successfully at: " << savePath << std::endl;
    } else {
        std::cerr << "Error: Could not save the processed image to: " << savePath << std::endl;
    }

    // Display the image
    cv::imshow("Detections", image);
    cv::waitKey(0); // Wait for a key press to close the window

    return 0;
}

部署演示可以参考视频:bilibili.com/video/BV1iYPsewEDg


http://www.niftyadmin.cn/n/5869929.html

相关文章

在zotero里部署papaerschat插件,以接入现有大模型

papaerschat插件里集成了openAI的GPT3.5、gpt-4o、gpt-mini大模型以及Claude3、Gemini、Deepseek等大模型。通过接入这些大模型可以辅助我们阅读论文。以部署方式如下&#xff1a; 1.下载zotero的插件市场&#xff0c;用以管理zotero里的插件。下载地址&#xff1a; https://…

子组件如何通过v-model实现数据的双向绑定

在 Vue 中&#xff0c;v-model 是一种语法糖&#xff0c;用于在表单元素或者组件上实现双向数据绑定。 下面分别介绍在 Vue 2 和 Vue 3 里子组件使用 v-model 实现数据双向绑定的具体方式。 Vue 2 中使用 v-model 实现双向绑定 在 Vue 2 里&#xff0c;v-model 本质上是 :va…

2025最新Flask学习笔记(对照Django做解析)

前言&#xff1a;如果还没学Django的同学&#xff0c;可以看Django 教程 | 菜鸟教程&#xff0c;也可以忽略下文所提及的Django内容&#xff1b;另外&#xff0c;由于我们接手的项目大多都是前后端分离的项目&#xff0c;所以本文会跳过对模板的介绍&#xff0c;感兴趣的朋友可…

《论企业集成平台的理解与应用》审题技巧 - 系统架构设计师

企业集成平台的理解与应用——论文写作框架 一、考点概述 本论题“企业集成平台的理解与应用”主要考察的是计算机软件测试工程师对于企业集成平台&#xff08;EIP&#xff09;的深入理解以及在实际项目中的应用能力。论题涵盖了以下几个核心内容&#xff1a; 首先&#xff…

【QT 一 | 信号和槽】

Qt5基本模块 Qt Creator 中的快捷键 • 注释&#xff1a;ctrl / • 运⾏&#xff1a;ctrl R • 编译&#xff1a;ctrl B • 字体缩放&#xff1a;ctrl 鼠标滑轮 • 查找&#xff1a;ctrl F • 整行移动&#xff1a;ctrl shift ⬆/⬇ • 帮助⽂档&#xff1a;F1 • 自动…

软件工程应试复习(考试折磨版)

针对学校软件工程考试&#xff0c;参考教材《软件工程导论&#xff08;第6版&#xff09;》1-8章 学习的艺术&#xff1a;不断地尝试&#xff0c;我一定会找到高效用的方法&#xff0c;让学习变成一门艺术&#xff0c;从应试备考中解救出我的时间同胞们。 好嘞&#xff01;既然…

数据探索实验

数据探索 1.分析1996~2015年人口总数趋势 ### 1&#xff09;训练要点 &#xff08;1&#xff09;掌握NumPy读取数据的方法 &#xff08;2&#xff09;掌握pyplot基础语法 &#xff08;3&#xff09;掌握散点图绘制方法 ### 2&#xff09;需求说明 人口数据总共有6个特征…

《机器学习数学基础》补充资料:从几何角度理解矩阵

《机器学习数学基础》第 2 章&#xff0c;专门讲解矩阵&#xff0c;因为它在线性代数中占据重要地位&#xff0c;也就是在机器学习中&#xff0c;占据重要定位了。为了更好地理解矩阵&#xff0c;本文从几何角度&#xff0c;更直观地对矩阵的某些性质和特征给予阐述。 注&…