OpenCV4.5.x DNN + YOLOv5 C++推理 |
您所在的位置:网站首页 › opencv调用yolo › OpenCV4.5.x DNN + YOLOv5 C++推理 |
这个预测时间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 |