跳到主要内容

推理

对一张图跑推理。连续帧循环调用。阻塞调用,耗时随 Provider / 硬件而定,不承诺硬实时。

推理

InferImage(byte[] imageBytes, in ImageDesc desc)

public string InferImage(byte[] imageBytes, in ImageDesc desc)
public string InferImage(ReadOnlySpan<byte> imageBytes, in ImageDesc desc)

对一张图片跑推理,结果 JSON。byte[] 重载转给 ReadOnlySpan<byte>。每次一张图;连续帧循环调用。

参数:

  • imageBytes (byte[] / ReadOnlySpan<byte>) — Auto / Encoded = 编码文件字节流(JPG / PNG / BMP);裸缓冲 = 像素内存,长度必须 ≥ stride * heightstride 为 0 时按紧凑宽度计:RGB888 / BGR888 = width * 3
  • desc (ImageDesc) — 图像描述。Auto / Encoded 时宽高 / stride 忽略(填 0)。Rgb888 / Bgr888 时宽高必填(>0)

返回值:

  • string — 结果 JSON。results 元素结构随 session.Task 变化:detect → box,classify → top-k,segment → 掩码。托管副本,无需释放
备注

同一会话可并发调用;Dispose 禁止与在飞推理并发。裸缓冲禁止 ImageDesc.Auto()(嗅探不出通道序)。

示例:

using var session = AiSession.Open("model.darmodel", keyPath: "model.darmkey");
byte[] jpg = File.ReadAllBytes("photo.jpg");
string json = session.InferImage(jpg, ImageDesc.Auto());
Console.WriteLine(json);
byte[] frame = GrabBgrFrame();
var desc = ImageDesc.Bgr888(width: 1920, height: 1080, stride: 0);
string results = session.InferImage(frame, desc);
foreach (byte[] frame in GrabFrames())
{
string json = session.InferImage(frame, ImageDesc.Bgr888(1920, 1080));
}