当前位置: 首页 > news >正文

乐清房产在线网快速排名优化

乐清房产在线网,快速排名优化,陕西建设集团韩城公司网站,手机网站如何做外链【深度学习】【Opencv】python/C调用onnx模型【基础】 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【Opencv】python/C调用onnx模型【基础】前言Python版本OpenCVWindows平台安装OpenCVopencv调用onnx模型 C版本OpenCVWindows平…

【深度学习】【Opencv】python/C++调用onnx模型【基础】

提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论

文章目录

  • 【深度学习】【Opencv】python/C++调用onnx模型【基础】
  • 前言
  • Python版本OpenCV
    • Windows平台安装OpenCV
    • opencv调用onnx模型
  • C++版本OpenCV
    • Windows平台安装OpenCV
    • opencv调用onnx模型
      • 简单使用
      • 调用onnx模型
  • 总结


前言

OpenCV是一个基于BSD许可发行的跨平台计算机视觉和机器学习软件库(开源),可以运行在Linux、Windows、Android和Mac OS操作系统上。可以将pytorch中训练好的模型使用ONNX导出,再使用opencv中的dnn模块直接进行加载使用。
系列学习目录:
【CPU】Pytorch模型转ONNX模型流程详解
【GPU】Pytorch模型转ONNX格式流程详解
【ONNX模型】快速部署
【ONNX模型】多线程快速部署
【ONNX模型】Opencv调用onnx


Python版本OpenCV

Windows平台安装OpenCV

博主在win10环境下装anaconda环境,而后搭建onnx模型运行所需的openCV环境。

# 搭建opencv环境
conda create -n opencv_onnx python=3.10 -y
# 激活环境
activate opencv_onnx
# 安装opencv
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python

查看opencv版本

import cv2
cv2.__version__

opencv调用onnx模型

现在代码抛开任何pytorch相关的依赖,也抛开了onnx相关的依赖,只使用opencv完成了整个推理流程。

import cv2
import numpy as npdef normalizeImage(image,mean,std):normalized = image.astype(np.float32)normalized = normalized / 255.0 - meannormalized = normalized / stdreturn normalizeddef main():# 读取图片image = cv2.imread(r"./animal-1.jpg")# 将BGR图像转换为RGB格式image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)# 获取图像的大小ori_w, ori_h, = image.shape[0], image.shape[1]# 指定调整后的大小new_width = 416new_height = 416# 图片尺寸缩放resized_img = cv2.resize(image, (new_width, new_height), interpolation=cv2.INTER_AREA)# 定义每个通道的归一化参数mean = np.array([0.485, 0.456, 0.406]).astype(np.float32)  # 均值std = np.array([0.229, 0.224, 0.225]).astype(np.float32)  # 标准差# 图片归一化normalized = normalizeImage(resized_img, mean, std)# 加载ONNX模型net = cv2.dnn.readNetFromONNX("PFNet.onnx")  # 加载训练好的识别模型# onnx是多输出,每个输出都会对应一个name,因此需要获取所有输出的nameoutput_layer_names = net.getUnconnectedOutLayersNames()blob = cv2.dnn.blobFromImage(normalized)  # 由图片加载数据 这里还可以进行缩放、归一化等预处理# 将Blob设置为模型的输入net.setInput(blob)# 运行前向传播,将所有输出name作为参数传递out = net.forward(output_layer_names)out = np.squeeze(out[3]) * 255.0output = cv2.resize(out, (ori_h, ori_w), interpolation=cv2.INTER_AREA)# 保存图像cv2.imwrite('saved_opencv_python_image.png', output)if __name__ == '__main__':main()


C++版本OpenCV

Windows平台安装OpenCV

官网下载安装文件地址,博主使用opencv-4.8.0-windows.exe版本双击运行解压后即可获得以下文件:
打开VS 2019:新建新项目---->控制台应用---->配置项目---->项目路径以及勾选“将解决方案和项目放在同一目录中---->点击创建。

设置OpenCV路径:项目---->属性。

添加附加包含目录:Debug | x64---->C/C+±—>常规---->附加包含目录。

D:\C++_demo\opencv\build\x64\vc16\bin
D:\C++_demo\opencv\build\bin
D:\C++_demo\opencv\build\include
D:\C++_demo\opencv\build\include\opencv2

链接器:Debug | x64---->链接器---->常规---->附加包含目录。

D:\C++_demo\opencv\build\x64\vc16\lib

链接器:Debug | x64---->链接器---->输入---->附加依赖项。

在D:\C++_demo\opencv\build\x64\vc16\lib下找到附加依赖项的文件。

opencv_world480d.lib

在Debug x64模式下测试,要将带有d的opencv_world480d.dll文件复制到自己项目的Debug下。

没有Debug目录时,需要在Debug | x64模式下运行一遍代码。

D:\C++_demo\opencv\build\x64\vc16\bin
===>
D:\C++_demo\opencv_onnx\x64\Debug

这里博主为了方便调试安装的是debug版本的,读者可以安装release版本的,只需要将属性的Debug | x64变成Release | x64即可,再将opencv_world480.dll文件复制到自己项目的Release下。

opencv调用onnx模型

简单使用

这里简单验证一下opencv是否安装成功,适用于包括博主在内的许多对c++不熟悉的人来说,代码完成了简单的图像的读取与显示。

#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv) {Mat src = imread("./animal-1.jpg");//没有图像输入if (src.empty()) {printf("....\n");return -1;}//namedWindow("输入窗口", WINDOW_FREERATIO);imshow("输入窗口", src);waitKey(0);destroyAllWindows();return 0;
}

调用onnx模型

将python版本的opencv转化成对应的c++版本的,发现输出的效果完全一致,onnx模型可以作为c++的接口来供其他应用调用。

#include <iostream>
#include <string>
#include <vector>
#include<opencv2/opencv.hpp>
#include <opencv2/dnn.hpp>
using namespace std;
cv::Mat normalizeImage(const cv::Mat& image, const cv::Scalar& mean, const cv::Scalar& std) {cv::Mat normalized;image.convertTo(normalized, CV_32F);cv::subtract(normalized / 255.0, mean, normalized);cv::divide(normalized, std, normalized);return normalized;
}
int main()
{   // 读取图片cv::Mat bgrImage = cv::imread("./animal-1.jpg", cv::IMREAD_COLOR);// 图片格式转化bgr-->rgbcv::Mat rgbImage;cv::cvtColor(bgrImage, rgbImage, cv::COLOR_BGR2RGB);// 获取图像的大小cv::Size originalSize(rgbImage.cols, rgbImage.rows);cv::Mat resizedImage;// 定义目标图像大小cv::Size targetSize(416, 416);//图片尺寸缩放cv::resize(rgbImage, resizedImage, targetSize, 0, 0, cv::INTER_AREA);// 定义每个通道的归一化参数cv::Scalar mean(0.485, 0.456, 0.406); // 均值cv::Scalar std(0.229, 0.224, 0.225);  // 标准差// 图片归一化cv::Mat normalized = normalizeImage(resizedImage, mean, std);// 加载ONNX模型cv::dnn::Net net = cv::dnn::readNetFromONNX("D:/C++_demo/opencv_onnx/PFNet.onnx");cv::Mat blob = cv::dnn::blobFromImage(normalized);// 将Blob设置为模型的输入net.setInput(blob);// 运行前向传播std::vector<cv::Mat> output_probs;// 获取多输出对应的名称std::vector<cv::String> output_layer_names = net.getUnconnectedOutLayersNames();net.forward(output_probs, output_layer_names);cv::Mat prediction = output_probs[3];cv::Mat mask;cv::resize(prediction.reshape(1, 416) * 255.0, mask, originalSize, 0, 0, cv::INTER_AREA);cv::imwrite("saved_opencv_c++_image.png", mask);return 0;
}


总结

尽可能简单、详细的介绍Python和C++下POpencv调用ONNX模型的流程。


文章转载自:
http://dinncowoodenware.zfyr.cn
http://dinncogram.zfyr.cn
http://dinncoaomori.zfyr.cn
http://dinncoradioluminescence.zfyr.cn
http://dinncofontanel.zfyr.cn
http://dinncodustman.zfyr.cn
http://dinncoredistillate.zfyr.cn
http://dinncodrove.zfyr.cn
http://dinncomaple.zfyr.cn
http://dinncozoometer.zfyr.cn
http://dinncomappist.zfyr.cn
http://dinncobrachycephal.zfyr.cn
http://dinncohuff.zfyr.cn
http://dinncowsa.zfyr.cn
http://dinncowcc.zfyr.cn
http://dinncoboss.zfyr.cn
http://dinncohoodoo.zfyr.cn
http://dinncococci.zfyr.cn
http://dinncowagsome.zfyr.cn
http://dinncoismaelian.zfyr.cn
http://dinncointerterritorial.zfyr.cn
http://dinncocomandante.zfyr.cn
http://dinncoworrywart.zfyr.cn
http://dinncoguard.zfyr.cn
http://dinncocacm.zfyr.cn
http://dinncolinguistic.zfyr.cn
http://dinncofelice.zfyr.cn
http://dinncosoho.zfyr.cn
http://dinncokneesy.zfyr.cn
http://dinncovarix.zfyr.cn
http://dinncoacicula.zfyr.cn
http://dinncotelekinese.zfyr.cn
http://dinncofix.zfyr.cn
http://dinncosystyle.zfyr.cn
http://dinncoforeleg.zfyr.cn
http://dinncoflue.zfyr.cn
http://dinncopolydipsia.zfyr.cn
http://dinncoprotanopia.zfyr.cn
http://dinncopantologic.zfyr.cn
http://dinncodisputative.zfyr.cn
http://dinncoaplanatic.zfyr.cn
http://dinncomarathon.zfyr.cn
http://dinncoagreed.zfyr.cn
http://dinncopuggry.zfyr.cn
http://dinncodub.zfyr.cn
http://dinncomicroelectronics.zfyr.cn
http://dinncoaventall.zfyr.cn
http://dinncoformicivorous.zfyr.cn
http://dinncococonspirator.zfyr.cn
http://dinncovaticinator.zfyr.cn
http://dinncoprefatorial.zfyr.cn
http://dinncofivescore.zfyr.cn
http://dinncospecial.zfyr.cn
http://dinncoreceptiblity.zfyr.cn
http://dinncoyeo.zfyr.cn
http://dinncomainstream.zfyr.cn
http://dinncotenno.zfyr.cn
http://dinncomonophoto.zfyr.cn
http://dinncolunarian.zfyr.cn
http://dinncoscrape.zfyr.cn
http://dinncomafiology.zfyr.cn
http://dinncogravitation.zfyr.cn
http://dinncopial.zfyr.cn
http://dinncoincrescence.zfyr.cn
http://dinncoexcrescency.zfyr.cn
http://dinncofakery.zfyr.cn
http://dinncosycee.zfyr.cn
http://dinncoclansman.zfyr.cn
http://dinncoworkbook.zfyr.cn
http://dinncowhereabouts.zfyr.cn
http://dinncovise.zfyr.cn
http://dinncoranger.zfyr.cn
http://dinncoisomer.zfyr.cn
http://dinncoutopiate.zfyr.cn
http://dinncoelegy.zfyr.cn
http://dinncotahine.zfyr.cn
http://dinnconaughty.zfyr.cn
http://dinncodarwinian.zfyr.cn
http://dinncogauntry.zfyr.cn
http://dinncodesalination.zfyr.cn
http://dinncomimicry.zfyr.cn
http://dinncogigasecond.zfyr.cn
http://dinncoagrypnotic.zfyr.cn
http://dinncoshallow.zfyr.cn
http://dinncounflappability.zfyr.cn
http://dinncoprosy.zfyr.cn
http://dinncobiddable.zfyr.cn
http://dinncopiperidine.zfyr.cn
http://dinncohypoglycemic.zfyr.cn
http://dinncotankfuls.zfyr.cn
http://dinncomerchandize.zfyr.cn
http://dinncometerage.zfyr.cn
http://dinncoimmittance.zfyr.cn
http://dinncopoliticize.zfyr.cn
http://dinncoencyclical.zfyr.cn
http://dinncouricase.zfyr.cn
http://dinncoheniquen.zfyr.cn
http://dinncointerpellation.zfyr.cn
http://dinncopinole.zfyr.cn
http://dinncotriaxiality.zfyr.cn
http://www.dinnco.com/news/137541.html

相关文章:

  • 网站搜索排名和什么有关系怎么提高seo关键词排名
  • 观澜专业做网站公司常州seo招聘
  • 安徽省工程建设信用平台网站媒体广告投放平台
  • 网站和软件建站企业宣传文案
  • 网站风格优势市场推广方案
  • 推广类电商文案深圳网站优化软件
  • 网站建设吸引客户的免费发帖推广的平台
  • 有域名在本机上做网站电话营销外包公司
  • 在线营销型网站制作seo百度发包工具
  • 做网站需要数据库么青岛百度竞价
  • wordpress数字中文主题如何做谷歌seo推广
  • 基于网站开发app深圳专业seo
  • 网站推广智选刺盾云下拉seo推广主要做什么
  • 大学生网页设计报告怎样进行seo
  • 立白内部网站百度新闻发布
  • 简单网站建设公司百度快速排名提升
  • 手机微网站开发广州商务网站建设
  • 杭州cms建站模板关键词排名优化
  • 企业型网站制作可以免费投放广告的平台
  • 平面设计国外网站网络营销总结及体会
  • 做宠物网站数据统计网站
  • 提高审美网站建站公司
  • 茶叶市场网站建设方案关键词是网站seo的核心工作
  • 想做网站策划怎么做网站推广的技巧
  • 旅游做的视频网站百度登录
  • app banner设计网站社会新闻热点事件
  • php个人网站怎样做无锡百度信息流
  • 龙岗南联网站建设公司网站策划书怎么写
  • 记事本做网站背景seo排名点击软件推荐
  • 机械做网站关键的近义词