服务端发送订阅请求
sequenceDiagram
participant web端
participant 服务端
participant 设备
web端 -->> 服务端 : 配置订阅请求
服务端 ->> +设备 : 1. SUBSCRIBE 请求 订阅ai信息
设备 -->> -服务端 : 2. 回复订阅成功信息
par 设备录像或者拍照
设备 -->> +设备: 等待识别到指定ai信息
设备 -->> -设备: 识别结果规则匹配
end
设备 ->> +服务端 : 3. NOTIFY 识别到物体通知
服务端 -->> -设备 : 4. 回复收到信息
服务端 ->> 服务端 : 处理通知
服务端 ->> web端 : 推送识别到ai数据通知
1:事件观察者向事件源发送SUBSCRIBE请求,请求消息体携带订阅参数; 2:事件源应将订阅成功与否的响应消息返回给该事件观察者。 服务端 -> 设备
Via:SIP/2.0/UDP 事件观察者域名或IP地址
Max-Forwards:70
From:显示名<sip:事件观察者编码@事件观察者域名或IP地址>;tag=BK32B1U8DKDrB
To:显示名<sip:事件源编码@事件源域名或IP地址>
Call-ID:17250
CSeq:1SUBSCRIBE
Expires:90
Event:presence
Content-type:Application/MANSCDP+XML
Content-Length:消息实体的字节长度
<? xmlversion="1.0"?>
<Query>
<CmdType>Alarm </CmdType>
<SN>17430</SN>
<DeviceID>64010000001340000001</DeviceID>
<StartAlarmPriority>1</StartAlarmPriority>
<EndAlarmPriority>4</EndAlarmPriority>
<AlarmMethod>0</AlarmMethod>
<StartTime>2010-11-11T00:00:00</StartTime>
<EndTime>2010-12-11T00:00:00</EndTime>
</Query>
设备 -> 服务端
Via:SIP/2.0/UDP 事件观察者域名或IP地址
From:显示名<sip:事件观察者编码@事件观察者域名或IP地址>;tag=BK32B1U8DKDrB
To:显示名<sip:事件源编码@事件源域名或IP地址>
Call-ID:17250
CSeq:1SUBSCRIBE
Expires:90
Event:presence
Content-type:Application/MANSCDP+XML
Content-Length:消息实体的字节长度
<? xmlversion="1.0"?>
<Response>
<CmdType>Alarm </CmdType>
<SN>17430</SN>
<DeviceID>64010000001340000001</DeviceID>
<Result>OK</Result>
</Response>
设备 -> 服务端
Via:SIP/2.0/UDP 事件源域名或IP地址
Max-Forwards:70
From:显示名<sip:事件源编码@事件源域名或IP地址>;tag=BK32B1U8DKDrB
To:显示名<sip:事件观察者编码@事件观察者域名或IP地址>
Call-ID:17250
CSeq:1NOTIFY
Subscription-State:active;expires=90;retry-after=0
Event:presence
Content-type:Application/MANSCDP+XML
Content-Length:消息实体的字节长度
<? xmlversion="1.0"?>
<Notify>
<CmdType>Alarm</CmdType>
<SN>1</SN>
<DeviceID>64010000001340000001</DeviceID>
<AlarmPriority>4</AlarmPriority>
<AlarmMethod>2</AlarmMethod>
<AlarmTime>2009-12-04T16:23:32</AlarmTime>
<AlarmDescription>警情描述</AlarmDescription>
<Longitude>171.3</Longitude>
<Latitude>34.2</Latitude>
</Notify>
服务端 --> 设备
Via:SIP/2.0/UDP 事件源域名或IP地址
From:显示名<sip:事件源编码@事件源域名或IP地址>;tag=BK32B1U8DKDrB
To:显示名<sip:事件观察者编码@事件观察者域名或IP地址>
Call-ID:17250
CSeq:1NOTIFY
Content-type:Application/MANSCDP+XML
Content-Length:消息实体的字节长度
<? xmlversion="1.0"?>
<Response>
<CmdType>Alarm </CmdType>
<SN>1</SN>
<DeviceID>64010000001340000001</DeviceID>
<Result>OK</Result>
</Response>
对订阅报警方法进行扩展,使用4级警情-报警条件为7来设定报警
头数据
Via:SIP/2.0/UDP 事件观察者域名或IP地址
Max-Forwards:70
From:显示名<sip:事件观察者编码@事件观察者域名或IP地址>;tag=BK32B1U8DKDrB
To:显示名<sip:事件源编码@事件源域名或IP地址>
Call-ID:17250
CSeq:1SUBSCRIBE
Expires:90
Event:presence
Content-type:Application/MANSCDP+XML
Content-Length:消息实体的字节长度
xml数据结构
<? xmlversion="1.0"?>
<Query>
<CmdType>Alarm </CmdType>
<SN>17430</SN>
<DeviceID>64010000001340000001</DeviceID>
<StartAlarmPriority>4</StartAlarmPriority>
<EndAlarmPriority>4</EndAlarmPriority>
<AlarmMethod>7</AlarmMethod>
<StartTime>2010-11-11T00:00:00</StartTime>
<EndTime>2010-12-11T00:00:00</EndTime>
<!-- 上方数据为国标必须数据 -->
<!--
tagName=HfyAiInfo 此特殊标签表示对ai进行配置
aiNum 启用的ai算法数量
-->
<HfyAiInfo aiNum="3">
<HfyAi>
<!-- 算法类型 1:人脸 2:火情 3:车牌-->
<Arithmetic>1</Arithmetic>
<!-- 触发方式 人脸和车牌有效 1:不限制 2:白名单策略 3:黑名单策略 -->
<TriggerType>3</TriggerType>
<!-- 资源路径 设备端获取人脸特征数据信息 这些数据怎么让设备获取 -->
<ResourcePath>http://127.0.0.1/</ResourcePath>
<!-- 资源上传地址,用于在识别成功后上传多媒体资源 -->
<uploadUrl>http://127.0.0.1:8080/up</uploadUrl>
<!-- 刷新数据间隔,单位秒 默认2分钟 -->
<RefreshTime>60</RefreshTime>
<!-- 可靠度百分比,大于此值触发报警事件 0-100 -->
<Score>70.0</Score>
</HfyAi>
<!-- 火情识别 -->
<HfyAi>
<Arithmetic>2</Arithmetic>
<Score>45.3</Score>
<uploadUrl>http://127.0.0.1:8080/fire</uploadUrl>
</HfyAi>
<!-- 车牌-->
<HfyAi>
<Arithmetic>3</Arithmetic>
<TriggerType>1</TriggerType>
<ResourcePath>http://127.0.0.1/carList</ResourcePath>
<RefreshTime>60</RefreshTime>
<Score>65.3</Score>
</HfyAi>
</HfyAiInfo>
</Query>
头数据
Via:SIP/2.0/UDP 事件观察者域名或IP地址
From:显示名<sip:事件观察者编码@事件观察者域名或IP地址>;tag=BK32B1U8DKDrB
To:显示名<sip:事件源编码@事件源域名或IP地址>
Call-ID:17250
CSeq:1SUBSCRIBE
Expires:90
Event:presence
Content-type:Application/MANSCDP+XML
Content-Length:消息实体的字节长度
xml 结构体
<? xmlversion="1.0"?>
<Response>
<CmdType>Alarm </CmdType>
<SN>17430</SN>
<DeviceID>64010000001340000001</DeviceID>
<Result>OK</Result>
</Response>
设备端获取数据流程
graph TD
a(开始检查数据) --> b[请求url]
--> c{是否携带数据版本信息}
c -->|否| d[服务端返回当前版本] --> a
c -->|是| f{版本是否一致}
f -->|否| e[返回版本号和数据]
f -->|是| g[返回版本一致]
--> 不更新数据
--> wait[等待] -->a
e --> 更新数据 -->wait
设备端在指定情况下推送消息到gb服务端
<? xmlversion="1.0"?>
<Notify>
<CmdType>Alarm</CmdType>
<SN>1</SN>
<DeviceID>64010000001340000001</DeviceID>
<AlarmPriority>4</AlarmPriority>
<AlarmMethod>7</AlarmMethod>
<AlarmTime>2009-12-04T16:23:32</AlarmTime>
<AlarmDescription>警情描述</AlarmDescription>
<Longitude>171.3</Longitude>
<Latitude>34.2</Latitude>
<!-- 通过扩展报警来实现自定义ai数据上报 -->
<HfyAiInfo>
<!-- 识别到的数据框,有识别到多少就是多少 -->
<AiDataItem>
<!-- 匹配到的ai算法的类型 -->
<Arithmetic>3</Arithmetic>
<!-- 相似度 -->
<Score>65.3</Score>
<!-- 车牌号-->
<CarPlate></CarPlate>
<!-- 车牌类型 -->
<PlateType></PlateType>
<!-- 识别到的ai主题框-->
<DrawBox>x1,x2,y1,y2</DrawBox>
</AiDataItem>
<AiDataItem>
<Arithmetic>1</Arithmetic>
<Score>85.0</Score>
<!-- 人脸特征值数据 -->
<faceId>1234</faceId>
<DrawBox>x1,x2,y1,y2</DrawBox>
</AiDataItem>
<!-- 火情-->
<AiDataItem>
<Arithmetic>2</Arithmetic>
<Score>65.3</Score>
<DrawBox>x1,x2,y1,y2</DrawBox>
</AiDataItem>
<!-- 多媒体资源的uuid,用于和http post方式上传的数据进行绑定 -->
<MediaId>10086</MediaId>
</HfyAiInfo>
</Notify>
<? xmlversion="1.0"?> update 17430 64010000001340000001 OK
摄像头会在识别时会有对应的图像或者录像数据,这部分得看怎么和通知绑定起来
- 通过 http post 的方式上传文件,但是参数携带 MediaId
请求参数 | 字段 | 位置 | 必须? | 备注 | | --- | --- | --- | --- | | libId | path | y | 数据库id 由wvp平台下发指定 | | v | query | n | 数据库版本号 | | p | version | n | 页码 默认1 | | l | limit | n | 每页数量 默认50 |
服务端返回数据结构 json | 字段 | 类型 | 备注 | |-------| --- |------------------------------| | code | int | 调用状态码 0:成功,携带指定数据 2:无版本号 | | v | string | 版本号 生成规则 hfy+随机uid,指定接口只有一个值 | | data | array | 识别名单列表,为0时存在 | | page | int | 页码 | | limit | int | 限制值 | | total | int | 总数量 |