前言随着人工智能技术的不断发展,目标检测作为计算机视觉领域的核心技术之一,在智能安防、自动驾驶、工业质检等领域发挥着重要作用。
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 模型并执行推理;
环境搭建步骤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 YOLOv8https://github.com/ultralytics/ultralytics
2、Yolov8Nethttps://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
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!
方便大家交流、资源共享和共同成长
纯技术交流群,需要加入的小伙伴请扫码,并备注【加群】
推荐阅读
觉得有收获?不妨分享让更多人受益
关注「DotNet技术匠」,共同提升技术实力