部署物体检测模型
更新时间:2023-04-12
本教程说明如何将一个物体检测模型通过BIE部署至边缘节点。
操作指南
导入配置项
- 进入配置管理
- 点击导入配置项
- 选择导入文件: amd64:配置项-easyedge-linux-mdp-4fn7k2tve4xyknp1-amd64.json arm64:配置项-easyedge-app-arm64.json
- 导入完毕以后,将增加一个配置项。
- 在内网环境下,可以先下载模型文件,再上传至内网的对象存储,最后修改配置项的下载地址为内网地址。
导入应用
- 进入应用部署
- 点击导入应用
- 选择导入文件: amd64:应用-easyedge-app10amd64.json arm64:应用-easyedge-app-arm64.json
- 导入完毕以后,将增加一个应用。
- 在内网环境下,可以先下载镜像:
registry.baidubce.com/aiot/edgekit_x86:1.0.4
,
registry.baidubce.com/aiot/edgekit_armv8:1.0.2
,再上传至内网的镜像仓库,最后修改应用的镜像地址为内网地址。
部署应用到边缘节点
在应用部署当中,可以选择将应用部署至哪些边缘节点,部署的逻辑是通过边缘节点的标签进行匹配。例如edge-node这个边缘节点有一个baetyl-node-name: edge-node
这样的KV标签,如下图所示:
那么目标节点界面,点击匹配标签,添加baetyl-node-name: edge-node
作为目标节点标签,如下图所示:
在添加完毕以后,系统自动基于标签匹配出目标节点为edge-node,如下图所示:
验证边缘AI服务运行
打开原模型的label_list.txt文件,我们可以看到此模型可以识别以下种类物体:
background
aeroplane
bicycle
bird
boat
bottle
bus
car
cat
chair
cow
diningtable
dog
horse
motorbike
person
pottedplant
sheep
sofa
train
tvmonitor
可以看到此模型可以识别人和狗这两种物体,我们可以找一张遛狗的测试图片。
通过浏览器验证
本案例当中的AI推断服务提供了web操作界面,所以可以通过web界面上传上述测试图片。打开浏览器,访问:http://[边缘节点IP地址]:8088/
。如果能够打开界面,表示边缘推断服务正常启动。此时上传测试图片,推断服务将自动给出推断结果,如下图所示,在置信度为80%时,识别出图片当中有3个人,1条狗,置信度可用户自定义修改。
通过API验证
边缘AI应用作为一个容器服务运行在边缘节点,它同时对外提供API访问接口,支持被其他应用调用,并返回物体检测结果。具体API使用参考API文档
下面通过python代码调用接口进行示例说明:
- 拷贝下面的python代码保存至本地,命名为test_ai_model_api.py。
import requests
with open('./1.jpg', 'rb') as f:
img = f.read()
# params is GET params, data is POST Body
result = requests.post('http://[边缘节点ip]:8088/', params={'threshold': 0.8},data=img).json()
print (result)
- 下载图片 1.jpg,保存至与test_ai_model_api.py同目录下。
- 执行test_ai_model_api.py
python test_ai_model_api.py
- 查看接口返回结果为如下JSON,同样标识识别出1个人和3条狗。
{
"cost_ms":179,
"error_code":0,
"results":[
{
"confidence":0.9943918585777283,
"index":12,
"label":"dog",
"location":{
"height":397,
"left":100,
"top":691,
"width":383
},
"name":"dog",
"score":0.9943918585777283,
"x1":0.14523082971572876,
"x2":0.6987910866737366,
"y1":0.6263848543167114,
"y2":0.9866765737533569
},
{
"confidence":0.9922541379928589,
"index":15,
"label":"person",
"location":{
"height":304,
"left":547,
"top":332,
"width":92
},
"name":"person",
"score":0.9922541379928589,
"x1":0.7918291687965393,
"x2":0.9249030947685242,
"y1":0.30082497000694275,
"y2":0.5762962102890015
},
{
"confidence":0.9846013784408569,
"index":15,
"label":"person",
"location":{
"height":1020,
"left":311,
"top":63,
"width":308
},
"name":"person",
"score":0.9846013784408569,
"x1":0.4507014751434326,
"x2":0.8969031572341919,
"y1":0.05781838297843933,
"y2":0.9817966222763062
},
{
"confidence":0.9536634683609009,
"index":15,
"label":"person",
"location":{
"height":357,
"left":35,
"top":327,
"width":149
},
"name":"person",
"score":0.9536634683609009,
"x1":0.05083557963371277,
"x2":0.2662031948566437,
"y1":0.2963605523109436,
"y2":0.6200013160705566
}
]
}