创建实例
方法
darra_model_create()
DARRA_API int32_t darra_model_create(const char* model_path,
const darra_model_config* cfg_or_null,
darra_model** out);
创建句柄,记下模型路径和配置并加载元信息。
参数:
model_path(const char*) — 模型文件路径cfg_or_null(const darra_model_config*) — 配置。传 NULL 表示全部用默认值out(darra_model**) — 成功时写入句柄。失败时置为 NULL
示例:
darra_model_config cfg = {0}; /* 零初始化:全部 0/NULL 就是用默认值 */
darra_model* m = NULL;
if (darra_model_create("model.darmodel", &cfg, &m) != 0) {
/* create 失败时没有句柄,直接结束 */
return -1;
}
darra_model_open()
DARRA_API int darra_model_open(darra_model* h, const char* password_or_null);
打开模型,把模型真正加载进来,在 create 之后、infer 之前调用。返回 1 表示成功、0 表示失败,失败详情用 darra_model_last_error 查。
参数:
h(darra_model*) — create 得到的句柄password_or_null(const char*) — 密码。传 NULL 或空字符串表示不用密码
示例:
if (!darra_model_open(m, "密码")) {
printf("open failed: %s\n", darra_model_last_error(m));
darra_model_close(m); /* 打开失败,直接释放句柄收场 */
}
darra_model_close()
DARRA_API int32_t darra_model_close(darra_model* m);
关闭模型并释放句柄。传 NULL 不会崩溃,重复调用也安全。
参数:
m(darra_model*) — 句柄。传 NULL 不会崩溃
示例:
darra_model_close(m);
m = NULL; /* 句柄已释放,置 NULL 防止误用 */
darra_model_cancel()
DARRA_API int32_t darra_model_cancel(darra_model* m);
尝试取消正在执行的推理。池模式(workers>1)没有逐个取消,这时取消调用会失败。
参数:
m(darra_model*) — 已 open 的句柄
示例:
int32_t rc = darra_model_cancel(m); /* 尝试打断当前推理 */
装入类别名
结果条目缺 label 字段时,按 class_id 从类别名表取名字来显示。
darra_model_set_labels()
DARRA_API int32_t darra_model_set_labels(darra_model* h,
const char* const* labels,
size_t count);
往句柄里注入一张类别名表,随时可调,open 后生效。
参数:
h(darra_model*) — 模型句柄labels(const char* const*) — UTF-8 非空字符串数组count(size_t) — 传 0 表示清空
示例:
const char* labels[2] = { "OK", "NG" };
int32_t rc = darra_model_set_labels(h, labels, 2);
darra_model_clear_labels()
DARRA_API int32_t darra_model_clear_labels(darra_model* h);
清空注入的类别名表,回到模型自带的类别名。随时可调,open 后生效。
示例:
int32_t rc = darra_model_clear_labels(h);
加密模型的密码
加密模型在 open 时把口令凭据传进去。
加载结果
| 结果 | 判据 | 含义 |
|---|---|---|
| 试用 | trial = 1 | 按试用条款使用,有次数或期限限制 |
| 绑定 | machine_binding = NONE | 首次凭据校验通过后绑定到本机,绑定完就能用 |
| 已绑定 | machine_binding = HERE | 这台机器已经绑定过,直接用 |
| 未通过 | error_code 非 0 | 会明确报错,不会静默失败 |
试用剩余次数用 trial_remaining 读取。绑定完成后再次打开时 password_or_null 传 NULL 就行。
示例:
darra_unlock_info ui = {0}; ui.size = sizeof(ui);
darra_unlock_get_info("model.darmodel", &ui);
if (ui.state == DARRA_UNLOCK_READY) /* 已绑定 */
darra_session_open_ex("model.darmodel", NULL, NULL, NULL, NULL, &h);
else {
/* password_or_null = 口令凭据;绑定和试用状态由 SDK 内部判定 */
rc = darra_session_open_ex("model.darmodel", NULL, code, NULL, NULL, &h);
}
推理与释放
推理结果的 JSON 是在堆上分配的字符串:
char* json = NULL;
int32_t rc = darra_model_infer_file(h, "a.jpg", &json);
if (rc == 0) { printf("%s\n", json); darra_string_free(json); }
darra_model_close(h); /* 会话用 darra_session_close(s) */
- SDK 返回的堆上字符串一律用
darra_string_free释放。禁止用free/delete[]。调用方自己malloc的自己free。 darra_model_close/darra_session_close之后句柄就失效了。传NULL关闭不会崩。要等正在执行的推理结束再关。