跳到主要内容

Python 用法

面向最终用户的 Python SDK 调用说明:装好依赖后打开模型、反复推理、关闭会话。

调用链​

标准链路是「一次打开,反复推理,退出关闭」:

Session.open 或 open_plain 打开会话 → infer_image 或 infer_image_result 推理若干次 → close 关闭(with 退出自动调用)。

from darra_ai import Session

with Session.open("model.darmodel") as s:
for jpg in frames:
print(s.infer_image(jpg))
  • Session.open 打开加密 .darmodel;Session.open_plain 打开明文 .onnx / .pdmodel,与 open 同一推理路径。
  • infer_image 返回结果 dict;要字段级访问用 infer_image_result,同一份结果解成结构化对象,不二次推理。
  • close 释放会话;写在 with 块里退出时自动 close。同一会话反复调 infer_image 即可,不必反复打开。
  • 加密模型首次在本机打开走激活码分流:try_open 返回 (session, info),info.needs_code 为真时收一次激活码再 try_activate。激活码只用于打开 / 激活,推理永不收码。
  • 失败抛 darra_ai.errors.DarraError 子类,带 code / message / hint,hint 可原样展示给最终用户;找不到原生库抛 DarraLoadError。
  • import darra_ai 只加载 Python 代码,不加载 native;第一次调会碰运行库的 API(open / infer_image / version)才加载 Core.dll。

前置依赖​

项目要求
Python3.10–3.13
cffi随 wheel 自带,不用另装
原生运行库wheel 自带 Core.dll(win_amd64)或 libCore.so,不用再拷
VC++ 运行库Visual C++ 2015-2022 Redistributable(x64)
推理 Provider环境管理器 / darra-env-setup 部署到 C:\DARRA\Runtime,SDK 不下载不安装
模型加密 .darmodel 或明文 .onnx / .pdmodel
操作系统Windows x64 / Linux x86_64 / Linux ARM64,macOS 不在 v1

找不到 Core.dll 或版本主次号对不上抛 DarraLoadError。可设环境变量 DARRA_AI_CORE_PATH 指向 Core.dll 文件或所在目录,覆盖默认查找。

安装​

PyPI 分发名 darra-ai,代码内导入名 darra_ai,两者是独立概念,不要混用。

pip install darra-ai

开发树(源码树 Darra.AI.Studio.SDK/Python/)安装:

pip install -e .

离线安装,把文件名换成手上实际的 whl:

pip install darra_ai-1.0.0-py3-none-win_amd64.whl

快速开始​

from darra_ai import Session

with Session.open("model.darmodel") as s:
jpg = open("photo.jpg", "rb").read()
print(s.infer_image(jpg))
  • 明文模型一行:with Session.open_plain("model.onnx") as s:,与 open 同一推理路径,明文无需授权。
  • 结构化结果一行:r = s.infer_image_result(jpg),同一份结果解成对象,不二次推理。
  • 运行时阈值一行:opt = SessionOptions(conf_threshold=0.25),打开时 Session.open_ex("model.darmodel", options=opt)。0 或不给 = 不覆盖。

按场景索引​

案例一句话能力
推理入门打开会话、推理一张图、关闭的最小调用链
视频连续推理相机逐帧进图,满队列丢最旧帧保最新画面
图片队列一次上百张进队列,容量与溢出策略由应用定
并行推理同模型多路并发,推理线程数独立可配
多模型并行多模型或多卡分槽,按 Weight 分并发槽份额

运行时与诊断见 Runtime,失败码与修复建议见 错误码。

设备池​

多张卡按每卡权重分活,不是插队。和同一张卡上的推理池不是一回事。 打开没成功:路径空抛 InternalError;文件不在、未激活、缺 Provider 抛 DarraError 子类;找不到库或运行库缺符号抛 DarraLoadError。不是关了再开。

from darra_ai import DevicePool
pool = DevicePool.open_plain("model.onnx")
ticket = pool.submit(jpg, gpu_device=-1)
pool.wait(ticket)
pool.close()