当前位置: 首页 > news >正文

[C++]使用纯opencv部署yolov12目标检测onnx模型

yolov12官方框架:sunsmarterjie/yolov12

【算法介绍】

在C++中使用纯OpenCV部署YOLOv12进行目标检测是一项具有挑战性的任务,因为YOLOv12通常是用PyTorch等深度学习框架实现的,而OpenCV本身并不直接支持加载和运行PyTorch模型。然而,你可以通过一些间接的方法来实现这一目标,比如将PyTorch模型转换为ONNX格式,然后使用OpenCV的DNN模块加载ONNX模型。

以下是一个大致的步骤指南,用于在C++中使用OpenCV部署YOLOv12(假设你已经有了YOLOv12的ONNX模型):

  1. 安装依赖
    • 确保你的开发环境已经安装了OpenCV 4.8(带有DNN模块)和必要的C++编译器。
  2. 准备模型
    • 将YOLOv12模型从PyTorch转换为ONNX格式。这通常涉及使用PyTorch的torch.onnx.export函数。
    • 确保你有YOLOv12的ONNX模型文件、配置文件(描述模型架构)和类别名称文件。
  3. 编写C++代码
    • 使用OpenCV的DNN模块加载ONNX模型。
    • 预处理输入图像(如调整大小、归一化等),以符合模型的输入要求。
    • 将预处理后的图像输入到模型中,并获取检测结果。
    • 对检测结果进行后处理,包括解析输出、应用非极大值抑制(NMS)和绘制边界框。
  4. 编译和运行
    • 使用C++编译器(如g++)编译你的代码。
    • 运行编译后的程序,输入图像或视频,并观察目标检测结果。

需要注意的是,由于YOLOv12是一个复杂的模型,其输出可能包含多个层的信息(如特征图、置信度、边界框坐标等),因此你需要仔细解析模型输出,并根据YOLOv12的具体实现进行后处理。

此外,由于OpenCV的DNN模块对ONNX的支持可能有限,某些YOLOv12的特性(如自定义层、特定的激活函数等)可能无法在OpenCV中直接实现。在这种情况下,你可能需要寻找替代方案,如使用其他深度学习库(如TensorRT、ONNX Runtime等)来加载和运行模型,并通过C++接口与这些库进行交互。

总之,在C++中使用纯OpenCV部署YOLOv12是一项具有挑战性的任务,需要深入理解YOLOv12的模型架构、OpenCV的DNN模块以及ONNX格式。如果你不熟悉这些领域,可能需要花费更多的时间和精力来学习和解决问题。

【效果展示】

 

【测试环境】

vs2019
cmake==3.30.0
opencv==4.8.0

【调用代码】

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

#include<math.h>
#include "yolov12.h"
#include<time.h>
#define  VIDEO_OPENCV //if define, use opencv for video.

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

template<typename _Tp>
int yolov12(_Tp& cls,Mat& img,string& model_path)
{

	Net net;
	if (cls.ReadModel(net, model_path, false)) {
		cout << "read net ok!" << endl;
	}
	else {
		return -1;
	}
	//生成随机颜色
	vector<Scalar> color;
	srand(time(0));
	for (int i = 0; i < 80; i++) {
		int b = rand() % 256;
		int g = rand() % 256;
		int r = rand() % 256;
		color.push_back(Scalar(b, g, r));
	}
	vector<OutputSeg> result;


	if (cls.Detect(img, net, result)) {
		DrawPred(img, result, cls._className, color);
	}
	else {
		cout << "Detect Failed!" << endl;
	}
	system("pause");
	return 0;
}




template<typename _Tp>
int video_demo(_Tp& cls, string& model_path)
{
	vector<Scalar> color;
	srand(time(0));
	for (int i = 0; i < 80; i++) {
		int b = rand() % 256;
		int g = rand() % 256;
		int r = rand() % 256;
		color.push_back(Scalar(b, g, r));
	}
	vector<DetecionResult> result;
	cv::VideoCapture cap("car.mp4");
	if (!cap.isOpened())
	{
		std::cout << "open capture failured!" << std::endl;
		return -1;
	}
	Mat frame;
#ifdef VIDEO_OPENCV
	Net net;
	if (cls.ReadModel(net, model_path, true)) {
		cout << "read net ok!" << endl;
	}
	else {
		cout << "read net failured!" << endl;
		return -1;
	}

#else
	if (cls.ReadModel(model_path, true)) {
		cout << "read net ok!" << endl;
	}
	else {
		cout << "read net failured!" << endl;
		return -1;
	}

#endif

	while (true)
	{

		cap.read(frame);
		if (frame.empty())
		{
			std::cout << "read to end" << std::endl;
			break;
		}
		result.clear();
#ifdef VIDEO_OPENCV

		if (cls.Detect(frame, net, result)) {
			DrawPred(frame, result, cls._className, color, true);
		}
#else
		if (cls.OnnxDetect(frame, result)) {
			DrawPred(frame, result, cls._className, color, true);
		}
#endif
		int k = waitKey(10);
		if (k == 27) { //esc 
			break;
		}

	}
	cap.release();

	system("pause");

	return 0;
}


int main() {

	string detect_model_path = "./yolov12n.onnx";
	Yolov12 detector;
	video_demo(detector, detect_model_path);
}



视频演示:

使用纯opencv部署yolov12目标检测onnx模型演示源码+模型_哔哩哔哩_bilibili

相关文章:

  • 开启开源新时代:DeepSeek引领人工智能技术开放化
  • YOLOv8与BiFormer注意力机制的融合:提升多场景目标检测性能的研究
  • Visual studio 2022 将打开文件的方式由单击改为双击
  • Java 数学函数库
  • 【电机控制器】ESP32-C3语言模型——豆包
  • k8s容器运行时环境选型指南
  • Hutool - DFA:基于 DFA 模型的多关键字查找
  • Eclipse 透视图 (Perspective)
  • 北斗模块的“低功耗“秘诀:如何在物联网设备中延长续航?
  • linux驱动编程(一)
  • 【JavaWeb学习Day17】
  • 深度解析:网站快速收录与服务器性能的关系
  • 【datax系列】datax-web容器化部署搭建(①)
  • 【20250221更新】WebStorm2024.3.3版本安装+使用方法
  • windwos与linux环境下Iperf3带宽测试工具的安装、使用
  • 【前端开发者如何有效利用 deepSeek 为自己服务】
  • 关于Transparent native-to-ascii conversion
  • 算法很美笔记(Java)——动态规划
  • 重启——二分
  • Windows 下免费开源的多格式文件差异对比工具
  • 时隔5个月,辽沈银行行长再调整
  • 上海地铁:一孩童鞋子卡于电梯梯级处,其间未造成人员受伤
  • 上影节开幕影片《酱园弄·悬案》,陈可辛执导,章子怡主演
  • 交通运输局男子与两名女子办婚礼?官方通报:未登记结婚,开除该男子
  • 让中小学生体验不同职业,上海中高职院校提供超5万个体验名额
  • 打造信息消费新场景、新体验,上海信息消费节开幕