跳到主要内容

视频连续推理

会话只开一次。每一帧调用一次 InferImage。不要每帧 Open

SDK 没有视频流 API。相机 / 解码器由调用方提供像素或 JPG/PNG/BMP 字节。

备注

InferImage 阻塞,不承诺硬实时。PLC 扫描周期外线程调用。

完整示例

下面用占位 GrabBgrFrame 代表工业相机一帧(BGR888 紧凑)。换成 OpenCV / DirectShow / 你们自己的采集即可。

using Darra.AI.Runtime;

AiRuntime.Ensure("cpu-only");

using var session = AiSession.Open("line.darmodel", keyPath: "line.darmkey");

while (TryGrab(out byte[] frame, out uint width, out uint height))
{
var desc = ImageDesc.Bgr888(width, height, stride: 0);
string json = session.InferImage(frame, desc);
HandleResult(json);
}

TryGrab 返回 false 时结束循环,然后 using 关闭会话。

编码帧

若采集端已经是 JPG:

byte[] jpg = GrabJpeg();
string json = session.InferImage(jpg, ImageDesc.Auto());

裸缓冲禁止 ImageDesc.Auto()(嗅探不出通道序)。

要点

  • 第一次 Open 才有打开成本(含内部 Ensure)。
  • 连续帧不要重新打开。
  • 同一会话可以并发 InferImage;视频一路通常单线程循环即可。
  • Dispose / Close 必须等本路循环退出。