C#调用ONNX:python转C++转C#界面流程

  1. python部分(检测模型的代码函数)Python到处ONNX模型

假设python代码脚本是对一张图片进行处理,接受一张图片路径,返回检测后的图片路径(Base64编码)

Python的代码:

import torch

from ultralytics import YOLO

# 载入模型

model = YOLO("your_model.pt")

# 随机输入 (batch=1, channels=3, 640x640)

dummy_input = torch.randn(1, 3, 640, 640)

# 导出到 ONNX

torch.onnx.export(

    model.model,

    dummy_input,

    "model.onnx",

    opset_version=12,

    input_names=["images"],

    output_names=["output"],

    dynamic_axes={"images": {0: "batch"}, "output": {0: "batch"}}

)

print("✅ 模型已导出:model.onnx")

  1. C++使用ONNXRuntime进行推理

在VS2022项目中,新建项目:

跑通 ONNX 推理:

选择:

  • 控制台应用程序(Console Application)
  • 语言:C++
  • 平台:x64

这是最简单的模板,方便先写代码测试模型是否能跑。(VS2022 → C++ → 控制台应用程序(Console Application))


后续做成 DLL 给 C# 调用:

选择:

  • 动态链接库(Dynamic-Link Library)
  • 语言:C++
  • 平台:x64

然后:

  • 导出一个 extern "C" 的函数供 C# 调用
  • 在 DLL 中完成 ONNXRuntime 加载、检测、绘制检测结果

  (1)先用 Console Application

  • 写 ONNXRuntime + OpenCV 测试代码
  • 确认推理结果、检测框绘制都正确

  (2)再新建 DLL 项目

  • 把测试代码封装成函数
  • 用 [DllImport] 在 C# 里调用

VS2022项目属性配置:OpenCV配置

VS2022 属性页配置截图(包含目录、库目录、依赖项)

  1. C++的动态链接库(DLL)

1·  打开 VS2022 → 新建项目

2·  选择 C++ → 动态链接库(DLL)

3·  平台选 x64

4.在C#作为UI界面调用DLL

  C++ DLL 内部完成 ONNXRuntime 推理

  C# 界面直接调用检测函数,不用管理 OpenCV/ONNX 细节

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐