yolov8 opencv模型部署(C++版)

慈云数据 2024-05-28 技术支持 48 0
  • TensorRT系列之 Windows10下yolov8 tensorrt模型加速部署

  • TensorRT系列之 Linux下 yolov8 tensorrt模型加速部署

  • TensorRT系列之 Linux下 yolov7 tensorrt模型加速部署

  • TensorRT系列之 Linux下 yolov6 tensorrt模型加速部署

  • TensorRT系列之 Linux下 yolov5 tensorrt模型加速部署

  • TensorRT系列之 Linux下 yolox tensorrt模型加速部署

  • TensorRT系列之 Linux下 u2net tensorrt模型加速部署

  • 更多(点我进去)…

    文章目录

    • yolov8 opencv模型部署(C++ 版)
      • 一、安装yolov8
      • 二、导出onnx
      • 三、基于opencv CPP推理onnx

        yolov8 opencv模型部署(C++ 版)

        使用opencv推理yolov8模型,仅依赖opencv,无需其他库,以yolov8s为例子,注意:

        • 使用opencv4.8.1 !
        • 使用opencv4.8.1 !
        • 使用opencv4.8.1 !

          如果你使用别的版本,例如opencv4.5,可能会出现以下错误。

          请添加图片描述

          20231206新增推理效果,代码修改。

          请添加图片描述

          请添加图片描述

          一、安装yolov8

          conda create -n yolov8 python=3.9 -y
          conda activate yolov8
          pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple
          

          二、导出onnx

          导出onnx格式模型的时候,注意,如果你是自己训练的模型,只需要把以下代码中yolov8s.pt修改为自己的模型即可,如best.pt。如果是下面代码中默认的模型,并且你没有下载到本地,系统会自动下载,我这里在文章末尾提供了下载链接。

          将以下代码创建、拷贝到yolov8根目录下。

          具体代码my_export.py:

          from ultralytics import YOLO
          # Load a model
          model = YOLO('yolov8n.pt')  # load an official model
          # Export the model
          model.export(format='onnx', imgsz=[480, 640], opset=12) # 导出一定不要修改这里参数
          

          执行导出命令

          python my_export.py
          

          输出如下图信息,表明onnx格式的模型被成功导出,保存在my_export.py同一级目录。

          请添加图片描述

          三、基于opencv CPP推理onnx

          使用opencv4.8.0,linux和windows都可以,下面以windows为例子。注:运行代码需要onnx模型 + 一张图,文末给了下载链接,classes.txt不需要。

          以下是主函数文件main.cpp:

          #include 
          #include 
          #include 
          #include "inference.h"
          using namespace std;
          using namespace cv;
          int main(int argc, char **argv)
          {
              bool runOnGPU = false;
              // 1. 设置你的onnx模型
              // Note that in this example the classes are hard-coded and 'classes.txt' is a place holder.
              Inference inf("D:/CodePython/ultralytics/yolov8s.onnx", cv::Size(640, 480), "classes.txt", runOnGPU); // classes.txt 可以缺失
              // 2. 设置你的输入图片
              std::vector imageNames;
              imageNames.push_back("bus.jpg");
              //imageNames.push_back("zidane.jpg");
              for (int i = 0; i  modelScoreThreshold)
                          {
                              confidences.push_back(confidence);
                              class_ids.push_back(class_id.x);
                              float x = data[0];
                              float y = data[1];
                              float w = data[2];
                              float h = data[3];
                              int left = int((x - 0.5 * w) * x_factor);
                              int top = int((y - 0.5 * h) * y_factor);
                              int width = int(w * x_factor);
                              int height = int(h * y_factor);
                              boxes.push_back(cv::Rect(left, top, width, height));
                          }
                      }
                  }
                  data += dimensions;
              }
              std::vector nms_result;
              cv::dnn::NMSBoxes(boxes, confidences, modelScoreThreshold, modelNMSThreshold, nms_result);
              std::vector detections{};
              for (unsigned long i = 0; i 
微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon