C#简单使用Yolov5的Onnx格式模型进行目标检测

背景

最近要离职了,同事需要了解一下C#如何使用yolov5系列onnx格式模型进行目标检测,由于其对C#不熟练,可能会影响公司后续的开发进度,所以趁着还在,赶紧把手尾搞好。

方案

1、创建一个C# DotNet 8 控制台项目[可千万注意不要选了DotNetFramework框架哦],命名为TestNugetCpuOnnx,并生成解决方案,产生bin目录

2、 在Nuget中安装我的包BingLing.Yolov5Onnx.Cpu

由于这个是可以跨平台调用的,我并没有把运行时一起打包过去,我当前示例的系统是windows,因此我还需要安装EmguCv.runtime.windows

3、准备好我们的onnx文件和一个json格式的配置文件 ,如果你没有的话,可以到我的码云里下载

BingLing.Yolov5Onnx.Cpu: C#使用cpu使用 yolov5 模型的onnx格式文件进行推理,简化你的编码 (gitee.com)

下载完毕后将其中的yolov5s.onnx,以及yolov5_onnx.json这两个文件一起放到bin/Debug/net8.0这个目录下。值得一提的是,你还需要准备一张图片,修改名字为down.jpeg也放到这个目录下,如果找不到,直接从我的博客下也行。

down.jpeg【网络获取,觉侵联删】

4、 修改Program.cs代码内容为如下

cs 复制代码
using BingLing.Yolov5Onnx.Cpu;
using Emgu.CV.Structure;
using Emgu.CV;
using System.Collections.Concurrent;

namespace TestNugetCpuOnnx
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Yolov5Onnx yolov5Onnx = new("yolov5_onnx.json");
            Mat mat = new("down.jpeg");
            MCvScalar color = new(255, 0, 0);
            ConcurrentDictionary<int, List<Prediction>> dictionary = yolov5Onnx.DetectAllOut(mat);

            foreach (List<Prediction> predictions in dictionary.Values)
            {
                foreach (var prediction in predictions)
                {
                    int x = (int)((prediction.X - prediction.Width / 2));
                    int y = (int)((prediction.Y - prediction.Height / 2));
                    int width = (int)(prediction.Width);
                    int height = (int)(prediction.Height);
                    CvInvoke.Rectangle(mat, new System.Drawing.Rectangle(x, y, width, height), color);
                    CvInvoke.PutText(mat, $"k:{prediction.Kind}", new System.Drawing.Point(x, y + 20), Emgu.CV.CvEnum.FontFace.HersheyDuplex, 1, color);
                    CvInvoke.PutText(mat, $"c:{prediction.Confidence:0.00}", new System.Drawing.Point(x, y + 50), Emgu.CV.CvEnum.FontFace.HersheyDuplex, 1, color);
                }
            }
            CvInvoke.Imshow("mat", mat);
            CvInvoke.WaitKey(0);
            CvInvoke.DestroyAllWindows();
        }
    }
}

5、运行程序,查看结果,其中k为kind,c为confidence

6、安装EmguCv.runtime.ubuntu在linux系统下运行结果

注意发布成linux可执行程序,发布方法前面博客已经论述过,这里不再重复

相关推荐
天天代码码天天6 分钟前
C# OpenCvSharp 部署表格检测
人工智能·目标检测·表格检测
斯多葛的信徒11 分钟前
看看你的电脑可以跑 AI 模型吗?
人工智能·语言模型·电脑·llama
正在走向自律11 分钟前
AI 写作(六):核心技术与多元应用(6/10)
人工智能·aigc·ai写作
AI科技大本营11 分钟前
Anthropic四大专家“会诊”:实现深度思考不一定需要多智能体,AI完美对齐比失控更可怕!...
人工智能·深度学习
Cc不爱吃洋葱12 分钟前
如何本地部署AI智能体平台,带你手搓一个AI Agent
人工智能·大语言模型·agent·ai大模型·ai agent·智能体·ai智能体
网安打工仔12 分钟前
斯坦福李飞飞最新巨著《AI Agent综述》
人工智能·自然语言处理·大模型·llm·agent·ai大模型·大模型入门
AGI学习社12 分钟前
2024中国排名前十AI大模型进展、应用案例与发展趋势
linux·服务器·人工智能·华为·llama
AI_Tool12 分钟前
纳米AI搜索官网 - 新一代智能答案引擎
人工智能·搜索引擎
Damon小智13 分钟前
合合信息DocFlow产品解析与体验:人人可搭建的AI自动化单据处理工作流
图像处理·人工智能·深度学习·机器学习·ai·自动化·docflow
小虚竹13 分钟前
用AI辅导侄女大学物理的质点运动学问题
人工智能·chatgpt