视频连续推理
会话只开一次。每一帧调用一次 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必须等本路循环退出。