OpenCV4.5.x DNN + YOLOv5 C++推理

您所在的位置:网站首页 opencv调用yolo OpenCV4.5.x DNN + YOLOv5 C++推理

OpenCV4.5.x DNN + YOLOv5 C++推理

2023-08-21 05:12| 来源: 网络整理| 查看: 265

这个预测时间190ms,应该是cpu版本

昨天修改了个OpenCV DNN支持部署YOLOv5,6.1版本的Python代码,今天重新转换为C++代码了!貌似帧率比之前涨了点!说明C++的确是比Python快点!

点击这里可以查看之前的推文:

OpenCV4.5.4 直接支持YOLOv5 6.1版本模型推理

OpenC4 C++部署YOLOv5

我把测试代码封装成一个工具类了,可以直接用,方便大家(生手党)直接部署调用!保重一行代码都不用再写了!

01

类的声明:

定义了一个结构体作为返回结果,主要包括类别id、置信度、检测框。两个方法分别是初始化参数与网络,另外一个完成检测功能与返回结果集。

yolov5_dnn.h

#pragma once #include  struct DetectResult {     int classId;     float score;     cv::Rect box; }; class YOLOv5Detector { public:     void initConfig(std::string onnxpath, int iw, int ih, float threshold);     void detect(cv::Mat & frame, std::vector &result); private:     int input_w = 640;     int input_h = 640;     cv::dnn::Net net;     int threshold_score = 0.25; };

02

类实现:

直接读取YOLOv5 onnx格式模型,完成对图象预处理,模型推理,后处理返回等操作!代码实现如下:

#include  void YOLOv5Detector::initConfig(std::string onnxpath, int iw, int ih, float threshold) {     this->input_w = iw;     this->input_h = ih;     this->threshold_score = threshold;     this->net = cv::dnn::readNetFromONNX(onnxpath); } void YOLOv5Detector::detect(cv::Mat & frame, std::vector &results) {     // 图象预处理 - 格式化操作     int w = frame.cols;     int h = frame.rows;     int _max = std::max(h, w);     cv::Mat image = cv::Mat::zeros(cv::Size(_max, _max), CV_8UC3);     cv::Rect roi(0, 0, w, h);     frame.copyTo(image(roi));     float x_factor = image.cols / 640.0f;     float y_factor = image.rows / 640.0f;     // 推理     cv::Mat blob = cv::dnn::blobFromImage(image, 1 / 255.0, cv::Size(this->input_w, this->input_h), cv::Scalar(0, 0, 0), true, false);     this->net.setInput(blob);     cv::Mat preds = this->net.forward();     // 后处理, 1x25200x85     // std::cout 


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3