使用ONNX Runtime封装onnx模型并推理

您所在的位置:网站首页 王国无敌蜀国神兽技能 使用ONNX Runtime封装onnx模型并推理

使用ONNX Runtime封装onnx模型并推理

2024-07-12 16:59:18| 来源: 网络整理| 查看: 265

使用ONNX Runtime封装onnx模型并推理⚓︎

进行这一步之前,请确保已正确安装配置了Visual Studio 2017 和 C#开发环境。

项目的代码也可以在这里找到,下面的步骤是带着大家从头到尾做一遍。

界面设计⚓︎

创建Windows窗体应用(.NET Framework)项目,这里给项目起名ClassifyBear。

在解决方案资源管理器中找到Form1.cs,双击,打开界面设计器。从工具箱中向Form中依次拖入控件并调整,最终效果如下图所示:

左侧从上下到依次是:

Label控件,将内容改为“输入要识别的图片地址:”

TextBox控件,可以将控件拉长一些,方便输入URL

Button控件,将内容改为“识别”

Lable控件,将label的内容清空,用来显示识别后的结果。因为label也没有边框,所以在界面看不出来。可以将此控件的字体调大一些,能更清楚的显示推理结果。

右侧的控件是一个PictureBox,用来预览输入的图片,同时,我们也从这个控件中取出对应的图片数据,传给我们的模型推理类库去推理。建议将控件属性的SizeMode更改为StretchImage,并将控件长和宽设置为同样的值,保持一个正方形的形状,这样可以方便我们直观的了解模型的输入,因为在前面查看模型信息的时候也看到了,该模型的输入图片应是正方形(当前最新的定制化视觉服务导出的模型需要的输入图片大小为224*224)。

添加模型文件到项目中⚓︎

打开解决方案资源管理器中,在项目上点右键->添加->现有项,在弹出的对话框中,将文件类型过滤器改为所有文件,然后导航到模型所在目录,选择模型文件并添加。本示例中使用的模型文件是BearModel.onnx。

模型是在应用运行期间加载的,所以在编译时需要将模型复制到运行目录下。在模型文件上点右键,属性,然后在属性面板上,将生成操作属性改为内容,将复制到输出目录属性改为如果较新则复制。

添加OnnxRuntime库⚓︎

微软开源的OnnxRuntime库提供了NuGet包,可以很方便的集成到Visual Studio项目中。

打开解决方案资源管理器,在引用上点右键,管理NuGet程序包。

在打开的NuGet包管理器中,切换到浏览选项卡,搜索onnxruntime,找到Microsoft.ML.OnnxRuntime包,当前版本是0.4.0,点击安装,稍等片刻,按提示即可完成安装。

当前NuGet发布的OnnxRuntime库支持x64及x86架构的运行库,建议使用x64的,所以这里将项目的目标架构改为x64。

在解决方案上点右键,选择配置管理器。在配置管理器对话框中,将活动解决方案平台切换为x64。如果没有x64,在下拉框中选择新建,按提示新建x64平台。

处理输入并加载模型进行推理⚓︎

在Form1.cs上点右键,选择查看代码,打开Form1.cs的代码编辑窗口。

添加一个成员变量

// 使用Netron查看模型,得到模型的输入应为224*224大小的图片 private const int imageSize = 224;

回到Form1的设计界面,双击识别按钮,会自动跳转到代码页面并添加了button1_Click方法,在其中添加以下代码:

首先,每次点击识别按钮时都先将界面上显示的上一次的结果清除

// 识别之前先重置界面显示的内容 label1.Text = string.Empty; pictureBox1.Image = null; pictureBox1.Refresh();

然后,让图片控件加载图片

bool isSuccess = false; try { pictureBox1.Load(textBox1.Text); isSuccess = true; } catch (Exception ex) { MessageBox.Show($"读取图片时出现错误:{ex.Message}"); throw; }

如果加载成功,将图片数据处理成需要的大小,然后加载模型进行推理。

if (isSuccess) { // 图片加载成功后,从图片控件中取出224*224的位图对象 Bitmap bitmap = new Bitmap(pictureBox1.Image, imageSize, imageSize); float[] imageArray = new float[imageSize * imageSize * 3]; // 按照先行后列的方式依次取出图片的每个像素值 for (int y = 0; y


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭