图像分类服务器API集成文档
本文档主要说明定制化图像分类模型发布为本地服务器API(通过API部署包实现)后如何使用。如还未训练模型,请先前往EasyDL进行训练。
如有疑问可以通过以下方式联系我们:
- 在百度智能云控制台内提交工单
- 进入EasyDL社区交流 ,与其他开发者进行互动
部署包使用说明
部署方法
EasyDL定制化图像分类模型的服务器API通过EasyPack实现,目前提供单机一键部署的方式。
在EasyDL申请、下载部署包后,在本地服务器新建目录(建议目录命名规则:easyDL_服务名称_模型版本号), 将软件包上传至该目录。请参考EasyPack-单机一键部署 使用python2 命令来部署,部署成功后,启动服务,即可调用与在线API功能类似的接口。
运维检查
EasyDL服务器API部署应用健康检查(或故障排查)脚本:trouble_shooting.tar
脚本能力:鉴权服务健康检测、容器状态检查、端口探活、网络联通性测试、容器关键报错日志输出等
使用方法: 将脚本上传至服务器任意目录(或在服务器直接下载),并解压后运行。
# 解压
tar vxf trouble_shooting.tar
# 执行
bash trouble_shooting.sh
授权说明
部署包根据服务器硬件(CPU单机或GPU单卡)进行授权,只能在申请时提交的硬件指纹所属的硬件上使用。
部署包测试期为1个月,如需购买永久授权,可提交工单咨询
性能指标
图像分类模型可部署在CPU或GPU服务器上,单实例具体性能指标参见算法性能及适配硬件
API参考
请求说明
请求示例
HTTP 方法:POST
请求URL: 请首先在EasyDL进行自定义模型训练,完成训练后申请部署包,部署成功后拼接url。
请求URL: http://{IP}:{PORT}/{DEPLOY_NAME}/ImageClassification IP:服务部署所在机器的ip地址 PORT:服务部署后获取的端口 DEPLOY_NAME:申请时填写的服务名称
Header如下:
参数 | 值 |
---|---|
Content-Type | application/json |
注意:如果出现336001的错误码很可能是因为请求方式错误,与其他图像识别服务不同的是定制化图像识别服务以json方式请求。
Body请求示例:
{
"image": "<base64数据>",
"top_num": 5
}
Body中放置请求参数,参数详情如下:
请求参数
参数 | 是否必选 | 类型 | 可选值范围 | 说明 |
---|---|---|---|---|
image | 是 | string | - | 图像数据,base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式 注意请去掉头部 |
top_num | 否 | number | - | 返回分类数量,默认为6个 |
返回说明
返回参数
字段 | 是否必选 | 类型 | 说明 |
---|---|---|---|
log_id | 是 | number | 唯一的log id,用于问题定位 |
results | 否 | array(object) | 分类结果数组 |
+name | 否 | string | 分类名称 |
+score | 否 | number | 置信度 |
错误码
若请求错误,服务器将返回的JSON文本包含以下参数:
- error_code:错误码。
- error_msg:错误描述信息,帮助理解和解决发生的错误。
例如缺少必要出入参时返回:
{
"error_code": 336001,
"error_msg": "Invalid Argument"
}
错误码 | 错误信息 | 描述 |
---|---|---|
336000 | Internal error | 服务器内部错误,请再次请求, 如果持续出现此类错误,请在百度智能云控制台内提交工单反馈 |
336001 | Invalid Argument | 入参格式有误,比如缺少必要参数、图片base64编码错误等等,可检查下图片编码、代码格式是否有误。有疑问请在百度智能云控制台内提交工单反馈 |
336002 | JSON不合法 | 入参格式或调用方式有误,比如缺少必要参数代码格式是否有误。有疑问请在百度智能云控制台内提交工单反馈 |
336003 | Base64解码失败 | 图片/音频/文本格式有误或base64编码有误,请根据接口文档检查格式,base64编码请求时注意要去掉头部。有疑问请在百度智能云控制台内提交工单反馈 |
336004 | 输入文件大小不合法 | 图片超出大小限制,图片限4M以内,请根据接口文档检查入参格式,有疑问请在百度智能云控制台内提交工单反馈 |
336005 | 图片解码失败 | 图片编码错误(非jpg,bmp,png等常见图片格式),请检查并修改图片格式 |
336006 | 缺失必要参数 | image字段缺失(未上传图片) |
336100 | model temporarily unavailable | 遇到该错误码请等待1分钟后再次请求,可恢复正常,若反复重试依然报错或有疑问请在百度智能云控制台内提交工单反馈 |
337000 | Auth check failed | 离线鉴权调用失败 |
模型更新/回滚操作说明
模型更新
1、在EasyDL-纯离线服务发布页面,找到您的服务器API发布记录,点击【更新版本】,选择「更新包」或「完整包」来发布。
两者区别:
包类型 | 描述 |
---|---|
更新包 | 仅包含最新的模型应用,需执行download.sh脚本下载所需镜像等依赖文件 |
完整包 | 包含模型应用和其他鉴权服务,需执行download.sh脚本下载所需完整依赖文件 |
2、(CPU模型可忽略
)如果您训练的模型为GPU版本,系统会生成多份下载链接。请在GPU服务器执行 nvidia-smi
命令,根据返回的Cuda Version来选择对应的部署包链接下载。
3、在服务器新建目录(建议标记对应模型的版本号,便于区分不同模型版本),如easydl_${DEPLOY_NAME}_v2
${DEPLOY_NAME}
:申请时填写的服务名称
以如下场景举例说明:模型版本从V1升级至V2
##### 1.新模型准备
# 创建指定版本的目录
mkdir easedl_${DEPLOY_NAME}_v2
cd easedl_${DEPLOY_NAME}_v2
# 将部署包上传至服务器该目录并解压
tar zvxf xx.tar.gz
# 解压后,进入指定目录执行download脚本下载模型所依赖文件
cd original && bash download.sh
##### 2.旧模型备份
# 历史模型备份
cp -r /home/baidu/work/${DEPLOY_NAME} /home/baidu/work/${DEPLOY_NAME}_V1
# 记录当前模型的端口号
docker ps -a |grep ${DEPLOY_NAME}
##### 3.模型升级
cd package/Install
# 卸载当前已安装的旧的easyDL服务:${DEPLOY_NAME} ,前面已备份
python2 install.py remove ${DEPLOY_NAME}
# 安装当前部署包内新的EasyDL服务:${DEPLOY_NAME}
python2 install.py install ${DEPLOY_NAME}
# (可选操作) 更新证书
python2 install.py lu
模型回滚
以如下场景举例说明:模型版本从V2回滚至V1
方法一:
## 重命名当前v2模型目录名称
mv /home/baidu/work/${DEPLOY_NAME} /home/baidu/work/${DEPLOY_NAME}_V2
# 使用V1版本
cp -r /home/baidu/work/${DEPLOY_NAME}_V1 /home/baidu/work/${DEPLOY_NAME}
# 停止当前模型容器
docker ps -a |grep ${DEPLOY_NAME}
docker rm -f ${容器名}
# 创建新的容器
cd /home/baidu/work/${DEPLOY_NAME} && bash start/start-1.sh
# (可选操作)进入V1版本部署包所在目录执行license更新操作,假如部署包在/opt目录下,以您实际目录为准
cd /opt/easydl_${DEPLOY_NAME}_V1/original/package/Install && python2 install.py lu
方法二:
进入模型V1所在目录,参考上述【模型更新】步骤,执行模型升级操作(即先卸载v2,后升级为v1)