server 接口说明
简介
下位机实现了一个基于 JSON-RPC 2.0 标准协议的轻量级服务端框架。 实现通过网口进行nb文件的上传、推理、删除、查询等功能。
编译和使用
下载下位机源码。下位机源码路径工程下的examples/jsonrpc_server下
编译工具和相关库请看jsonrpc_server的页面
将板子ip设置为
192.168.23.100,在电脑上添加192.168.23.132这个ip(与板子ip保持在同一网段)。将可执行文件为examples/jsonrpc_server下的server
传输到板子,在命令行输入
./server运行即可。
通信基础信息
通信协议:WebSocket
连接地址:
ws://192.168.23.100:8000/websocket,与板卡保持一致数据格式:JSON-RPC(远程过程调用协议,请求/响应均为JSON格式)
JSON-RPC请求通用格式
所有请求需符合以下JSON结构,通过WebSocket发送文本帧(WEBSOCKET_OP_TEXT):
{
"jsonrpc": "2.0", // JSON-RPC标准版本,固定为2.0
"method": "方法名", // 需调用的具体功能(如test、add_model)
"params": [ ], // 方法对应的参数列表(格式因方法而异)
"id": 1 // 请求ID(自定义整数,用于匹配响应与请求)
}
核心功能API详情
1. 加载模型
加载Base64编码的模型文件(.nb格式),并为该模型注册一个专属的推理方法(后续可通过该方法调用模型推理)。
请求参数
method:
add_modelparams:数组,包含2个元素: Base64编码的模型文件数据(
.nb模型二进制内容);字符串,为该模型注册的推理方法名(后续调用rpc_infer需使用此名称)。
请求示例
{
"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" } }
失败原因:模型文件解码失败、模型上下文创建失败(
create_app_ctx返回NULL)。
2. 模型推理
功能描述 调用通过
add_model注册的模型,输入Base64编码的图像数据,执行推理并返回Base64编码的张量结果与推理耗时。请求参数
method:通过
add_model注册的推理方法名(如infer_method);params:数组,元素数量等于模型输入节点数(
ctx->input_count),每个元素为Base64编码的图像数据(对应模型单个输入的二进制内容)。
请求示例
{ "jsonrpc": "2.0", "method": "infer_method", // 已注册的推理方法名 "params": [ "image1", "image2", "..." ], "id": 1 }
响应格式
成功响应:
{ "jsonrpc": "2.0", "id": 1, "result": { "tensor": [ "image1", "image2", "..." // 数量等于模型输出节点数 ], "infer_time": "12.345678 ms" // 推理耗时(毫秒级,保留6位小数) } }
失败响应:
内存分配失败:
{ "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. 删除模型
功能描述 删除已通过
add_model注册的模型,释放模型上下文资源与对应的推理方法,避免内存泄漏。请求参数
method:
delete_model;params:数组,仅1个元素,为通过
add_model注册的推理方法名。请求示例
{ "jsonrpc": "2.0", "method": "delete_model", "params": ["infer_method"], // 需删除的推理方法名 "id": 1 }
响应格式
成功响应:
{ "jsonrpc": "2.0", "id": 1, "result": "Model 'infer_method' deleted" }
说明:若指定的方法名不存在,仍返回成功(内部会跳过不存在的方法,不报错)。
4. 查询已注册的RPC方法列表
功能描述
返回当前系统中所有已注册的JSON-RPC方法(包括系统方法与用户通过add_model注册的推理方法)。
请求参数
method:
rpc.list;params:无(空数组
[])。
请求示例
{ "jsonrpc": "2.0", "method": "rpc.list", "params": [], "id": 1 }
响应格式
成功响应:
{ "jsonrpc": "2.0", "id": 1, "result": [ "add_model", // 系统加载模型方法 "delete_model", // 系统删除模型方法 "infer_method" // 用户注册的推理方法(若存在) "rpc.list", // 系统方法列表查询方法 ] }
说明:
result为字符串数组,包含所有可用的RPC方法名。
作者 @ogl ougaoliang@hngwg.com