Bootstrap

C#winform调用onnx预测,输出图片

在网上找了很多,要么很复杂,要么报错,研究了很久,发现一个简单的方法。文章后附源码,大家一起学习。

1.第一步,vs创建项目

2.引入yolov8的包

3.在winform中创建一个按钮和一个图片控件。如果页面里没有工具箱,可以点击快捷键ctrl+Alt+x,工具箱就会出现。

4.创建一个文件夹用来存放要预测的图片,还要准备onnx文件,如果你是用yolov8自带的onnx模型,可以自己网上去下yolov8的onnx模型,或者用我分享的。

D:\vs2022\work-space\yolov8_onnx\yolov8_onnx\bin\Debug\net8.0-windows找到路径,在 net8.0-windows下创建一个文件夹为images,放入要预测的图片。这是我的路径,要根据自己项目的路径修改一下。

然后将onnx文件复制在项目中,我这是自己训练出来的模型。如果要用yolov8自己的onnx模型,需要替换一下,我放在提供的链接里面。

5.写代码

双击button1按钮,进入click事件

先创建一个异步调用的方法代码如下

 async Task PredictAndSaveAsync(YoloV8Predictor predictor, string image)
{
    var path = $"./images/{image}";
    var output = "pp.bmp";
    var result = await predictor.PredictAndSaveAsync(path,output);
    //MessageBox.Show($"Result: {result}");
     pictureBox1.Image = Image.FromFile(output);
    Console.WriteLine();
    Console.WriteLine($"Task:   {predictor.Metadata.Task}");
    Console.WriteLine($"Image:  {image}");
    Console.WriteLine($"Result: {result}");
    Console.WriteLine($"Speed:  {result.Speed}");
}

然后在完成click事件。

代码如下

 private async void button1_Click(object sender, EventArgs e)
 {
     Console.WriteLine("Loading classification model...");
     using var ppjjPredictor = YoloV8Predictor.Create("D:\\vs2022\\work-space\\WinFormsApp1\\WinFormsApp1\\best.onnx");
     await PredictAndSaveAsync(ppjjPredictor, "jj.bmp");

    
 }

运行,启动成功后点击botton1,

结果:有点小,我的模型就是字符识别。预测出来结果就是5912

 

 1.如果用这个源码,onnx路径记得换成自己的。

2.如果用yolov8提供的onnx模型,就把预测图片也换一下,因为yolov8提供的那个onnx模型,预测不了字符识别,我在文件中准备了另外一张图片,你们可以替换一下

链接:https://pan.baidu.com/s/1KSt-yYR56pJ3exAtS_NAww 
提取码:1999

;