C# 用法
面向最终用户的 C# SDK 用法:装上、打开模型、反复推理、关闭。命名空间 Darra.AI.Runtime。
调用链
一条链走到底:打开会话 → 反复推理 → 关闭。打开成本只付一次,之后每帧只调 InferImage,不要每张图重新打开。
| 步骤 | 入口 | 说明 |
|---|---|---|
| 打开 | AiSession.Open / OpenPlain | Open 开 .darmodel 加密包,OpenPlain 开明文模型 |
| 推理 | InferImage | 每次一张图,返回结果 JSON;同一会话反复调用 |
| 关闭 | Dispose | using 结束自动释放,重复 Dispose 安全 |
加密模型按激活码分流:TryOpen / Probe 问一次激活状态,NeedsCode 为真时向用户收一次激活码,调 TryActivate / Activate 后复用会话;推理阶段永不收码。AiException 只透传给应用,SDK 不弹窗,是否展示 Message 与 Hint 由应用决定。
前置依赖
| 项目 | 要求 |
|---|---|
| 目标框架 | net8.0 |
| 原生库 | nupkg 必须带 runtimes/win-x64/native/Core.dll;缺 native 只能编译引用,推理起不来 |
| 原生库路径 | 可选环境变量 DARRA_AI_CORE_PATH 指向库文件或其所在目录 |
| Provider | 由应用或 AI Studio 环境管理器事先部署;SDK 不下载不安装 |
| 进程 | x64 |
| 平台 | Windows x64 为交付重点;macOS 不在 v1 |
安装
公共 NuGet 尚无此包。把收到的 Darra.AI.Runtime.1.0.0.nupkg 放进本地 packages 目录再装:
dotnet add package Darra.AI.Runtime --version 1.0.0 --source ./packages
或直接引用 DLL:从 下载 取 Darra.AI.Runtime.dll 与 Darra.AI.Runtime.xml,在 csproj 加 Reference 指向 DLL;XML 与 DLL 同目录可获得完整 IntelliSense。Core.dll 随应用一起交付。
快速开始
using Darra.AI.Runtime;
using AiSession session = AiSession.OpenPlain("model.onnx", preferProvider: "onnx-cpu");
byte[] photo = File.ReadAllBytes("photo.jpg");
string json = session.InferImage(photo, ImageDesc.Auto());
Console.WriteLine(json);
加密模型:TryOpen 未激活时,用 TryActivate 或 Activate 收一次激活码再推理,之后每张图只调 InferImage。
按场景索引
| 场景 | 一句话能力 |
|---|---|
| 推理入门 | 打开会话、推理一张图、关闭的最小调用链 |
| 视频连续推理 | 相机逐帧进图,满队列丢最旧帧保最新画面 |
| 图片队列 | 一次上百张进队列,容量与溢出策略由应用定 |
| 并行推理 | 同模型多路并发,推理线程数独立可配 |
| 多模型并行 | 多模型或多卡分槽,按 Weight 分并发槽份额 |
设备池
多张卡按每卡权重分活,不是插队。和同一张卡上的推理池不是一回事。 打开没成功:路径空抛 ArgumentException;文件不在、未激活、缺 Provider 抛 AiException;运行库缺符号是 EntryPointNotFoundException,库加载失败是 AiLoadException。不是关了再开。
AiDevicePool pool = AiDevicePool.OpenPlain("model.onnx");
ulong ticket = pool.Submit(photo, ImageDesc.Auto(), -1);
string json = pool.Wait(ticket);
pool.Dispose();