news 2026/4/19 4:36:08

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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即可查看仓库地址。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 18:31:03

DETR3D:基于 3D-to-2D 查询的多视图 3D 目标检测框架

在低成本自动驾驶系统中,基于视觉信息的 3D 目标检测是一项长期存在的挑战性任务。与依赖激光雷达(LiDAR)点云的 3D 目标检测方法不同,基于相机的 3D 目标检测需仅从 RGB 图像包含的 2D 信息中生成 3D 边界框预测,该问…

作者头像 李华
网站建设 2026/4/10 16:09:13

LX洛雪音源:全网最新音乐资源一站式解决方案

LX洛雪音源:全网最新音乐资源一站式解决方案 【免费下载链接】LXMusic音源 lxmusic(洛雪音乐)全网最新最全音源 项目地址: https://gitcode.com/guoyue2010/lxmusic- 想要畅享海量音乐却苦于找不到优质音源?LX洛雪音源为你…

作者头像 李华
网站建设 2026/4/18 9:46:03

从零到一:CVAT计算机视觉标注工具全面入门指南

从零到一:CVAT计算机视觉标注工具全面入门指南 【免费下载链接】cvat Annotate better with CVAT, the industry-leading data engine for machine learning. Used and trusted by teams at any scale, for data of any scale. 项目地址: https://gitcode.com/gh_…

作者头像 李华
网站建设 2026/4/18 18:38:44

MiMo-V2-Flash

先上代码,后边的是ai介绍的 感兴趣可以看 目前2周免费,使劲噔,不要设置奇怪的prompt,会提示说高危险的不让访问😂 官方地址:https://github.com/XiaomiMiMo/MiMo-V2-Flash 平台地址:https://platform.xiaomimimo.com/#/docs/welcome 申请apt-key的地…

作者头像 李华
网站建设 2026/4/18 1:12:32

实现 Promise A+ 规范的 Promise

前言之前找工作的时候凭感觉做了一个实现 Promise A 规范的 Promise的练习,最近在准备新的工作机会,又看到了这个面试题。我感觉之前的实现有很大优化空间。之前用前次调用结果作为标记来实现 Promise 多次 resolve 和 reject 触发的正确逻辑&#xff0c…

作者头像 李华
网站建设 2026/4/14 10:30:31

ControlNet++实战宝典:多条件AI图像生成从入门到精通

想要让AI图像生成真正"听话"吗?ControlNet作为当前最先进的多条件控制技术,能够让你像导演一样精准指导AI创作。无论是人物姿态、场景结构还是艺术风格,都能通过简单的控制图实现完美呈现。本文将带你从零开始,掌握Cont…

作者头像 李华