这段代码是基于 OpenCvSharp, OpenVinoSharp 和 .NET Framework 4.8 的 Windows Forms 应用程序。其主要目的是加载和编译机器学习模型,对输入数据进行推理,并显示结果。
下面是该程序的主要功能和方法的详细总结:
初始化 OpenVINO 运行时核心(Core)和设备列表:
在
Form1_Load
方法中,程序创建了Core
类的实例,并获取了可用设备列表,然后将这些设备添加到下拉选择框中。
选择模型和输入文件:
使用
OpenFileDialog
来引导用户选择模型文件和输入文件(图片或视频)。btn_select_model_Click
和btn_select_input_Click
方法负责处理文件选择对话框,并更新文本框以显示所选文件的路径。
加载并编译模型:
btn_load_model_Click
方法中,程序通过read_model
方法加载用户选定的模型,然后调用compile_model
方法将模型编译到指定设备上。编译完成后,创建了对模型的推理请求(InferRequest
)。
执行推理:
btn_infer_Click
方法负责执行推理过程。它根据输入路径(图片或视频)调用image_predict
方法来处理数据,并显示预测结果。
处理图片并推理:
image_predict
方法接受一个Mat
图像,将其调整大小、归一化,并通过排列(Permutation)转换成模型所需的输入格式。之后,程序执行推理请求,并获取输出tensor。
后处理推理结果并显示:
postprocess
方法接受推理结果作为一个浮点数数组,根据设定的类别数和因子对结果进行预处理,检测出物体的矩形框,过滤和非极大值抑制(NMS)后,识别出类别和置信度,最终,将识别出的对象和对应信息绘制在图像上。
显示 FPS 和预测结果:
推理后,程序计算并显示当前的帧率(FPS),并将检测框和标签绘制在结果图像上,并在界面中更新
pictureBox2
控件来展示图像。
该程序是由几个部分组成的一个界面应用,通过读取模型文件、处理图像和视频输入、执行模型推理,并在界面上展示结果的流程,体现了一种典型的实时物体检测和分类的机器学习应用。
// 引入OpenCvSharp相关的命名空间,用于图像处理和计算机视觉
using OpenCvSharp;
// 引入OpenCvSharp的Dnn(深度神经网络)命名空间,用于深度学习模型的加载和推理
using OpenCvSharp.Dnn;
// 引入OpenVinoSharp命名空间,用于模型优化和推理加速
using OpenVinoSharp;
// 引入OpenVinoSharp的Extensions下的model命名空间,包含模型加载和处理的扩展方法
using OpenVinoSharp.Extensions.model;
// 引入OpenVinoSharp的Extensions下的p