推理
快速开始
打开模型后调任一推理入口,成功读 Content.Items。
var r = ai.InferFile("a.jpg");
if (!r.IsSuccess) { Console.WriteLine(r.Message); return; }
Console.WriteLine(r.Content.Items.Count);
基础用法
InferFile()
AiResult<InferenceResult> InferFile(string imagePath, double[]? thresholds = null)
JPG/PNG/BMP 自动识别一行推理。失败读结果里的错误码。
参数:
imagePath(string) — 图像文件路径thresholds(double[]?) — 本次阈值。可选默认null= 用DefaultThresholds
示例:
var r = ai.InferFile("a.jpg");
Console.WriteLine(r.Content.Items.Count);
InferImage()
AiResult<InferenceResult> InferImage(byte[] imageBytes, ImageDesc desc, double[]? thresholds = null)
ImageDesc.Auto() 只自嗅探编码图,裸像素必须显式指定格式并填 Width/Height,失败读结果里的错误码。
参数:
imageBytes(byte[]) — 编码图或裸像素desc(ImageDesc) — 像素形态。工厂 Auto/Encoded/Rgb888(w,h,stride=0)。Bgr888/Gray8/Rgba8888thresholds(double[]?) — 本次阈值。可选默认null= 用DefaultThresholds
示例:
var r = ai.InferImage(photo, ImageDesc.Auto());
Console.WriteLine(r.Content.Items.Count);
Submit()
AiResult<ulong> Submit(byte[] image, ImageDesc? desc = null)
AiResult<ulong> Submit(string filePath)
异步投递一张图,立即返回票号(Content),配 Wait 取结果。失败读结果里的错误码。
参数:
image(byte[]) — 编码图或裸像素desc(ImageDesc?) — 像素形态。可选默认null自动filePath(string) — 图像文件路径(重载二)
示例:
var s = ai.Submit("a.jpg");
var r = ai.Wait(s.Content);
Wait()
AiResult<InferenceResult> Wait(ulong ticket)
按票号取结果,阻塞到出结果或超时。失败读结果里的错误码。
参数:
ticket(ulong) —Submit返回的票号
示例:
var r = ai.Wait(ticket);
Console.WriteLine(r.Content.Items.Count);
并发推理
空闲机实测(197,det.onnx,3 轮中位):
- 单任务基线:1×(约 0.2s)
- 池
Workers=2双投:两任务同时完成,各约 1–1.5 倍单任务 - 多实例 2–4 个:总吞吐约等于串行(0.88–0.94×) 并发收益随机器负载变化。
Submit·Wait 取票等结果
Submit 投一张图,马上回票号,不等结果。
Wait 拿票号换结果,阻塞到出结果或超时。
多线程可以一起投,投完挨个取。
var tickets = new List<ulong>();
foreach (var f in files)
tickets.Add(ai.Submit(f).Content);
foreach (var t in tickets)
{
var r = ai.Wait(t);
if (!r.IsSuccess) continue;
Console.WriteLine(r.Content.Items.Count);
}
多模型跨卡
各开各的,GpuId 指定用哪张卡。同卡多实例用 Weight 分活。
var det = new Model("det.darmodel");
det.Config.GpuId = 0;
det.Config.Workers = 2;
det.Open();
var cls = new Model("cls.onnx");
cls.Config.GpuId = 1;
cls.Config.Workers = 4;
cls.Open();
用完各自 Close()。