1、前置条件:设备接入事件云存
物联网智能视频服务(消费版)平台提供的视频 AI 分析能力要求设备上传云存事件录像,接入流程如下:
通过云 API 为设备开通事件云存套餐。详见 开通云存套餐。
设备端启用云存储模块,上报云存事件并将音视频数据推送到云端。详见设备接入手册中的 云存储模块。
2、设备开通视频 AI 分析能力
2.1 申请视频AI分析增值服务能力
打开控制台,进入产品开发页面-选择需开通功能的产品-进入产品开发物模型定义页面-切换至产品高级功能,申请开通产品的视频 AI 分析高级功能。
2.2 设备云存AI分析能力开通
您可以调用云 API 修改设备云存 AI 分析服务 为指定设备开启视频 AI 分析能力。在已开启视频 AI 分析能力的设备上报云存事件后,平台将为设备上传的视频创建视频 AI 分析任务,并返回分析结果。
物联网智能视频服务(消费版)平台当前支持以下视频 AI 分析能力:
视频 AI 分析能力 | ServiceType 取值 |
包裹检测 | PackageDetect |
在为设备开通视频 AI 分析能力时,您需要传入相应的
ServiceType
参数。若您期望为一台设备开通多种视频 AI 分析能力,您需要对每种能力分别调用 修改设备云存 AI 分析服务 云 API,并传入相应的 ServiceType
参数。包裹检测输入源及识别结果示例:
3、获取视频 AI 分析结果
您可以通过云 API 查询视频 AI 分析结果,或通过 HTTP 接口接收视频 AI 分析结果回调。
3.1 通过云 API 查询分析结果
字段含义
TaskId: TaskId 字段值为视频 AI 分析任务的唯一标识符。
Status: Status 字段表示视频 AI 分析任务的运行状态,以及粗略的结果信息。
字段值 | 含义 |
1 | 分析失败 |
2 | 分析成功,但未识别到任何目标 |
3 | 分析成功,且识别到至少一个目标 |
4 | 分析任务正在执行中 |
Result: Result 字段为视频 AI 分析结果的明细信息。对不同的视频 AI 分析能力,其输出格式可能有所不同。
视频 AI 分析能力 | Result 格式 | 示例输出 |
包裹检测 | 可能取值: plastic-bags file-bags paper-bags 当识别到多种不同类型的包裹时,使用空格作为分隔符拼接为一个字符串。 | plastic-bags file-bags |
3.2 通过 HTTP 接口接收分析结果回调
您可以在控制台为指定产品设置视频 AI 分析的 HTTP 回调配置。在完成 HTTP 回调配置后,平台会将该产品下设备的视频 AI 分析结果转发到指定的 HTTP 回调 URL。
您需要部署一个符合回调接口定义的 HTTP 服务,并使其可以从公网访问,以完成 HTTP 回调配置并接收视频 AI 分析结果回调。回调接口定义如下:
GET /
连通性检查:您需要取出 HTTP 请求头部 Echostr
的值,将其作为 HTTP 响应的内容,并返回 200 OK 状态码。POST /
分析结果回调:您可以从该接口接收平台推送的视频 AI 分析结果。视频 AI 分析结果为 JSON 格式,位于 HTTP 请求体中。在成功接收该请求后,应返回 200 OK 状态码。注意:
在控制台配置 HTTP 回调 URL 时,平台会向指定的 URL 发起连通性检查请求,若连通性检查失败,则 HTTP 回调配置不会保存生效。
示例:连通性检查-请求
当您在控制台配置 HTTP 回调 URL 时,平台向该 URL 发起连通性检查请求。
GET / HTTP/1.1User-Agent: IotVideo/1.0Echostr: 3A4dsItMWYmL7pkL
示例:连通性检查-响应
当您部署的 HTTP 服务接收到连通性检查请求时,应当返回状态码为 200 OK 的响应,且响应内容为 HTTP 请求头部
Echostr
的值。200 OKContent-Type: text/plainContent-Length: 163A4dsItMWYmL7pkL
示例:分析结果回调-请求
当视频 AI 分析任务完成时,平台会携带分析结果请求指定的 HTTP 回调 URL。分析结果为 JSON 格式,位于 HTTP 请求体中。
POST / HTTP/1.1User-Agent: IotVideo/1.0Content-Type: application/json{"MsgType": "ai_analytics_result","ProductId": "MVTYMD8YCD","DeviceName": "dev001","ServiceType": "PackageDetect","TaskId": "95990598-aba1-465e-9993-3f90c071e5d9","Status": 3,"Result": "paper-bags file-bags plastic-bags","Time": "2024-04-10 18:12:05"}
示例:分析结果回调-响应
当您部署的 HTTP 服务接收到分析结果回调请求时,应当返回状态码为 200 OK 的响应表示成功接收。若请求失败、超时未收到响应,或返回的 HTTP 状态码不为 200,平台会延迟 5 秒后重试请求,最多重试 2 次。
200 OKContent-Length: 0
另外地,您可以配置鉴权 Token 以验证请求来自物联网智能视频服务(消费版)平台。当您配置了鉴权 Token 时,平台发起的请求会附加以下 HTTP 请求头部。其中,
Nonce
和 Timestamp
用于防止重放攻击,Signature
可用于确认请求来自平台。请求头部 | 含义 | 示例值 |
Nonce | 随机字符串 | vLeD3GvsUx5O1kLP |
Timestamp | 秒级 UNIX 时间戳 | 1712744577 |
Signature | 签名值 | 2194e42c5e15e34ef9463de4c3f27619edf748d7 |
您可以根据配置的鉴权 Token 以及 HTTP 请求头部中的
Nonce
和 Timestamp
值,使用相同的算法计算签名,若签名值匹配则可认为请求来自平台。签名值 Signature
的计算方式为:1. 对 Nonce、Timestamp 和鉴权 Token 三个字符串按字典序排序,然后依次拼接得到一个字符串(在上述示例中,假设鉴权 Token 为
example
,则拼接后的字符串为 1712744577examplevLeD3GvsUx5O1kLP
)2. 计算拼接后字符串的 SHA1 散列值
3. 将散列值的小写十六进制表示作为
Signature
的值示例:连通性检查(包含鉴权信息)-请求
本示例假设鉴权 Token 为
example
。GET / HTTP/1.1User-Agent: IotVideo/1.0Echostr: 3A4dsItMWYmL7pkLNonce: vLeD3GvsUx5O1kLPSignature: 2194e42c5e15e34ef9463de4c3f27619edf748d7Timestamp: 1712744577