前言
随着人工智能技术的不断发展,目标检测作为计算机视觉领域的核心技术之一,在智能安防、自动驾驶、工业质检等领域发挥着重要作用。
YOLO(You Only Look Once)系列模型凭借其高效性与准确性,成为当前最流行的目标检测框架之一。
YOLOv8 是由 Ultralytics 推出的最新一代 YOLO 模型,它在性能、灵活性和效率方面进行了多项优化,并支持包括目标检测、图像分割、姿态估计、跟踪和分类等多种视觉任务。
本文将以实际项目为例,介绍如何基于 .NET 8 + OpenCvSharp + Yolov8Net 开发一个简单但功能完整的目标检测系统。
YOLO 系列发展
YOLO 系列模型自2015年由华盛顿大学的 Joseph Redmon 和 Ali Farhadi 提出以来,经历了多个版本的迭代:
YOLOv1 (2015):首次提出单阶段检测思想,实现了实时检测。
YOLOv2 (2016):引入批量归一化、锚框(Anchor Box)、维度聚类等技术。
YOLOv3 (2018):改进主干网络结构,使用多尺度预测提升小目标检测效果。
YOLOv4 (2020):引入 Mosaic 数据增强、无锚检测头和新的损失函数。
YOLOv5 (2020):由 Ultralytics 维护,增强了训练流程和部署能力。
YOLOv6 (2022):由美团开源,适用于自动配送机器人等场景。
YOLOv7 (2022):新增关键点检测、姿态估计等功能。
YOLOv8 (2023):Ultralytics 的最新版本,集检测、分割、跟踪、分类于一体,具备强大的通用性和扩展性。
系统实现1、开发环境
本系统采用 .NET 8 平台进行开发,结合 Visual Studio 2022 进行界面设计与调试。核心库如下:
Yolov8Net:用于加载 YOLOv8 模型并执行推理;
OpenCvSharp:用于图像处理和结果绘制;
NuGet 包管理器:快速安装所需依赖项。
环境搭建步骤
1、安装 Visual Studio 2022 及 .NET 8 SDK;
2、创建 Windows Forms App (.NET) 项目;
3、使用 NuGet 安装 
Yolov8Net
 和 
OpenCvSharp4
 相关包;
4、将训练好的 
.onnx
 模型文件放入项目目录中(如 
models/yolov8n1.onnx
);

2、功能模块
系统主要包括以下功能模块:
图像选择与显示;
模型加载与推理;
检测结果可视化;
支持用户自定义模型路径(后续可扩展为模型训练引导)。
引用库
using Yolov8Net;

using OpenCvSharp;

using OpenCvSharp.Extensions;

3、核心代码实现

图像选择功能

private void button1_Click(object sender, EventArgs e)

{

    OpenFileDialog dialog = new OpenFileDialog();

    dialog.Title = "请选择文件";

    dialog.Filter = "图像文件(*.jpg;*.jpeg)|*.jpg;*.jpeg";

    if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)

    {

        string file = dialog.FileName;

        textBox1.Text = file;

        Mat PublicMat1 = Cv2.ImRead(file, ImreadModes.AnyColor);

        pictureBox1.Image = BitmapConverter.ToBitmap(PublicMat1);

        showing(file);

    }

}

目标检测与结果显示

private void showing(string picPath)

{

    // 加载模型

    usingvar yolo = YoloV8Predictor.Create("models\\yolov8n1.onnx");

    var img = SixLabors.ImageSharp.Image.Load(picPath);

    // 执行推理

    var predictions = yolo.Predict(img);

    // 图像绘制

    Mat PublicMat1 = Cv2.ImRead(picPath, ImreadModes.AnyColor);

    Scalar color = Scalar.Red;

    foreach (var pred in predictions)

    {

        int x = (int)Math.Round(Math.Max(pred.Rectangle.X, 0));

        int y = (int)Math.Round(Math.Max(pred.Rectangle.Y, 0));

        int width = (int)Math.Round(Math.Min(img.Width - x, pred.Rectangle.Width));

        int height = (int)Math.Round(Math.Min(img.Height - y, pred.Rectangle.Height));

        // 绘制矩形框

        Cv2.Rectangle(PublicMat1, new Rect(x, y, width, height), color, 2);

        // 添加标签文本

        string text = $"{pred.Label.Name} [{pred.Score:F2}]";

        Cv2.PutText(PublicMat1, text, new Point(x, y - 8), HersheyFonts.HersheyTriplex, 0.6, color);

    }

    // 显示结果图像

    pictureBox2.Image = BitmapConverter.ToBitmap(PublicMat1);

}

识别效果

以下是本系统在不同场景下的识别效果示例:

人物识别
动物识别
物体识别
从图中可以看出,YOLOv8 在不同类别目标上均表现出良好的识别精度和速度,能够满足实际应用需求。
总结
本文介绍了基于 YOLOv8 和 .NET 8 平台构建目标检测系统的全过程,涵盖环境搭建、模型加载、图像处理、结果可视化等关键技术环节。通过使用 Yolov8Net 和 OpenCvSharp 库,我们成功实现了一个轻量级、易于扩展的图形识别应用。
可进一步扩展至视频流检测、多目标跟踪、自定义数据集训练等功能,也可应用于智慧交通、智能监控、工业自动化等具体业务场景中。
YOLOv8 凭借其强大的模型能力和灵活的接口设计,为大家提供了极大的便利。而 .NET 平台则为构建高性能、跨平台的应用程序提供了坚实的基础。
相关资料1、Ultralytics YOLOv8
https://github.com/ultralytics/ultralytics
2、Yolov8Net
https://github.com/huozhicheng/Yolov8Net
3、OpenCvSharp 文档
https://shimat.github.io/opencvsharp_docs/
4、YOLOv8 官方文档
https://docs.ultralytics.com/
最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。也可以加入微信公众号[DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!
作者:上位机李工
出处:mp.weixin.qq.com/s/2TRkjY8If_I8P39l7U9vDw
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!

END

觉得有收获?不妨分享让更多人受益
关注「DotNet技术匠」,共同提升技术实力

收藏
点赞
分享
在看


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则

上一主题上一主题         下一主题下一主题