会话 AiSession
推理会话。对应 darra_session_*,实现 AutoCloseable,支持 try-with-resources。
全部推理唯一入口:open / openPlain → inferImage → close。GUI、PLC、客户应用同一路径,无第二套。
AiSession // 推理会话(AutoCloseable)
│
├── open / openPlain / openEx // 静态工厂 → 初始化
├── metaJson / task / labels / inputWidth / … // 只读元信息
├── inferImage // 每次一张图;循环帧
└── close // 释放;NULL/重复关闭安全
一模型一实例
一个 AiSession = 一份已加载模型 + 一个 Provider。多模型 = 多会话;同模型要第二份实例也 = 再开一个会话。API 完全相同,没有「多模型特供」入口。
打开时按 PayloadKind × 硬件 × preferProvider 选 Provider;对应包未装则内部调一次 darra_runtime_ensure(无进度回调,可能阻塞下载)。指名但不可用(无硬件 / 驱动过旧 / 平台不支持)= fail-closed,绝不静默降级。
Windows 收到 rknn 载荷抛 AiException.UnsupportedPayloadException。Windows 上指名 edge-rknn 抛 AiException.UnsupportedPlatformException。禁止改 Windows ReservedCpuSets,禁止动 PLC 隔离核。
Paddle 是运行时载荷(PayloadKind=paddle):明文 openPlain 可接 .pdmodel(同目录须有对应 .pdiparams)或含二者的目录。.pt / .pth 仍拒。
本绑定没有 openPlainEx。openEx 当前翻译到 open,只走 SessionOptions 已公开的三个通道。
功能概览
| 类别 | 属性 | 类型 | 访问 | 说明 |
|---|---|---|---|---|
| 打开 | open | AiSession | 静态 | 打开加密容器(.darmodel,DARM1)。key 与 password 至少给一个 |
openPlain | AiSession | 静态 | 打开明文模型。Paddle 是运行时载荷;.pt / .pth 仍拒 | |
openEx | AiSession | 静态 | 打开加密容器并传入 SessionOptions。options 为 null = empty() | |
| 元信息 | metaJson | String | 方法 | 会话元信息 JSON。首次向 native 取一次并缓存;Java 侧拷贝 |
task | String | 只读 | 任务短名。缺席为 null | |
labels | List<String> | 只读 | 类别标签。缺席为空列表,永不 null | |
inputWidth / inputHeight / channels | int | 只读 | 模型输入尺寸。0 = 容器头未写 / 未知。不编默认 640 | |
layout | String | 只读 | 张量布局。缺席为 null,不编 NCHW | |
payloadKind | String | 只读 | onnx / trt-engine / openvino / rknn / paddle。缺席为 null | |
providerId | String | 只读 | 实际选中的 Provider。缺席为 null | |
encrypted | boolean | 只读 | 是否加密容器会话。明文会话为 false | |
| 推理 / 生命周期 | inferImage | String | 方法 | 每次调用处理一张图,结果 JSON。相机/视频按帧循环调用 |
close | void | 释放 | 关闭会话并释放全部资源。NULL/重复关闭安全。禁止与在飞调用并发 |
快速开始
try (AiSession s = AiSession.open("model.darmodel", "model.darmkey", null, null)) {
System.out.println(s.metaJson());
byte[] jpg = java.nio.file.Files.readAllBytes(java.nio.file.Path.of("photo.jpg"));
String json = s.inferImage(jpg, ImageDesc.auto());
}