Session
一份已验票 / 已解密的模型 + 一个已选定的运行时 Provider。全部推理唯一入口;GUI、PLC、客户应用同一路径,无第二套。
一模型一实例:一个 Session = 一份已加载模型 + 一个 Provider。多模型或多份同模型 = 多会话,API 完全相同。本绑定没有「模型组 / 全局引擎」。
打开时按 PayloadKind × 硬件 × prefer_provider 选 Provider;对应包未装则内部调一次 runtime.ensure(无进度回调,可能阻塞下载)。指名但不可用(无硬件 / 驱动过旧 / 平台不支持)= fail-closed,绝不静默降级。
Windows 收到 rknn 载荷抛 UnsupportedPayloadError。edge-rknn 只在 linux-arm64。Windows 上指名它抛 UnsupportedPlatformError。禁止改 Windows ReservedCpuSets,禁止动 PLC 隔离核。
Paddle 是运行时载荷(payload_kind=paddle):明文 open_plain 可接 .pdmodel(同目录须有 .pdiparams)或含二者的目录。.pt / .pth 仍拒 → UnsupportedPayloadError。
本绑定没有 open_plain_ex。open_ex 当前翻译到 open,不调 darra_session_open_ex。SessionOptions 只有 key_path / password / prefer_provider。
功能概览
| 类别 | 属性 | 类型 | 访问 | 说明 |
|---|---|---|---|---|
| 打开 | Session.open | Session | 类方法 | 打开已签发容器 .darmodel(DARM1) |
Session.open_plain | Session | 类方法 | 打开明文模型(.onnx / .pdmodel)。与 open 同一推理路径,只跳过容器解码与验票 | |
Session.open_ex | Session | 类方法 | 可扩展入口。当前翻译到 open | |
| 元信息 | meta() | dict | 方法 | 会话元信息 JSON 对象(有缓存) |
task | str | None | 只读 | detect / classify / segment / pose / ocr / anomaly。缺席为 None | |
labels | list[str] | 只读 | 类别标签。缺席或非数组则为空列表 | |
input_width | int | 只读 | 模型输入宽。未知为 0 | |
input_height | int | 只读 | 模型输入高。未知为 0 | |
channels | int | 只读 | 模型输入通道数。未知为 0 | |
layout | str | None | 只读 | 张量布局。先读 input.layout,再读顶层 layout | |
payload_kind | str | None | 只读 | onnx / trt-engine / openvino / rknn / paddle | |
provider_id | str | None | 只读 | 实际选中的 Provider ID(不是 prefer 入参) | |
encrypted | bool | 只读 | 是否容器会话。明文模型为 False | |
| 推理 | infer_image | dict | 方法 | 对一张图(一帧)跑推理。连续帧循环调用 |
| 生命周期 | close | None | 方法 | 关闭会话并释放全部资源。重复 close / 未打开均为 no-op |
__enter__ / __exit__ | Session | 方法 | 上下文管理器;退出 with 块时自动 close() |
只读属性全部从 meta() 派生。头里缺的字段为 None / 0 / 空列表,不编默认 640/80/17。标准字段表见 元数据。