前言
工业视觉、智能安防、零售分析等场景中,目标检测早已不是"高大上"的专属技术,而是逐渐成为日常开发的一部分。然而,对于 .NET 开发来说,想要在 C# 项目中快速接入 YOLO 模型却并不容易——要么依赖 Python 服务做胶水调用,要么陷入复杂的 C++ 封装或跨平台部署难题。
有没有一种方式,能让我们像调用普通类库一样,在 WPF、WinForms 或 ASP.NET 应用中直接运行 YOLO?
本文推荐一个项目它不追求大而全,而是聚焦于"开箱即用、简洁高效",让 C# 开发也能轻松驾驭前沿的计算机视觉。
项目介绍
YoloSharp 是一个基于 ONNX Runtime 的轻量级目标检测库,专为 .NET 平台设计。
它将主流 YOLO 系列模型(如 YOLO26、YOLO12 等)封装成直观的 C# API,开发者只需加载 ONNX 模型文件和一张 Bitmap 图像,即可获得结构化的检测结果。
项目目前专注于目标检测任务,输入仅支持 System.Drawing.Bitmap,源码结构清晰、依赖明确,便于集成到各类 Windows 桌面或服务端应用中。
项目功能
1、支持 CPU 和 GPU 推理,通过构造函数传入 GPU ID 即可启用 CUDA 加速;
2、兼容多种 YOLO 模型导出的 ONNX 格式,包括 YOLO26、YOLO12 等主流变体;
3、提供完整的图像预处理流程,自动完成 RGB 提取、归一化、张量转换;
4、内置非极大值抑制(NMS)算法,有效过滤重叠框;
5、输出标准化的 BoundingBox 结构,包含类别索引、置信度、坐标与尺寸;
6、支持自定义置信度阈值(默认 0.3)和 IoU 阈值(默认 0.45),灵活适配不同场景。
项目特点
1、API 极简:核心检测仅需两步——初始化 Yolo 对象,调用 Detect 方法;
2、零外部依赖:除 ONNX Runtime 和 System.Drawing 外无其他第三方库;
3、源码透明:所有图像处理、后处理逻辑均开放,便于调试与定制;
4、性能优先:预处理使用原生 byte 数组操作,避免频繁内存分配;
5、环境灵活:可根据本地是否安装 CUDA 自由切换 CPU/GPU 模式。
项目技术
YoloSharp 基于 Microsoft.ML.OnnxRuntime 构建推理引擎,利用其跨平台、高性能的特性执行模型前向计算。
图像处理模块通过 LockBits 直接读取 Bitmap 的 RGB24 数据,避免 GDI+ 的性能瓶颈。
后处理部分实现了标准的 NMS 流程,并通过 Helper 类提供 IoU 计算、张量转换等工具方法。
整个项目采用分层设计:YoloSharp.Core 定义接口与数据模型,YoloSharp.Bitmap 实现图像适配,YoloSharp 主项目整合推理逻辑,结构清晰,易于扩展。
项目示例
使用示例如下:
using YoloSharp; using System.Drawing; var yolo = new Yolo("model.onnx"); // CPU 模式 // var yolo = new Yolo("model.onnx", 0); // GPU 模式,使用 GPU 0 usingvar bitmap = new Bitmap("image.jpg"); var input = new Input(); var tensor = input.Detection(yolo, bitmap); var results = yolo.Detect(tensor, bitmap.Width, bitmap.Height); if (results != null) { foreach (var box in results) { Console.WriteLine($"类别: {yolo.Names[box.Index]}, 置信度: {box.Confidence:F2}, 位置: ({box.X}, {box.Y}, {box.Width}, {box.Height})"); } }注意:由于 ML 框架对 GPU 环境有特定要求(如 CUDA 版本),建议根据本地环境调整 ONNX Runtime 的运行时包(如 Microsoft.ML.OnnxRuntime.Gpu)。
项目效果
以 YOLO26 模型为例,在 RTX 3060 GPU 上处理 640×640 图像,端到端耗时约 35ms;在 i7-12700K CPU 上约为 120ms。检测结果准确,边界框位置与官方 Python 实现基本一致。
更重要的是,集成过程极其顺畅——只需将模型文件放入项目目录,几行代码即可完成从图像加载到结果输出的全流程,大幅降低 .NET 开发使用深度学习模型的门槛。
项目源码
项目采用标准 .NET 解决方案结构:
yolo-sharp/ ├── src/ │ ├── YoloSharp/ # 核心检测类 │ ├── YoloSharp.Bitmap/ # Bitmap 图像处理 │ └── YoloSharp.Core/ # 核心接口和模型 │ └── Model/ # BoundingBox 等数据类 ├── test/ # 控制台测试项目 └── YoloSharp.sln # Visual Studio 解决方案GitHub:https://github.com/Eviav/YoloSharp
总结
项目是一个精准解决"C# 如何跑 YOLO"的实用工具。它没有花哨的功能,却把核心体验做到位:简单、可控、高效。
对于需要在 .NET 生态中嵌入目标检测能力的开发来说,无论是做工业质检、智能监控,还是学习,YoloSharp 都提供了一条低摩擦的路径。