跳到主要内容

API

会话元信息与释放。全部来自容器头或明文探测,用户零配置。头里缺的字段派生 JSON 里为 null / 缺席,不编默认 640/80/17。

打开见 构造。每帧推理见 推理

功能概览

类别属性类型访问说明
元信息metaResult<String, Error>方法会话元信息 UTF-8 JSON。微秒级
meta_jsonResult<Value, Error>方法同 meta,feature json 下解析为 serde_json::Value
只读(从 meta 派生)taskResult<Option<String>, Error>只读任务短名。缺席为 None
labelsResult<Vec<String>, Error>只读类别标签。缺席为空 Vec
input_widthResult<u32, Error>只读模型输入宽。未知为 0
input_heightResult<u32, Error>只读模型输入高。未知为 0
channelsResult<u32, Error>只读模型输入通道。未知为 0
layoutResult<Option<String>, Error>只读张量布局。先读 input.layout,再读顶层 layout
payload_kindResult<Option<String>, Error>只读载荷类型。含 paddle。Windows 上 rknn 打不开
provider_idResult<Option<String>, Error>只读实际选中的 Provider,不是 prefer 入参
encryptedResult<bool, Error>只读是否加密容器会话。明文模型为 false
释放Drop()释放离开作用域调用 darra_session_close。Session 不可 Clone

元信息

meta()

pub fn meta(&self) -> Result<String, Error>

读会话元信息 JSON。调用代价:读会话缓存的头信息,微秒级。

返回值:

  • Result<String, Error> — UTF-8 JSON 字符串

示例:

let json = session.meta()?;
eprintln!("[meta] {json}");

meta_json()

#[cfg(feature = "json")]
pub fn meta_json(&self) -> Result<serde_json::Value, Error>

meta,feature json 下解析为 serde_json::Value。默认 feature 已打开 json

返回值:

  • Result<serde_json::Value, Error> — 解析后的 JSON 值

只读属性

全部从 meta JSON 派生,每次调用会再读一次 meta(再解析)。

task()

pub fn task(&self) -> Result<Option<String>, Error>

任务短名:detect / classify / segment / pose / ocr / anomaly。缺席为 None

返回值:

  • Result<Option<String>, Error> — 有则 Some,缺席 None

labels()

pub fn labels(&self) -> Result<Vec<String>, Error>

类别标签列表。缺席为空 Vec

返回值:

  • Result<Vec<String>, Error> — 标签;缺席为空

input_width()

pub fn input_width(&self) -> Result<u32, Error>

模型输入宽。未知为 0(容器头未写,不编默认 640)。

返回值:

  • Result<u32, Error> — 宽;未知为 0

input_height()

pub fn input_height(&self) -> Result<u32, Error>

模型输入高。未知为 0

返回值:

  • Result<u32, Error> — 高;未知为 0

channels()

pub fn channels(&self) -> Result<u32, Error>

模型输入通道数。未知为 0

返回值:

  • Result<u32, Error> — 通道;未知为 0

layout()

pub fn layout(&self) -> Result<Option<String>, Error>

张量布局(如 NCHW / NHWC)。先读 input.layout,再读顶层 layout。缺席为 None

返回值:

  • Result<Option<String>, Error> — 有则 Some,缺席 None

payload_kind()

pub fn payload_kind(&self) -> Result<Option<String>, Error>

载荷类型。可能为 onnx / trt-engine / openvino / paddle / rknn。缺席为 None

Paddle 是运行时载荷paddle)。Windows 上 rknn 载荷打不开UnsupportedPayload),本属性只在会话已成功打开后可读。

返回值:

  • Result<Option<String>, Error> — 有则 Some,缺席 None

provider_id()

pub fn provider_id(&self) -> Result<Option<String>, Error>

实际选中的 Provider ID(不是 prefer_provider 入参)。缺席为 None

返回值:

  • Result<Option<String>, Error> — 有则 Some,缺席 None

encrypted()

pub fn encrypted(&self) -> Result<bool, Error>

是否加密容器会话。明文模型为 false

返回值:

  • Result<bool, Error> — 加密容器为 true,明文为 false

示例:

let _ = session.task()?;
let _ = session.provider_id()?;
let _ = session.encrypted()?;
let _ = session.payload_kind()?;

释放

Drop

Session 离开作用域时调用 darra_session_close(NULL 安全)。close 后句柄失效。禁止与任何在飞调用并发——安全 Rust 借用检查保证 Drop 时没有未完成的 &self 方法;Arc<Session> 则等最后一个引用释放才 DropSession 不可 Clone,没有第二份裸句柄可在 close 后继续用。

示例:

{
let session = Session::open("model.darmodel", Some("model.darmkey"), None, None)?;
let _ = session.infer_image(&jpeg, &darra_ai::ImageDesc::auto())?;
} // 此处 Drop → close