会话
一个 darra_session* = 一份已加载模型 + 一个 Provider。C++ 与 C 共用同一份 C ABI,函数仍是 darra_ai.h 导出。
darra_session_open / open_plain / *_ex
│
├── darra_session_meta_json
├── darra_session_infer_image 每次一张图,循环喂帧
└── darra_session_close
打开时按 PayloadKind × 硬件 × prefer_provider 选 Provider;对应包未装则内部调一次 darra_runtime_ensure(cb = nullptr,可能阻塞下载)。指名但不可用(无硬件 / 驱动过旧 / 平台不支持)= fail-closed,绝不静默降级。
Windows 收到 rknn 载荷返回 DARRA_UNSUPPORTED_PAYLOAD。禁止改 Windows ReservedCpuSets,禁止动 PLC 隔离核——darra_session_options 只约束本会话推理线程池。
Paddle 是运行时载荷(PayloadKind = paddle):明文 open_plain / open_plain_ex 可接 .pdmodel(同目录须有 .pdiparams)或含二者的目录。.pt / .pth 仍拒。
功能概览
| 类别 | 属性 | 类型 | 访问 | 说明 |
|---|---|---|---|---|
| 打开 | darra_session_open | int32_t | 过程 | 打开 .darmodel 建会话(options = nullptr) |
darra_session_open_plain | int32_t | 过程 | 打开明文模型建会话(options = nullptr);含 Paddle | |
darra_session_open_ex | int32_t | 过程 | 打开 .darmodel,带 darra_session_options | |
darra_session_open_plain_ex | int32_t | 过程 | 打开明文模型,带 darra_session_options | |
| 元信息 | darra_session_meta_json | int32_t | 查询 | 会话元信息 JSON;用完 darra_string_free |
| 推理 | darra_session_infer_image | int32_t | 过程 | 每次一张图(循环帧),结果 JSON |
| 关闭 | darra_session_close | void | 释放 | 关闭会话;nullptr 安全;禁止与在飞调用并发 |
多模型或多份同模型 = 多会话,API 完全相同。第一次 open 才有打开成本;之后每帧反复 infer,不要每张图重新打开。
快速开始
#include "darra_ai.h"
darra_session* session = nullptr;
int32_t rc = darra_session_open("model.darmodel", "model.darmkey",
nullptr, nullptr, &session);
if (rc != DARRA_OK) {
darra_error_t err{};
err.size = sizeof(err);
darra_last_error(&err);
return static_cast<int>(rc);
}
darra_session_close(session);