云平台
此功能主要用于将设备与上位机管理平台建立联通。
点击此处展开
一、平台端配置
需要明确上位机软件安装机器的IP地址; 上位机所占用的端口号默认是11883; 以上两点信息,需要在设备端做配置,具体说明详见下一小节。
二、设备端配置
进入设备界面可配置推送地址; 如需打开云平台推送,请切换启停开关; 输入云平台推送IP地址、端口(默认11883端口)、设备信息; 点击【网络检测】可以检测指定IP、端口是否开放; 开启或者关闭【推送告警视频】,用于控制是否推送告警视频到云平台; 确认信息无误后点击【修改】按钮,该功能需要重启设备才可生效,请点击【确定】完成重启(重启过程将持续1-2分钟,期间请勿操作或关闭设备界面)。
心跳
此功能主要用于设备的二次开发,检测设备是否在线。
点击此处展开
示例代码下载(点击此处跳转)
一、在接收端接收心跳消息(udp协议)
项目 | 详情 |
---|---|
服务器IP | 如:192.168.1.109(页面上配置的接收端 IP 地址) |
服务器端口 | 如:10002(页面上配置的接收端端口) |
报文内容 | { "device": { "device_id": "设备 id", "device_name": "设备名称", "device_desc": "设备描述" }, "source": [{ "id": "数据源 id", "ipv4": "数据源 ipv4", "desc": "数据源描述", "type": "数据源类型(摄像头/视频流)", "encoding": "数据流编码格式", "info": "数据源其它信息", "stream": "数据流地址", "infer_size": "推理图像尺寸", "draw_size": "画框图像尺寸", "alg": "数据源绑定的算法", "status": "数据源状态(1:在线,0:离线)" } ], //source字段可在界面配置是否发送,默认不发送 "ipv4": "设备 ipv4", "system_args": { "infer_freq": "解码频率", "max_source": "最大可启用数据源路数" }, "version": { "hardware_version": "硬件版本", "software_version": "软件版本" }, "reserved_data": "保留数据" } |
二、在设备页面上配置接收端的IP等信息
- 在设备界面左侧依次点击【数据推送】、【心跳】页签进入页面;
- 点击【启用/停用】按钮,用于开启/关闭心跳推送;
- 分别填写心跳接收端的 ipv4 地址、端口以及心跳推送的间隔时间(默认 10s);
- 点击【是否发送摄像头详细信息】用于决定是否发送已配置的摄像头详细信息(默认关闭),注意:若开启此选项,心跳报文将会比较大;
- 点击【保存】按钮即可保存当前设置并使其生效。
HTTP
此功能主要用于设备的二次开发,接收HTTP告警。
点击此处展开
一、在告警接收端创建告警接收服务
示例代码以及配置token请参考(点击此处跳转)
- 接口功能描述:目标平台接收告警;
- 接口路径:[POST] http://IP:PORT/alert,(IP是告警接收设备的IP地址,PORT是告警接收端的端口);
- 上报参数说明;
参数名称 | 数据类型 | 说明 |
---|---|---|
alert_time | Float | 告警时间戳 |
device | Object | 设备信息,包含id, name, desc |
source | Object | 数据源信息,包含id, ipv4, desc |
alg | Object | 算法信息,包含name, ch_name |
image | String | 图像数据base64编码 |
reserved_data | Object | 保留数据,包含矩形框、多边形框、线条等元素 |
hazard_level | String | 危险等级 |
- 报文示例;
项目 | 详情 |
---|---|
报文格式 | JSON |
报文内容 | { "id": "xxxxxx", //告警id "alert_time": 1706519903.634085, //告警时间戳 "device": { "id": "设备ID", "name": "设备名称", "desc": null }, "source": { "id": "数据源ID", "ipv4": "数据源IP地址", "desc": "数据源描述" }, "alg": { "name": "算法名称英文", "ch_name": "算法名称中文" }, "image": "img1_base64", //base64编码的图片数据 "hazard_level": "", //危险等级 "reserved_data": { "bbox": { "rectangles": [{ "xyxy": [680, 198, 1178, 696], //左上角、右下角坐标 "color": [0, 0, 255], //BGR颜色 "conf": 0.91, //置信度 "label": "未佩戴安全帽", //标签 "ext": {} //扩展字段 } ], //矩形数组 "polygons": { //多边形对象 "xxxxxx": { //多边形id "name": "离岗检测", //多边形名称 "color": [0, 0, 255], //BGR颜色 "polygon": [ //顶点坐标 [568, 205], [920, 140], [843, 471], [576, 471] ], "ext": {} //扩展字段 } }, "lines": { "xxxxxx": { //线段id "name": "线段1", //线段名称 "line": [[680, 198], [1178, 696]], //顶点坐标 "color": [0, 0, 255], //BGR颜色 "ext": {} //扩展字段 } } //线段对象 }, "face": [{ "external_id": "外部ID", "name": "姓名", "age": "年龄", "sex": "性别", "desc": "简介", "update_time": "更新时间", "id": "底库ID", "lib_image": "底库图片", //base64编码的图片数据 "cap_image": "告警图片", //base64编码的图片数据 "conf": "人脸相似度" } ] //人脸对象数组 } } |
二、在设备页面上配置告警接收端的信息
- 在设备界面左侧依次点击【数据推送】-【告警】-【HTTP】页签进入页面;
- 如需打开推送,请点击【启停开关】;
- 输入告警推送地址,即http://IP:PORT/alert;
- (可选)点击【网络检测】可以检查url是否存在;
- 选择告警图片是否画框,若启用表示告警图片上标记了告警的目标;若停用表示告警图片上无标记。
三、在告警视频接收端创建告警视频接收服务
该功能暂不适配KS968-M1&M2的32路版本,使用前务必确认产品型号。
示例代码以及配置token请参考(点击此处跳转)
- 接口功能描述:目标平台接收告警视频;
- 接口路径:[POST] http://IP:PORT/alert/video,(IP是告警接收设备的IP地址,PORT是告警接收端的端口);
- 请求参数说明;
参数名称 | 数据类型 | 是否必须 | 说明 |
---|---|---|---|
data | Json | 是 | 上报数据 |
- data数据说明;
参数名称 | 数据类型 | 说明 |
---|---|---|
alert_time | Float | 告警时间戳 |
device | Object | 设备信息,包含id, name , desc |
source | Object | 数据源信息,包含id, ipv4, desc |
alg | Object | 算法信息,包含name,ch_name |
video | String | 告警视频数据base64编码 |
hazard_level | String | 危险等级 |
- 请求示例;
项目 | 详情 |
---|---|
报文格式 | JSON |
报文内容 | { "id": "xxxxxx", //告警id "alert_time": 1706519903.634085, //告警时间戳 "device": { "id": "设备ID", "name": "设备名称" "desc": null }, "source": { "id": "数据源ID", "ipv4": "数据源IP地址 ", "desc": "数据源描述" }, "alg": { "name": "算法名称英文", "ch_name": "算法名称中文" }, "video": "video_base64", //base64编码的视频数据 "hazard_level": "" //危险等级 } |
- 响应参数说明;
参数名称 | 数据类型 | 是否必须 | 说明 |
---|---|---|---|
error_code | Int | 是 | 返回响应码0: 成功-1: 客户端错误-2: 服务端错误 |
message | String | 是 | 返回响应信息 |
data | Json | 是 | 返回数据 |
- 响应示例。
项目 | 详情 |
---|---|
报文格式 | JSON |
报文内容 | { "error_code": 0, "message": "告警视频推送成功", "data": null } |
四、在设备页面上配置告警接收端的信息
- 在设备界面左侧依次点击【数据推送】-【告警】-【HTTP】页签进入页面;
- 如需打开推送,请点击【启停开关】;
- 输入告警推送地址,即http://IP:PORT/alert/video;
- (可选)点击【网络检测】可以检查url是否存在。
五、常见问题
点击URL检测后,系统弹出提示框显示“无效的url!”,可能的原因以及排查方法如下:
- 盒子未联网(通过【系统设置-高级设置】查看联网状态)
- 目标平台服务未启动或目标平台IP、端口填写不正确。可使用PostMan自行本地测试目标平台是否有效。
- 防火墙问题。需关闭目标平台防火墙。
- 若在局域网测试,则可能盒子IP和目标平台不在同一网段,即盒子到目标平台不可达。并自行排查网络问题。
- 自建平台状态码没有返回200,不影响使用。
六、示例JSON
七、自定义域名推送
如果您的域名是自定义域名,并且需要本地配置 hosts 文件(极少数需求)
- 点击【设备升级】,连续点击7次红色框内的设备版本,打开开发者模式。
点击【高级设置】-【终端管理】,在设备终端点击【连接】。
进入终端后执行sudo vi /etc/hosts
编辑 hosts 文件,添加 ip 以及对应的域名。后续步骤参考【教程 - 设备二开 - 设备快速集成 - 快速集成】
TCP
此功能主要用于设备的二次开发,接收TCP告警。
点击此处展开
一、在接收端接收socket消息
示例代码下载(点击此处跳转)
- 接收说明;
项目 | 详情 |
---|---|
服务器IP | 如:192.168.1.109(页面上配置的服务器IP地址) |
服务器端口 | 如:8088(页面是哪个配置的服务器端口) |
报文内容 | { "time": 1706520606.198586, //时间戳 "device": { "id": "设备ID", "name": "设备名称", "desc": "设备描述" }, "source": { "id": "数据源ID", "ipv4": "数据源IP地址 ", "desc": "数据源描述" }, "alg": { "name": "算法名称英文", "ch_name": "算法名称中文" }, "hazard_level": "", //危险等级 "hit": true //类型配置为检测信号时推送这个字段,true:检测出告警,false:没检测出告警 } |
二、在设备页面上配置接收端的IP等信息
- 在设备界面左侧依次点击【数据推送】-【告警】-【TCP】页签进入页面;
- 点击右上角绿色【添加推送地址】按钮;
- 如下图所示,添加目标平台的IP与端口;
- 选择发送类型,若只推送告警则选择告警信号,若推送每次检测结果则选择检测信号。
- (可选)点击【网络检测】可以测试指定ip、端口是否开放。
Modbus-TCP
此功能主要用于设备的二次开发,对接继电器,声光报警器。
点击此处展开
* 对于Modbus,设备仅支持TCP的通信方式,设备作为master(tcp-client),接收端作为slave(tcp-server);* 在设备界面左侧依次点击【数据推送】-【告警】-【Modbus-TCP】页签进入页面;
- 点击右上角绿色【添加】按钮;
- 如下图所示,添加目标平台的【ip】、【端口】、【地址】、【slave_id】、【Point Type】、【发送类型】、【触发指令】等信息,并选择触发源(视频源及算法),点击保存即可;
- 【slave_id】: 从站 ID(通常为 1)
- 【地址】:读写的寄存器或线圈地址
- 【Point Type】点位类型支持“coil”、“register”两种类型,对于“coil”类型 可读写的单个位(常用于数字量输出),将发送bool类型的数据(触发指令只能选择0/1),对于“register”类型可读写的16位寄存器(常用于模拟量)将发送int类型的数据(触发指令可以自定义int型数字);
- 【发送类型】可以选择“发送告警”与“检测信号”两种模式,若选择“发送告警”,则只支持设置“触发指令”;若选择“检测信号”,则支持设置“触发指令”以及“非触发指令”(未告警时发送)。
继电器
此功能主要用于设备对接继电器。
点击此处展开
一、购买
继电器为选配功能,支持指定品牌继电器,如需此功能可淘宝直接购买。
- 继电器购买链接(选择网络继电器):点击此处跳转
二、网络继电器配置
首先在电脑上下载并安装所购买的继电器配置软件;
- 链接:点击此处跳转
- 提取码:0000
- 继电器、访问电脑处于同一局域网内;
- 点击【网络参数设置】-【扫描】获取继电器信息,广播网卡选择与继电器在同一局域网内的网卡;
- 选中【设备列表】中的设备,【工作模式选择】MODBUS TCP服务端,在【IP配置】中修改继电器网络参数,完成后点击【配置】保存;
- 在软件上方输入刚才修改的【设备IP】、【设备端口号】,点击【连接】;
- 点击【MODBUS TCP控制】,并点击【打开】、【关闭】对继电器功能进行测试,通过点击【打开】、【关闭】继电器出现吸合、断开响声表示配置成功。
三、软硬一体机配置
- 在软硬一体机后台管理系统【数据推送】-【Modbus TCP】中点击右上角【添加】按钮,并填写配置信息;
- 配置信息详情如下。
项目 | 详情 |
---|---|
IP | 继电器IP。如:192.168.69 |
端口 | 继电器端口。如:50000 |
地址 | 控制的继电器的输出口。若继电器为D01-D08,填写地址0,表示控制D01输出;填写地址7,表示控制D08输出。 |
slave_id | 从站ID,填写:1 |
Point Type | 寄存器类型,选择:register |
发送类型 | 告警触发or 检测触发。告警触发,表示有告警时继电器动作。检测触发,表示每次检测均触发继电器动作。默认选择告警触发。 |
触发指令 | 填写:65280,继电器导通指令。 |
开启复位 | 开启复位。可设置告警触发后复位延迟执行时间。如设置5秒,表示告警触发继电器导通5秒后,继电器断开。复位指令,填写:0。 |
选择视频源及算法 | 继电器绑定算法。由哪路摄像头的哪个算法产生的告警信号,触发继电器动作。 |
声光报警器
此功能主要用于设备对接声光报警器。
点击此处展开
一、购买
声光报警器为选配功能,支持指定品牌声光报警器,如需此功能可淘宝直接购买。
- 声光报警器购买链接(选择RS485 Modbus协议):h5.m.taobao.com/awp/core/detail.htm?ft=t&id=567786412446(点击此处跳转)
- 串口服务器购买链接:detail.tmall.com/item.htm?ali_trackid=55_9d70290fdce1052ad28b991a1144ca01&from_branding=true&id=532710426322(点击此处跳转)
二、串口服务器配置
- 登录串口服务器后台,登录地址,账号、密码联系产品购买厂家提供;
- 进入后台可查看、修改网络参数;
- 串口服务器端口参数,波特率设置为9600;
- 本地端口保持默认20108;
- 工作方式选择TCP Server;
- Modbus使能选择【Modbus简单协议转换】。
三、软硬一体机配置
- 在盒子后台管理系统-告警-Modbus TCP中添加声光报警器。如下展示了声光报警器的IP、端口、地址、slave_id、Point_Type发送类型与视频来源。
- 点击右上角添加,对声光报警器联动进行配置。
配置项 | 值 |
---|---|
串口服务器IP | 串口服务器的IP地址,如192.168.1.117 |
端口号 | 串口服务器端口号,如20108 |
地址 | 填写3 |
slave_id | 填写1 |
Point Type | 选择register |
发送类型 | 选择告警信号 |
触发指令 | 填写1 |
选择视频源及算法 | 选择哪路视频哪个算法告警,触发声光报警器工作 |
- 完成配置后,点击保存。
APP推送
此功能主要用于设备推送告警信息到APP。
点击此处展开
一、盒子联网
- 首先保证盒子联网状态
二、盒子端配置
- IPv4:app.aidrive-tech.com
- 端口:50000
- 设备名称:自定义
- 密钥:自定义可自动生成(大写+小写字母+特殊字符,不少于12位,若有多台机器密钥填写保持一致,不可设置简单密码,若与其他用户相同则会造成隐私泄露)
- token更新时间:600
三、app端配置
下载链接: https://pan.baidu.com/s/1U2HbtWqyK0KSsX0lXmWQVQ 提取码: a81a
目前仅支持安卓手机,仅支持接收告警 打开“我的”填写盒子上的密钥,并点击获取按钮,如图显示Token获取成功则代表建立连接 等待盒子告警,则可在告警宫格查询。
企业微信
此功能主要用于让用户可以在企业微信软件上查看设备告警信息。
点击此处展开
一、获取企业微信配置信息
** 如需正确使用企业微信推送告警,一共需要获取6项关键配置信息,分别是“企业ID”、“通讯录secret”、“应用ID”、“应用secret”、“Token”、“EncodingAESKey”。**
1. 注册/登录企业微信后台
- 浏览器访问企业微信后台,地址:work.weixin.qq.com (点击此处跳转);
- 点击右上角【企业登录按钮】
- 点击【企业登录】按钮,输入相关信息并完成登录;
- 如没有注册过,可点击下方的【企业注册】按钮;
- 按照步骤一次填写注册信息,确认无误后点击【注册】按钮完成注册。
2. 获取“企业ID”
- 进入企业微信后台,点击横向页签的【我的企业】;
- 在最下方找到【企业ID】,记录保存该信息。
3. 获取“通讯录secret”
- 点击横向页签的【安全与管理】,在【管理工具】下找到并点击【通讯录同步】;
- 点击【开启接口同步】按钮;
- 找到“Secret”点击【查看】按钮;
- 弹窗中点击【发送】按钮将Secret发送至“手机企业微信APP”;
- 手机打开企业微信APP,点击【企业微信团队】,找到如图所示信息,点击【前往查看】,复制并保存Secret;
- 找到“企业可信IP”点击【配置】按钮;
- 弹窗提示需要在手机企业微信APP中查看(请勿关闭此弹窗);
- 手机打开企业微信APP,点击【企业微信团队】,找到如图所示信息,点击【前往查看】,点击【确认操作】;
- 手机端确认后,回到电脑页面,如操作无误,弹窗会自动变成输入框;
- 在输入框填写自身公网网段的IP(IP获取方式见下一步),确认输入无误后点击【确定】按钮;
- 可通过百度搜索关键字“本机IP”查找IP查询工具,此处以ip138.com(点击此处跳转)工具为例,图中红框即为自身公网IP。
4. 获取“应用ID(AgentId)”
- 点击横向页签的【应用管理】,在【应用】下找到【自建】类并点击【创建应用】;
- 在创建页面填写相关内容(注意:“选择部门/成员”中点击选择创建的企业即可),确认无误后点击【创建应用】;
- 创建完成后在应用页面找到“AgentId”并记录,AgentId即为应用ID,记录保存该信息。
- 点击可见范围的企业部门确认是否已添加至应用可见范围
5. 获取“应用secret”
- 在应用页面找到“Secret”点击【查看】按钮;
- 弹窗中点击【发送】按钮将应用Secret发送至“手机企业微信APP”;
- 手机打开企业微信APP,点击【企业微信团队】,找到如图所示信息,点击【前往查看】,复制并保存Secret;
6. 获取“Token”
- 在应用页面找到“功能”类,并在“接收消息”板块下点击【设置API接收】按钮;
- 在“API接收消息”页面找到“Token”项,点击【随机获取】并将获取到的Token记录保存下来。
7. 获取“EncodingAESKey”
- 在“API接收消息”页面找到“EncodingAESKey”项,点击【随机获取】并将获取到的EncodingAESKey记录保存下来;
8. 接收消息服务器配置
- 根据6项关键信息启动云服务,获取url,完成接收消息服务器配置(注意:在获取到url之前请切勿关闭当前页面,否则随机生成的Token和EncodingAESKey发生变化后需要重新配置url);
- 获取url的方式可选择使用我司云服务或自有云服务,如选择“我司云服务”请阅读【a.使用我司云服务】获取url,如选择“自有云服务”请阅读【b.使用自有云服务】;
- 获取到正确url后填入输入框,确认无误后,点击【保存】按钮。
-
如果无法保存,且出现下图中域名主体未通过的错误。
-
请在下图中确认企业是否已认证。若企业已认证,则出现上述错误,需重新注册企业微信,并使企业处于未认证状态。
a. 使用我司云服务:
如选择使用我司云服务,我们将通过我司云资源为您搭建服务。您需要提供6项企业微信的配置信息,我方承诺对您的信息进行保密。如若选择使用自有云服务请忽略本章节并阅读下一章节【使用自有云服务】。
- 整理所记录的6项企业微信配置信息,分别为“企业ID”、“通讯录secret”、“应用ID”、“应用secret”、“Token”、“EncodingAESKey”;
- 将配置信息发送至官方邮箱:support@aidrive-tech.com;
- 我司工程师收到配置信息后将为您搭建服务,同时会通过邮件回传给您需要配置云服务器的接口回调url地址(在未收到回复前请勿继续其他操作);
b. 使用自有云服务:
将服务发布在自己的服务器上需要编写相关代码,请下载示例代码。
9. 填写“企业可信IP”
- 在应用页面往下滚动,找到“开发者接口”类,找到“企业可信IP”点击【配置】按钮;
- 在弹窗中的输入框填写自身公网网段的IP(同通讯录中企业可信IP),确认无误后点击【确定】按钮。
二、设备界面接收设置
1. 填写信息
- 进入设备界面,在左侧导航栏点击【数据推送】-【告警】-【企业微信】进入企业微信页面;
- 将【启用】按钮切换至打开状态;
- 点击【设置】图标打开设置弹窗;
- 在设置弹窗中依次填写“企业id”、“通讯录secret”、“应用id”、“应用secret”;
- 确认输入信息无误后,点击弹窗右下角【保存】按钮完成配置,如填写错误企业微信将无法正常收到告警信息。
2. 添加推送目标
- 在企业微信页面点击右上角【添加推送目标】绿色按钮;
- 在弹窗中填写【姓名】与【手机号】,确认无误后点击右下角【保存】按钮;
- 重点注意1:所填写的手机号需要与推送目标的企业微信手机号保持一致,否则推送失败;
- 重点注意2:企业微信后台的注册手机号无法接收到告警(企业微信后台注册手机号可在企业微信后台界面的【通讯录】下查看到)。
- 添加成功后企业微信列表下将出现所添加的推送目标;
- 如需对该目标进行信息修改或删除操作,请分别点击操作栏下的【修改】或【删除】按钮。
三、安装企业微信APP
- 在手机端前往“应用商城”,搜索并下载“企业微信APP”;
- 完成下载后登录企业微信;
- 如之前步骤全部顺利完成后,所推送目标的企业微信上会收到邀请通知,收到通知后点击该通知并同意加入企业。
四、使用企业微信查看告警
- 如若之前步骤都配置正确,即可在企业微信接收告警信息;
- 打开企业微信,点击所创建的应用查看告警详情。
音柱
此功能主要用于设备对接IP音柱。
点击此处展开
一、音柱购买
【京东】:音柱购买链接
【备注】:BH协议
二、音柱配置
首先在电脑上下载并安装所购买音柱的配置软件:
-
链接:点击此处跳转
-
提取码:0000
-
安装完成后打开软件搜索设备(请确保安装配置程序的电脑与音柱在同一个网络内,否则将搜索不到音柱);
三、音柱IP配置
音柱IP有两种配置方式:dhcp
和static
。dhcp
为自动获取IP地址(IP可能发生变化),static
为静态IP。可根据需求点击配置方式下拉选择。若需要修改IP地址,需点击IP地址进行修改。
四、晓知精灵配置
- 登录晓知精灵设备后台;
- 在设备界面依次点击【数据推送】-【告警】-【音柱】页签进入音柱管理页面;
- 点击【添加音柱】按钮;
- 填写音柱名称、音柱IP地址、音量、播报次数;(提示音:播报告警语言前的前缀音频)
- “选择视频来源算法”下会自动出现已启用的摄像头或视频流;
- 在使用音柱之前先要设置相关的报警音频,选择需要配置的算法,点击其后面【麦克风】的图标;
- 报警语音可选择“生成”或“上传”两种方式,生成方式下通过输入文字设置语音内容,上传方式下通过上传MP3文件设置语音内容;
- 此处以生成为例,在确认好文本后点击【生成】按钮,在视听没问题后点击【完成】按钮;
- 点击麦克风旁的【试听】按钮可对报警语音内容进行试听,只有设置完成报警内容的算法才会出现试听按钮;
- 【勾选】算法,点击【保存】。
- 至此,所有的配置已经完成,当所绑定算法产生告警的时候IP音柱会自动开始语音播报。
自定义API
此功能主要用于设备的二次开发,自定义API接收告警。
点击此处展开
一、功能概述
示例代码下载(点击此处跳转)
Api
类是一个用于处理检测结果、告警信息和告警视频的工具类。
此类名、方法名等框架是固定的,不可修改。你可以通过实现回调方法的具体逻辑(如 send_result_callback
、send_alert_callback
和 send_alert_video_callback
)以及配置类的属性(如 ignore_result
、ignore_alert
等)来实现具体功能。
二、类的属性
Api
类必须包含以下主要属性(属性值只能在构造函数中修改),用于控制其行为,修改位置如下图:
属性名称 | 默认值 | 描述 |
---|---|---|
ignore_result | True | 是否发送检测结果。True 表示不发送,False 表示发送。 |
ignore_alert | True | 是否发送告警信息。True 表示不发送,False 表示发送。 |
draw_image | True | 是否在告警图片上绘制告警信息。True 表示绘制,False 表示不绘制。 |
ignore_alert_video | True | 是否发送告警视频。True 表示不发送,False 表示发送。 |
三、类的方法
Api
类必须包含以下三个方法,用于发送检测结果、告警信息和告警视频。可根据需求实现具体的回调方法。
1. 检测结果
-
方法:send_result_callback(self, result):
-
功能:发送检测结果。
-
参数:
result
:检测结果的内容。具体格式和内容如下:
-
示例:
{ "hit": false, //是否命中 "time": 1742458167.288579, //告警时间戳 "device": { "id": "设备id", "name": "设备名称", "desc": "设备描述" }, "source": { "id": "数据源id", "ipv4": "ip地址", "desc": "数据源描述" }, "alg": { "name": "算法名称英文", "ch_name": "算法名称中文", "type": "general" }, "reserved_data": { "bbox": { "rectangles": [ { "xyxy": [668,562,790,656], //左上角、右下角坐标 "color": [0,0,255], //BGR颜色 "label": "未佩戴安全帽", //标签 "conf": 0.91, //置信度 "ext": {} //扩展字段 } ], "polygons": {}, //多边形对象 "lines": {} //线段对象 }, "custom": {} }, "hazard_level": "", //危险等级 }
2. 告警信息
-
方法:send_alert_callback(self, alert)
-
功能:发送告警信息。
-
参数:
alert
:告警信息的内容。具体格式和内容如下:
-
示例:
{ "id": "67dbcd3c5dc58a7aaa019e41", //告警id "alert_time": 1742458171.808598, //告警时间戳 "device": { "id": "设备id", "name": "设备名称", "desc": "设备描述" }, "source": { "id": "数据源id", "ipv4": "ip地址", "desc": "数据源描述" }, "alg": { "name": "算法名称英文", "ch_name": "算法名称中文", "type": "general" }, "hazard_level": "", //危险等级 "image": "img_base64", //base64编码的图片数据 "reserved_data": { "bbox": { "rectangles": [ { "xyxy": [668,560,790,656], //左上角、右下角坐标 "color": [0,0,255], //BGR颜色 "label": "未佩戴安全帽", //标签 "conf": 0.91, //置信度 "ext": {} //扩展字段 } ], "polygons": {},//多边形对象 "lines": {} //线段对象 }, "custom": {} } }
3. 告警视频
-
方法:send_alert_video_callback(self, alert_video):
-
功能:发送告警视频。
-
参数:
alert_video
:告警视频的内容。具体格式和内容如下:
-
示例:
{ "id": "67dbcd3c5dc58a7aaa019e41", //告警id "alert_time": 1742458171.808598, //告警时间戳 "device": { "id": "设备id", "name": "设备名称", "desc": "设备描述" }, "source": { "id": "数据源id", "ipv4": "ip地址", "desc": "数据源描述" }, "alg": { "name": "算法名称英文", "ch_name": "算法名称中文", "type": "general" }, "hazard_level": "", //危险等级 "video": "video_base64" //base64编码的视频数据 }
四、注意事项
- 属性配置:在调用发送方法之前,确保已经正确配置了类的属性,以启用或禁用所需的功能。
- 方法实现:默认情况下,
send_result_callback
、send_alert_callback
和send_alert_video_callback
方法是空方法。在实际使用中,需要根据具体需求实现这些方法的逻辑,例如将数据发送到服务器。
五、示例代码(TCP)以及调试方法
import json
import socket
# 导入日志
from logger import LOGGER
class Api:
def __init__(self):
"""
Attributes:
self.ignore_result: 为True时,不发送检测结果,为False则发送检测结果
self.ignore_alert: 为True时,不发送告警信息,为False则发送告警信息
self.draw_image: 为True时,告警图片会画上告警信息,为False则不画
self.ignore_alert_video: 为True时,不发送告警视频,为False则发送
"""
self.ignore_result = True
self.ignore_alert = False
self.draw_image = True
self.ignore_alert_video = True
def send_result_callback(self, result):
"""
发送检测结果回调函数
Args:
result: 检测结果数据
Returns:
"""
pass
def send_alert_callback(self, alert):
"""
发送告警信息回调函数
Args:
alert: 告警数据
Returns:
"""
try:
LOGGER.info('发送TCP告警')
# 创建TCP socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
# 连接到目标服务器(这里用示例地址和端口)
s.connect(('192.168.0.4', 10001))
# 为了方便查看日志,去掉base64编码图片
alert.pop('image')
json_data = json.dumps(alert, ensure_ascii=False)
data = json_data.encode('utf-8')
# 发送完整数据
s.sendall(data)
LOGGER.info(f'告警已发送至TCP服务器: {data}')
except Exception as e:
LOGGER.error(f'发送TCP告警失败: {str(e)}')
pass
def send_alert_video_callback(self, alert_video):
"""
发送告警视频回调函数
Args:
alert_video: 告警视频数据
Returns:
"""
pass
首先打开终端管理(文章最底部)
将上述代码上传至自定义API,然后打开终端管理输入 cd /home/ema/ks/ks968/data/logs/sink/
进入sink模块,然后输入tail -n 100 -f sink.log
即可查看实时日志。
真诚点赞 诚不我欺
回复