HTTP结果回调
更新时间:2024-05-16
说明
当用户需要获取EdgeBoard的分析结果时,EdgeBoard开发管理平台支持将视频流任务结果通过HTTP协议推送到指定地址,方便客户进行二次开发。
HTTP回调方式:EdgeBoard ----- post -----> 用户服务器
EdgeBoard <------ response---- 用户服务器
HTTP回调接口:http://ip:port/xxxxxxx 。该接口由用户定义,不做固定格式要求。
回调功能设置
添加任务时,可设置回调功能
回调状态:勾选【启用】会开启回调功能;勾选【禁用】会关掉回调功能;
回调地址:用户实际回调服务地址(图中地址仅作展示),开启回调后,设备会将结果数据发送至该地址;
回调条件:回调结果支持基于模型标签(label)进行条件筛选,增加回调条件后,服务器就会得到筛选后的数据;
回调图片:回调图片仅指回调参数中“background”的返回值,【原图】指返回的background为不带渲染的base64图片,【原图+渲染】指返回的background为不带渲染的base64图片,【无图片】则回调结果中不返回background参数。由于回调中返回图片会占用大量的资源和带宽,实际使用时推荐选择【无图片】选项。
HTTP回调协议
HTTP请求方法:post
URI:客户自定义
Request:
Post request(content-type: application/json; charset=UTF-8):
Response 返回:
Http Status 200 (ok)
数据返回格式
JSON
1{
2 "task_id":0, //任务ID号
3 "task_type":"eb::vehicle_tracking", //任务类型
4 "camera_id":0, //摄像头ID号
5 "camera_name":"rtsp_camera", //摄像头名称
6 "camera_sn":"xafasfajfasdfas", //摄像头SN码
7 "model_id":0, //模型ID号
8 "background":"base64xxxxxxxxxxxx",//背景图片,勾选页面中【回调图片】和【是否渲染】,会返回该字段
9 "height":1920, //回调图片的高
10 "width":1080, //回调图片的宽
11 "time":"1637218917000", //回调图片时间戳
12 "result_data":[ //推理结果
13 {
14 "track_id":0,//跟踪的模型支持该字段
15 "image_data":xxxxx,
16 "label_id":0,
17 "label_name":"fire",
18 "score":0.83354",
19 "x0":0.1, //左上角、右下角坐标
20 "y0":0.1,
21 "x1":0.2,
22 "y1":0.2
23 },
24 ....
25 ],
26 "fence_data":[//画面框定信息
27 {
28 "id":0,
29 "name":"停车位1",
30 "coordinates":[
31 [0.1,0.1],
32 [0.2,0.2],
33 [0.3,0.3]
34 ]
35 },
36 {
37 "id":1,
38 "name":"停车位2",
39 "coordinates":[
40 [0.1,0.1],
41 [0.2,0.2],
42 [0.3,0.3],
43 [0.4,0.4]
44 ]
45 }
46 ]
47}
HTTP回调接口搭建示例
Python
1import base64
2import tornado.ioloop
3import tornado.web
4import json
5import time
6
7class MainHandler(tornado.web.RequestHandler):
8 def get(self):
9 self.write("Hello, world")
10
11 def post(self):
12 post_data = self.request.body.decode('utf-8')
13 json_data = json.loads(post_data)
14 #print(json_data)
15 self.set_status(200)
16
17 print (json.dumps(json_data, ensure_ascii=False, indent=4))
18 self.finish()
19
20def make_app():
21 return tornado.web.Application([
22 (r"/httpcallback", MainHandler),
23 ])
24
25if __name__ == "__main__":
26 app = make_app()
27 app.listen(8888)
28 tornado.ioloop.IOLoop.current().start()
