资讯 社区 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

图像分类服务器端SDK集成文档-EdgeKitProxy

简介

本文档介绍EdgeKitProxy的使用方法。

Release Notes

时间 版本 说明
2023-05-17 1.0.0 第一版!

快速开始

二进制位置

位于SDK内bin目录中,文件名为edgekit_serving,配套edgekit_serving.yml为默认配置文件

注意事项

请参考各SDK文档中的注意事项

使用说明

服务启动

usage: edgekit_serving [<flags>]

Flags:
      --help                   显示帮助
  -c, --cfg=./edgekit_serving.yml
                               配置文件
  -m, --model_dir=./RES        模型目录
  -s, --serial_num=ABCD-EFGH-IJKL-MNOP
                               序列号
      --pool_min_size=1        预测池最小预测器个数
      --pool_max_size=1        预测池最大预测器个数
      --pool_full_interval_seconds=-1
                               预测池满载多少秒进行扩容
      --pool_idle_interval_seconds=-1
                               预测池未满载多少秒进行缩容
      --pool_available_device=-1 ...
                               预测池可用设备列表
  -d, --debug                  开启debug模式
      --log_to_std             日志输出至终端
      --log_to_file            日志输出至文件
      --log_file=easyedge.log  日志文件名
      --log_max_size=10        日志最大大小(MB)
      --log_max_age=10         日志旧文件保留天数
      --log_max_backups=100    日志旧文件保留个数
  -h, --host=127.0.0.1         服务监听地址
  -p, --port=24401             服务监听端口
      --ws_max_handle_num=1    websocket接口最大处理请求个数
      --ws_max_handle_timeout=30
                               websocket接口超时时间

配置文件说明

controller:
  serialNum: AAAA-AAAA-AAAA-AAAA # 序列号
  modelDir: ../../../RES         # 模型目录

predictorPool:
  minSize: 1              # 预测池最小预测器个数
  maxSize: 3              # 预测池最大预测器个数
  fullIntervalSeconds: 1  # 预测池满载多少秒进行扩容
  idleIntervalSeconds: 1  # 预测池未满载多少秒进行缩容
  availableDevice: [ -1 ] # 预测池可用设备列表

serving:
  host: 0.0.0.0           # 服务监听地址
  port: 24401             # 服务监听端口
  enableHTTP: true        # 对外开启HTTP服务
  enableWS: false         # 对外开启websocket服务
  ws:
    maxHandleNum: 1       # websocket接口最大处理请求个数
    maxHandleTimeout: 30  # websocket接口超时时间

logging:
  debug: true             # 开启debug模式
  logToStd: true          # 日志输出至终端
  logToFile: false        # 日志输出至文件
  logFile: easyedge.log   # 日志文件名
  maxSize: 10             # 日志最大大小(MB)
  maxAge: 10              # 日志旧文件保留天数
  maxBackups: 100         # 日志旧文件保留个数

命令行参数会覆盖配置文件中同义配置

服务调用

HTTP服务接口url: ${监听地址}/ HTTP服务接口url: ${监听地址}/ws

请求参数

syntax = "proto3";

package easyedge.kit.proxy;

enum ImageType {
  Bin = 0;  // 图片原始二进制内容,json格式下为base64编码后结果
  Mat = 1;  // 图片Mat格式内容,json格式下为base64编码后结果
}

message HTTPRequest {
  bytes image           = 1;
  ImageType image_type  = 2;
  int32 height          = 3;
  int32 width           = 4;
  int32 channel         = 5;
  float threshold       = 6;
  int32 top_num         = 7;
}

enum CommandType {
  GetInfo     = 0;
  InferImage  = 1;
}

enum InfoType {
  Hardware = 0;
}

message WebSocketRequest {
  string request_id         = 1;
  CommandType command_type  = 2;
  InfoType info_type        = 3;
  bytes image               = 4;
  ImageType image_type      = 5;
  int32 height              = 6;
  int32 width               = 7;
  int32 channel             = 8;
  int64 frame_id            = 9;
  float threshold           = 10;
  int32  top_num            = 11;
}

返回参数

syntax = "proto3";

package easyedge.kit.proxy;

message BasicGPUInfo {
  string productName  = 1;
  string memUsed      = 2;
  string memTotal     = 3;
  string gpuUtil      = 4;
  string powerLimit   = 5;
  string powerDraw    = 6;
  string temperature  = 7;
}

message DevStat {
  string name = 1;
  uint64 rx   = 2;
  uint64 tx   = 3;
}

message Chip {
  string name        = 1;
  double powerUsed   = 2;
  double powerLimit  = 3;
  double temperature = 4;
  double chipUtil    = 5;
  int64 memoryUsed   = 6;
  int64 memoryTotal  = 7;
}

message SMI {
  string name           = 1;
  string sdkVersion     = 2;
  string driverVersion  = 3;
  repeated Chip chips   = 4;
}

message HInfo {
  string osName                         = 1;
  string hostname                       = 2;
  repeated string ipAddr                = 3;
  repeated string macAddr               = 4;
  uint64 bootTime                       = 5;
  int32 cpuCores                        = 6;
  double cpuMhz                         = 7;
  string cpuModelName                   = 8;
  double cpuUsage                       = 9;
  map<string, double> cpuUsageDetail    = 10;
  uint64 memTotal                       = 11;
  uint64 memTotalUsed                   = 12;
  double memUsage                       = 13;
  map<string, double> memUsageDetail    = 14;
  uint64 diskTotal                      = 15;
  uint64 diskTotalUsed                  = 16;
  double diskUsage                      = 17;
  map<string, double> diskUsageDetail   = 18;
  string userName                       = 19;
  bool isInternetConnected              = 20;
  string deviceId                       = 21;
  int64 deviceTimestamp                 = 22;
  map<string, DevStat> netUsageDetails  = 23;
  repeated BasicGPUInfo gpuInfo         = 24;
  double gpuUtil                        = 25;
  uint64 gpuMemTotal                    = 26;
  uint64 gpuMemTotalUsed                = 27;
  double gpuMemUsage                    = 28;
  map<string, SMI> aiChipInfo           = 29;
}


message LocationPoint {
  optional int32 x = 1;
  optional int32 y = 2;
}

message Location {
  optional int32 left           = 1;
  optional int32 top            = 2;
  optional int32 width          = 3;
  optional int32 height         = 4;
  repeated LocationPoint points = 5;
}

message Point {
  optional double x = 1;
  optional double y = 2;
}

message InferResultItem {
  optional int64 index       = 1;
  optional double confidence = 2;
  optional double score      = 3;
  optional string label      = 4;
  optional string name       = 5;
  optional int32 modelKind   = 6;

  // 矩形检测
  optional double x1         = 7;
  optional double x2         = 8;
  optional double y1         = 9;
  optional double y2         = 10;
  optional Location location = 11;

  // 四边形检测
  repeated Point points      = 12;

  // 追踪
  optional int64 trackId     = 13;
  optional int64 frame       = 14;
  optional double fps        = 15;

  optional string mask       = 16;
}

message HTTPResponse {
  int64 cost_ms                     = 1;
  int32 error_code                  = 2;
  int64 frame_id                    = 3;
  repeated InferResultItem results  = 4;
}

message WebSocketInferResponse {
  string request_id                 = 1;
  int64 cost_ms                     = 2;
  int32 error_code                  = 3;
  int64 frame_id                    = 4;
  repeated InferResultItem results  = 5;
  bytes annotated                   = 6;  // 渲染后的图片原始二进制内容,json格式下为base64编码后结果,目前语义分割返回这个类型
}

message WebSocketHInfoResponse {
  string request_id         = 1;
  int32 status              = 2;
  string msg                = 3;
  HInfo data                = 4;
}

其他说明

单机负载均衡

通过配置文件或命令行参数配置了预测池相关配置后,若预测池最小与最大预测器个数不同,且扩缩容配置不为-1则开启单机负载均衡,服务启动时会创建最小数量的预测器,后续根据实际请求情况,若所有预测器均有负载的持续时间大于配置中的满载扩容时间,且预测器数量未到达最大个数时,会自动扩容,后续若请求并发数下降,预测器池中预测器不能跑满负载时,则会自动缩容,尽可能最大化利用单机资源

上一篇
Linux集成文档-Atlas
下一篇
纯离线API集成说明