跳到主要内容

类型

crate darra-ai 对外导出的值类型。错误枚举见 错误处理;会话见 Session

use darra_ai::{Error, ImageDesc, ImageFormat, Session, SessionOptions};
类别属性类型访问说明
图像ImageFormatenum类型Auto / Encoded / Rgb888 / Bgr888。裸缓冲禁止 Auto
ImageDescstruct类型图像描述。调用 infer_image 时绑定自动填 FFI size
ImageDesc::formatImageFormat字段图像输入格式。Auto/Encoded 时 width/height/stride 忽略(填 0)
ImageDesc::widthu32字段裸缓冲宽。Rgb888/Bgr888 时必填(>0)
ImageDesc::heightu32字段裸缓冲高。Rgb888/Bgr888 时必填(>0)
ImageDesc::strideu32字段每行字节数。0 = 紧凑排列(Rgb888/Bgr888 = width×3)
会话选项SessionOptionsstruct类型open_ex 的可扩展选项。构造本对象不加载 native
SessionOptions::key_pathOption<String>字段.darmkey 路径;None = 走密码/试用通道
SessionOptions::passwordOption<String>字段永久密码;None = 走授权文件/试用通道
SessionOptions::prefer_providerOption<String>字段指名 Provider;None = 自动选。指名但不可用 = fail-closed

图像

ImageFormat

图像输入格式。本绑定目前露出四个值。头文件另有 GRAY8 / RGBA8888,Rust 枚举尚未露出。

#[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[repr(i32)]
pub enum ImageFormat {
Auto = 0, // 按字节魔数自嗅探编码格式(JPG/PNG/BMP)。裸缓冲禁止用 Auto
Encoded = 1, // 显式声明为已编码字节流(JPG/PNG/BMP);行为同 Auto
Rgb888 = 2, // 裸缓冲,RGB 三通道 8bit,须给宽高
Bgr888 = 3, // 裸缓冲,BGR 三通道 8bit,须给宽高
}

每次 infer_image 处理一张图(一帧)。连续采集循环调用。

ImageDesc

对应 C ABI darra_image_desc。调用 infer_image 时绑定自动填 size = sizeof(darra_image_desc),用户侧不必碰 FFI。

#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct ImageDesc {
pub format: ImageFormat,
pub width: u32,
pub height: u32,
pub stride: u32, // 每行字节数;0 = 紧凑排列(width * 3)
}

相关结构: 构造函数

impl ImageDesc {
pub fn auto() -> Self;
pub fn rgb888(width: u32, height: u32, stride: u32) -> Self;
pub fn bgr888(width: u32, height: u32, stride: u32) -> Self;
}
  • auto() — 编码字节流(JPG/PNG/BMP),自嗅探。width/height/stride = 0
  • rgb888(w, h, stride) — 裸 RGB888。stride = 0 表示紧凑(= w × 3
  • bgr888(w, h, stride) — 裸 BGR888(工业相机常见)

没有 encoded() 关联函数;需要显式 Encoded 时用结构体字面量:

use darra_ai::{ImageDesc, ImageFormat};

let encoded = ImageDesc {
format: ImageFormat::Encoded,
width: 0,
height: 0,
stride: 0,
};

Rgb888 / Bgr888width / height 必填(>0);缺宽高 = Error::Internal(调用方 bug,不崩溃)。裸缓冲禁止 Auto(嗅探不出通道序)。

用法见 推理

会话选项

SessionOptions

开会话的可扩展选项(对齐 C# SessionOptions)。字段对应 darra_session_open 的可选通道。当前没有 Core darra_session_optionsintra_op_threads / inter_op_threads / cpu_affinity_mask

#[derive(Clone, Debug, Default, PartialEq, Eq)]
pub struct SessionOptions {
pub key_path: Option<String>,
pub password: Option<String>,
pub prefer_provider: Option<String>,
}

相关结构: 构造与链式 setter

impl SessionOptions {
pub fn new() -> Self; // 全部可选通道为空
pub fn key_path(self, v: impl Into<String>) -> Self;
pub fn password(self, v: impl Into<String>) -> Self;
pub fn prefer_provider(self, v: impl Into<String>) -> Self;
}

示例:

use darra_ai::SessionOptions;

let opt = SessionOptions::new()
.key_path("model.darmkey")
.prefer_provider("onnx-cpu");

prefer_provider 合法 ID 见 ensure · 合法 IDWindows 上不要指名 edge-rknnError::UnsupportedPlatform)。两个授权通道至少给一个;都给则 key 文件优先验票。

用法见 Session::open_ex

Session 是不透明 RAII 句柄,不可 CloneSend + Sync,详见 SessionError#[non_exhaustive] 枚举,详见 错误处理