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