Server 接口说明
简介
下位机实现了一个基于 JSON-RPC 2.0 标准协议的轻量级服务端框架,通过网口实现 NB 文件的上传、推理、删除、查询等功能。
编译和使用
获取源码
下载下位机源码:pnna 项目 的 examples/jsonrpc_server 目录。
编译配置
编译工具和相关库请参考 jsonrpc_server 目录下的说明文档
网络配置
设备 |
IP 地址 |
|---|---|
板卡 |
|
电脑 |
|
启动服务
将编译生成的可执行文件 server 传输到板卡,执行:
1./server
通信基础信息
项目 |
配置 |
|---|---|
通信协议 |
WebSocket |
连接地址 |
|
数据格式 |
JSON-RPC 2.0 |
JSON-RPC 请求格式
所有请求需符合以下 JSON 结构,通过 WebSocket 发送文本帧:
{
"jsonrpc": "2.0",
"method": "方法名",
"params": [],
"id": 1
}
字段 |
类型 |
说明 |
|---|---|---|
jsonrpc |
string |
JSON-RPC 版本,固定为 |
method |
string |
调用的方法名(如 |
params |
array |
方法参数列表 |
id |
int |
请求 ID,用于匹配响应 |
核心 API 详情
1. 加载模型
加载 Base64 编码的模型文件(.nb 格式),并注册推理方法。
请求:
参数 |
类型 |
说明 |
|---|---|---|
params[0] |
string |
Base64 编码的模型文件数据 |
params[1] |
string |
注册的推理方法名 |
请求示例:
{
"jsonrpc": "2.0",
"method": "add_model",
"params": ["nbfile", "infer_method"],
"id": 1
}
成功响应:
{
"jsonrpc": "2.0",
"id": 1,
"result": "Method 'infer_method' added"
}
失败响应:
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": 500,
"message": "model_add_failed"
}
}
失败原因: 模型文件解码失败、模型上下文创建失败。
2. 模型推理
调用已注册的模型执行推理,返回结果与推理耗时。
请求:
参数 |
类型 |
说明 |
|---|---|---|
method |
string |
已注册的推理方法名 |
params |
array |
Base64 编码的输入数据(数量等于模型输入节点数) |
请求示例:
{
"jsonrpc": "2.0",
"method": "infer_method",
"params": ["image1", "image2"],
"id": 1
}
成功响应:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"tensor": ["output1", "output2"],
"infer_time": "12.345678 ms"
}
}
失败响应:
内存分配失败:
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": 500,
"message": "malloc input_tensor failed"
}
}
推理执行失败:
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": 500,
"message": "Inference failed"
}
}
3. 删除模型
删除已注册的模型,释放资源。
请求:
参数 |
类型 |
说明 |
|---|---|---|
params[0] |
string |
已注册的推理方法名 |
请求示例:
{
"jsonrpc": "2.0",
"method": "delete_model",
"params": ["infer_method"],
"id": 1
}
成功响应:
{
"jsonrpc": "2.0",
"id": 1,
"result": "Model 'infer_method' deleted"
}
注:若方法名不存在,仍返回成功。
4. 查询已注册方法
返回所有已注册的 JSON-RPC 方法列表。
请求:
{
"jsonrpc": "2.0",
"method": "rpc.list",
"params": [],
"id": 1
}
成功响应:
{
"jsonrpc": "2.0",
"id": 1,
"result": [
"add_model",
"delete_model",
"infer_method",
"rpc.list"
]
}
API 汇总
方法 |
功能 |
参数 |
|---|---|---|
|
加载模型 |
nb_file, method_name |
|
执行推理 |
input_data... |
|
删除模型 |
method_name |
|
查询方法列表 |
无 |
作者:ougaoliang