【介绍】
部署 YOLOv9 ONNX 模型在 OpenCV 的 C++ 环境中涉及一系列步骤。以下是一个简化的部署方案概述,以及相关的文案。
部署方案概述:
cv::dnn::readNetFromONNX
函数加载模型。这个函数会读取模型文件,并创建一个可以用于推理的网络对象。cv::dnn::Net::forward
函数来完成的。文案示例:
“在现代计算机视觉应用中,部署高效的目标检测模型至关重要。使用 OpenCV 的 C++ 接口,我们可以轻松加载和部署 YOLOv9 ONNX 模型,实现实时的目标检测。通过准备模型文件、配置开发环境、加载模型、预处理输入数据、执行推理和后处理输出,我们可以在各种应用场景中快速集成 YOLOv9 的强大功能。无论是安全监控、自动驾驶还是智能家居,YOLOv9 与 OpenCV 的结合都为我们提供了强大的工具来检测和识别图像中的目标。”
【效果演示】
【视频演示】
【部分实现代码】
- #include <iostream>
- #include<opencv2/opencv.hpp>
-
- #include<math.h>
- #include "yolov9.h"
- #include<time.h>
-
- using namespace std;
- using namespace cv;
- using namespace dnn;
-
- template<typename _Tp>
- int yolov9(_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;
- }
-
-
-
- int main() {
-
- string img_path = "E:\\person.jpg";
- string detect_model_path = "C:\\Users\\Administrator\\Desktop\\yolov9-opencv-det-cplus\\models\\yolov9-c.onnx";
- Mat img = imread(img_path);
- Yolov9 task_detect;
- yolov9(task_detect,img,detect_model_path); //Opencv detect
-
-
- return 0;
- }
【测试环境】
vs2019
opencv==4.9.0
cmake==3.24.3
【源码下载】