当前位置:网站首页>opencv dnn部署onnx模型
opencv dnn部署onnx模型
2022-07-26 19:48:00 【Mr.Q】
#include <opencv2/dnn.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>
using namespace cv;
using namespace cv::dnn;
#include "img_tools.h"
#include <fstream>
#include <iostream>
#include <cstdlib>
#include <opencv2/core/ocl.hpp>
using namespace std;
void main()
{
// cv::dnn::initModule(); //Required if OpenCV is built as static libs
ocl::setUseOpenCL(false);//关闭OpenCL,就不会出错了
String modelBin = "E:\\data\\5PA\\fpc\\loc_len\\train-3-rect_loc_256_0722\\model_300.onnx";
//! [Read and initialize network]
Net net = dnn::readNetFromONNX(modelBin);
net.setPreferableBackend(0); //设置模型的实现方式,分OpenCV和Intel加速
net.setPreferableTarget(0); //推断设备选择
//! [Check that network was read successfully]
if (net.empty())
{
std::cerr << "Can't load network by using the following files: " << std::endl;
std::cerr << "caffemodel: " << modelBin << std::endl;
std::cerr << "bvlc_googlenet.caffemodel can be downloaded here:" << std::endl;
std::cerr << "http://dl.caffe.berkeleyvision.org/bvlc_googlenet.caffemodel" << std::endl;
exit(-1);
}
std::string dir_path = "E:\\data\\5PA\\0713\\FPC";
std::vector<std::string> Filename = ImageHelper::findfile(dir_path, "mask.jpg", ".jpg");
for (int i = 0; i < Filename.size(); i++)
{
std::string img_path = Filename[i];
std::cout << img_path << std::endl;
std::string file_name = ImageHelper::file_base_name(img_path);
//! [Prepare blob]
Mat img = imread(img_path); //加载图片
if (img.empty())
{
std::cerr << "Can't read image from the file: " << img_path << std::endl;
exit(-1);
}
clock_t start = clock(); //获取当前系统时间
resize(img, img, Size(256, 256)); //MyNet accepts only 512x512 RGB-images
//ImageHelper::show_img("img", img, 0);
Mat blob;
dnn::blobFromImage(img, blob, 1.0, Size(256, 256), Scalar(0, 0, 0), false, false); //把图像转成4通道的tensor数据(float),每个通道的数据都-127
blob /= 255.0; //把数据归一化到(-1,1)
net.setInput(blob); //设置输入
clock_t tm = clock();
Mat output = net.forward(); //进行推断
tm = clock() - tm;
std::cout << "infer time: " << tm << std::endl;
// process output
std::vector<cv::Mat> ress; // 有些网络会有多个输出
imagesFromBlob(output, ress); //转成多通道,从Tensor转回ImageMat,这步很重要,要不然不好用cv处理
std::cout << ress[0].rows << " " << ress[0].cols << " " << ress[0].channels() << std::endl;
// show res
Mat res = ress[0];
ImageHelper::show_img("maskImg", res, 0);
std::cout << "seg time: " << ((double)clock() - start) / CLOCKS_PER_SEC << std::endl;
}
return;
}边栏推荐
- 查询字段较多时可以添加普通查询和高级查询两种情况
- Summary of message queue knowledge points
- What functions does the medical live broadcast platform need
- Three implementation methods of C # client program calling external program
- 软件测试-开发提测内容规范(项目提测模板)
- BGP的基本配置和聚合
- 第一次培训课完美成功(๑•ㅂ•)و*
- Silent desktop fan chip dltap703sd Jericho
- 5.20晚上单身狗都在哪里?
- 聊天软件项目开发2
猜你喜欢
随机推荐
为什么 ThreadLocal 可以做到线程隔离?
numpy.put()
同花顺靠谱吗?我刚开始学习理财,开证券账户安全吗?
MySQL InnoDB engine (V)
Student's t distribution
被罚「带薪休假」一个月后,谷歌解雇了「爱」上 AI 的他
如何优雅地赞美他人?不妨尝试下这几种方式
tkinter使用wpf控件
贴合课标新方向 猿辅导打造特色新概念内容体系
tf.GraphKeys
EtherCAT 同步模式
How to wait for the return results of multiple asynchronous tasks synchronously?
Leetcode-300 最长递增子序列
Gartner发布最新《中国AI初创企业市场指南》,弘玑Cyclone再次被评为代表性企业
three. JS tag and pop-up the earth
数字化工厂的优势有哪些
After being fined "paid leave" for one month, Google fired him from AI on "love"
Cookie和Session
ES6的方法&类数组转成真正的数组&判断数组的方法
C # convert PDF files into pictures









