当前位置: 首页 > news >正文

C#AI系列(3):31mb单文件exe实现姿态检测-将Yolo装进口袋

一、环境准备

Nuget拉取 Microsoft.ML.OnnxRuntime.Managed 和 YoloDotNet,库内包含了完整所需的其他如Skia、OnnxRuntime等Native库文件。其中:

Microsoft.ML.OnnxRuntime.Managed: ONNX Runtime 是跨平台机器学习推理加速器,可兼容 PyTorch、TensorFlow/Keras 及 scikit-learn、LightGBM、XGBoost 等经典框架,通过图优化与硬件加速器协同,在异构操作系统与驱动环境下实现低成本、高吞吐、低延迟的统一部署。

YoloDotNet:基于 .NET 8、ONNX Runtime 的 C# 全栈库,把 YOLO 的检测、斜框、分割、分类、姿态、追踪能力一次打包,CUDA/TensorRT 双路 GPU 加速,开箱即跑;图片、视频、直播流全兼容,帧跳、可视化可定制,单库实现“模型到画面”的极速闭环。

二、模型准备

Yolo3-Yolo12预训练好的模型可以在https://docs.ultralytics.com/zh/models/yolo11/#supported-tasks-and-modes下载。

模型分为5大类:对象检测、图像分割、图像分类、姿态检测、目标检测(OBB)

所有模型下载后为.pt的格式,我们在C# 中使用的话需要在python中处理成.onnx格式。代码非常简单:

from ultralytics import YOLO

# 加载.pt模型

model = YOLO("D:/yolo11n-pose.pt")

# 输出.onnx模型

model.export(format="onnx")

三、代码实现

示例代码可参考官方YoloDotNet中的demo文件夹,有各种实现的详细案例。以下是Yolo初始化的示例:

//初始化Yolo示例

using var yolo = new Yolo(new YoloOptions

{

// 设定模型路径

// 不同的任务需加载不同的模型

OnnxModel = @"\yolo11n-pose.onnx",

// 设定由CPU实现

ExecutionProvider = new CpuExecutionProvider(),

// 推理前应用的缩放模式。Proportional(等比缩放)会保持宽高比(必要时加填充);Stretch(拉伸缩放)则直接将图片resize到目标尺寸,不保持宽高比。该参数会直接影响推理结果。

ImageResize = ImageResize.Proportional,

// 缩放时可用的采样选项;会影响推理速度与质量。

// 其他采样选项的对比示例,参见基准测试:

SamplingOptions = new(SKFilterMode.Nearest, SKMipmapMode.None) // YoloDotNet default

});

YoloOptions的参数OnnxModel也可以改成OnnxModelBytes,从而直接加载字节数组,以便实现将模型内嵌。

在这里以姿态检测代码作为例子,非常简单,核心代码也就1-2行,其他部分可按需求增减:

// 用Skia加载目标图片

using var image = SKBitmap.Decode(args?[0] ?? @"d:\tt2.png");

// 使用加载好模型的Yolo示例执行任务

var results = yolo.RunPoseEstimation(image, confidence: 0.25, iou: 0.7);

// 绘制任务结果

image.Draw(results, _drawingOptions);

// 保存绘制任务结果

var fileName = Path.Combine(_outputFolder, "PoseEstimation.jpg");

image.Save(fileName, SKEncodedImageFormat.Jpeg, 80);

// 显示输出的图片

DisplayOutput(fileName);

四、发布选项

由于.Net平台的强大,我们可以任意选择我们的发布形式。以下比较了集中发布情况,所有发布的文件中均内嵌了一个11.2mb的小模型,发布后无需再外挂模型文件。

发布方式(内嵌模型资源) 大小 文件数量

单文件发布 47.6MB 3

单文件发布(Compression) 45.6MB 3

AOT发布 37.9MB 3

单文件发布(Compression)+Native自提取 31.0MB 1

需要注意的是。原生YoloDotNet发布Aot会报错,原因是其在某个函数传参过程中使用了Dynamic类型,我们将原库代码拔下来修改后重新编译即可支持了。

五、效果演示

Yolo的姿态模型可以识别面部头眼及四肢等多个关键点。效果展示如下(视频无加速):

output

在最后一幅图大家也发现了,有部分人物未被识别到。这其实与案例中选择的模型大小有关。当我们切换到稍大点的模型时(yolo11x-pose,224mb),主体人物均可被正常识别了。

yolo11n-pose,11.2mb:

PoseEstimation_n

yolo11x-pose,224mb:

PoseEstimation_x

六、 最后

本文借助 C# AOT 与 ONNX Runtime,可将 YOLO11 姿态模型及全部依赖压缩为 31 MB 单文件 EXE,现场部署无需 Python 环境与额外组件,显著降低实施、维护与版本漂移风险,可以将落地门槛再降一分,即插即用将AI装进了口袋。

感谢您的阅读,本案例及更加完整丰富的机器学习模型案例的代码已全部开源,关注公众号回复AISharp即可查看仓库地址。

http://www.cnnetsun.cn/news/112307.html

相关文章:

  • 超越异步:如何在Node.js中构建极速数据库应用?
  • Boltz生物分子交互建模:从新手到专家的5个关键步骤
  • HoYo.Gacha专业抽卡分析工具完全使用手册
  • FastMCP高级特性之Composition
  • 安卓手机投屏到电脑的开源软件(scrcpy)
  • 边缘计算开源项目终极指南:让物联网设备秒变智能终端
  • ForensicsTool取证工具完整安装配置指南:快速掌握电子数据取证技能
  • DeepSeek-V3 KV缓存技术:让AI对话像翻书一样流畅
  • SpringBoot进阶教程(八十八)获取图片的宽高
  • PeachPie 1.1.13 发布支持最新PHP 8.5.0
  • 电视也可以玩街机经典游戏,你的客厅,早就该变成这样了!
  • 掌握3个Mock工具,轻松玩转单元测试
  • AutoGen到Microsoft Agent Framework终极迁移指南:从零开始构建现代化AI代理系统
  • 2008-2024年地级市女性奥运冠军数据
  • 2003-2024年上市公司人工智能采纳程度数据+Stata代码
  • 问了 3 个博士,导师不说,但目前最新论文卡人的已经不是知网查重
  • CST设计:可重构超表面宽带窄带可切换吸收与多波束技术
  • ai智能搜索文献:高效精准的学术资源检索新工具与应用研究
  • 英文文献的高效检索与阅读策略研究
  • 万字长文!Agent及其主流框架终极指南(附对比图),好Agent的标准:自己想、自己干、自己复盘!
  • 打造专属问答社区,开源系统助力内容创业新风口
  • Apache Impala为啥TBDS、华为MRS弃用?为什么不能做到无缝切换平缓迁移
  • 从开发到上线:智能Agent的Docker部署全链路实践(含YAML模板)
  • 智能连接与自动化引擎的全能表单系统,重新定义数据收集与业务流程的协同
  • 如何彻底解决企业级数据流程编排难题:Apache DolphinScheduler完整指南
  • 深度学习框架生态竞争格局:从Stable Diffusion WebUI Forge看技术选型逻辑
  • better-sqlite3深度解析:Node.js数据库操作的性能革命
  • 终极AI平台wgai:零门槛构建国产化智能识别系统
  • 基于VUE的企业协同管理系统 [VUE]-计算机毕业设计源码+LW文档
  • 如何快速使用bandcamp-dl:命令行音乐下载工具的完整教程