跨芯片统一边缘 AI 事件 Schema 与端到端验收协议模板
调研日期:约 2026-10-25(Asia/Shanghai)
用途:多芯片站端盒子统一上报契约 + 可写进标书的验收条款
参考实践:Eclipse Sparkplug B、NVIDIA DeepStreamnvmsgconv/nvmsgbroker、IEC 61850/CIM 命名思路;以可落地 JSON/MQTT 模板为主,厂商原生字段仅作映射。
A. 跨芯片统一边缘 AI 事件 JSON / MQTT Schema
A.1 设计原则
- 一张业务契约,多条适配器:站端/云端只认本 Schema;DeepStream、算能、爱芯、TROS、RK 各自写薄适配层,禁止业务系统直连厂商私有 JSON。
- 位置语义对齐电力二次习惯:
site(站)→bay(间隔/区域)→cam(摄像机/传感器通道),便于与二次系统点表、巡检工单对齐(IEC 思路,非强制 61850 编码)。 - 告警与遥测分离:高频检测框走
events/frames;设备在线、温度、队列深度走telemetry/status,避免把每帧 bbox 塞进 SCADA。 - 可审计:必带
model_ver、schema_ver、device_id、UTC 时间戳;抓拍可选、可脱敏。 - 断线不堵推理:MQTT 发布必须异步 + 有界队列;满则丢低优先级帧事件,不得反压解码/NPU 主路径。
A.2 MQTT Topic 层级(推荐)
edgeai/{org}/{site}/{device_id}/events/{task} # QoS1,告警/检出事件
edgeai/{org}/{site}/{device_id}/frames/{cam} # QoS0,可选全帧摘要(节流)
edgeai/{org}/{site}/{device_id}/telemetry # QoS0/1,功耗/温度/FPS
edgeai/{org}/{site}/{device_id}/status # QoS1,retained:online/offline
edgeai/{org}/{site}/{device_id}/cmd/# # 下行:阈值、启停路、抓拍
约定:
| 段 | 示例 | 说明 |
|---|---|---|
org |
grid-east |
业主/租户 |
site |
SS-220-01 |
变电站/厂区编码 |
device_id |
box-orin-03 |
边缘主机唯一 ID(MAC/序列号哈希) |
task |
ppe / intrusion / meter / arc_proxy |
业务任务名,非模型文件名 |
cam |
bay3-camA |
与配置表一致 |
可选 Sparkplug B 备注:若需接入 Ignition/SCADA,可并行发布
spBv1.0/{group_id}/DDATA/{edge_node_id}/{device_id},将本 Schema 的标量(告警计数、最高 score、在线位)拆成 metrics;bbox 数组建议仍走上方 edgeai/.../events JSON,避免 Sparkplug 指标爆炸。Sparkplug 主题形态为 spBv1.0/<group>/<NBIRTH|NDATA|DDATA|...>/<edge_node>/[device],payload 为 Protobuf metrics,与本 JSON 契约并存而非替代。
A.3 统一事件 JSON(一帧多目标,推荐默认)
{
"schema_ver": "1.0.0",
"msg_id": "01JABCDEF1234567890XYZ",
"ts_utc": "2026-10-25T00:21:00.123Z",
"ts_mono_ms": 18442210,
"org": "grid-east",
"site": "SS-220-01",
"bay": "bay-3",
"device_id": "box-rk3588-07",
"cam": "bay3-camA",
"stream": { "w": 1920, "h": 1080, "fps_in": 25, "codec": "h264" },
"task": "ppe",
"model": {
"name": "yolov8n-ppe",
"ver": "2026.10.12-int8",
"input": 640,
"quant": "int8",
"backend": "rknn"
},
"frame_id": 102938,
"latency_ms": { "e2e": 42, "infer": 18, "decode": 8, "post": 4 },
"objects": [
{
"track_id": 17,
"cls": "no_helmet",
"cls_id": 2,
"score": 0.87,
"bbox": { "x": 0.412, "y": 0.221, "w": 0.085, "h": 0.140, "fmt": "xywh_norm" },
"attrs": { "zone": "restricted" }
}
],
"event": {
"type": "alarm",
"severity": "high",
"code": "PPE_NO_HELMET",
"debounce_ms": 2000,
"snapshot": {
"uri": "s3://edge-snap/SS-220-01/2026/10/25/....jpg",
"b64": null,
"quality": 80,
"with_osd": true
}
},
"health": { "npu_util": 0.61, "temp_c": 58.2, "power_w": 11.4, "mqtt_q": 3 }
}
字段约定(落地必守)
| 字段 | 必填 | 说明 |
|---|---|---|
schema_ver |
Y | 破坏性变更升主版本 |
ts_utc |
Y | ISO-8601 UTC;展示再转 Asia/Shanghai |
site/bay/cam |
Y | 配置下发,禁止硬编码在模型里 |
task |
Y | 业务任务;与 model.name 解耦 |
model.ver |
Y | 含量化与导出日期,验收与回溯用 |
objects[].bbox |
Y* | 默认 归一化 xywh(相对帧宽高);像素坐标用 fmt: xyxy_px |
score |
Y* | [0,1] 浮点;阈值由边缘或云端策略配置 |
event.snapshot |
告警建议 | 优先对象存储 URI;MQTT 内嵌 b64 限 ≤100KB |
latency_ms.e2e |
验收建议 | 从取帧到发布完成 |
*无目标且无告警的心跳帧可发空 objects,用于保活。
A.4 厂商原生 → 统一 Schema 映射表
| 统一字段 | DeepStream nvmsgconv→nvmsgbroker |
算能 SE/应用 MQTT(blank 模板) | AX-Pipeline(爱芯) | TROS PerceptionTargets |
RK appsink+RKNN |
|---|---|---|---|---|---|
cam / sensor |
sensorId / CSV place-sensor 映射 |
通道号 / dev_sno+camera_id |
pipeline name / URI 别名 |
header.frame_id 或节点参数 |
自建 camera 字段 |
site/bay |
place 静态配置 |
平台侧设备树 | 配置 JSON 扩展 | 部署参数注入 | 配置文件注入 |
objects[].cls |
object type / label |
算法事件类型/标签 | det label |
targets[].type |
class / label |
score |
confidence |
比对分/检测分 | det score |
Roi/属性置信度字段 | confidence |
bbox |
bbox topleft/bottomright 像素 |
厂商框(多为像素) | box(常为像素/letterbox) | rois[].rect x_offset/y_offset/w/h 像素 |
常见归一化 [x1,y1,x2,y2] |
track_id |
object tracking id | 视应用 | ByteTrack track_id |
targets[].track_id |
自研/可选 |
frame_id/ts |
@timestamp + frame |
事件时间戳 | 管道时钟 | header.stamp |
timestamp |
model.ver |
自定义 user-meta / 配置 | 应用版本字段 | model_path 文件名解析 |
节点 model_file_name |
rknn 文件名/清单 |
snapshot |
另路编码/对象存储 | 历史事件常含抓拍 | OSD 支路另存 | captures[] |
应用层 JPEG |
| 发布路径 | nvmsgbroker + libnvds_mqtt_proto.so |
应用直连 Broker | 需自接 MQTT/HTTP | ROS2 topic→桥 MQTT | appsink 回调→MQTT 客户端 |
适配器要点
- DeepStream:官方 full schema 常为每对象一条 payload,minimal 为每帧多对象;统一层建议在边缘先聚合成「每帧一条」再发,降低 Broker 风暴。
nvmsgbroker本身不定义业务字段,只转发nvmsgconv产物。 - 算能:SDK/TPU 不管 MQTT schema;SE 课程与旧版端云对接以应用事件为准,blank/试验箱模板字段因版本而异 → 一律在适配器归一。
- AX-Pipeline:公开输出以 det/track(id、label、score、box)为主,无强制云端 JSON → 在 OSD/异步 worker 后挂统一发布器。
- TROS:
ai_msgs/PerceptionTargets含targets/disappeared_targets/perfs;消失目标可映射为event.type=track_lost或仅本地清理。 - RK:社区实践多为 appsink 取帧 → RKNN → 自建 JSON;bbox 归一化与否必须在适配器显式声明
fmt。
A.5 下行命令(简表)
Topic:edgeai/{org}/{site}/{device_id}/cmd/{action}
{ "schema_ver":"1.0.0", "ts_utc":"...", "action":"set_threshold",
"task":"ppe", "params": { "score_min": 0.55, "debounce_ms": 2000 } }
常用 action:start_cam / stop_cam / set_threshold / reload_model / snap_now / set_mqtt_qos。
A.6 坐标、类别与节流规则(联调 checklist)
- 坐标:统一层默认
xywh_norm;若上游为 letterbox,适配器必须先反变换到原图再归一化,并在attrs.letterbox=true标注,避免 OSD 与云端画框错位。 - 类别:
cls用稳定英文/拼音码(如no_helmet),展示名由云端词典翻译;禁止把中文标签直接当主键。 - 节流:无告警帧可按
publish_every_n(如 15)上报摘要;告警帧立即发、不受节流。同一track_id在debounce_ms内只升一次告警。 - 时钟:
ts_utc以主机 NTP 为准;无网环境用ts_mono_ms做相对排序,上云后再做墙钟校准。 - 安全:Topic 含
org/site,Broker 用 ACL 按站隔离;TLS 默认开启;设备证书按device_id轮换。
A.7 最小心跳与状态报文
status(retained)示例:
{
"schema_ver": "1.0.0",
"device_id": "box-rk3588-07",
"site": "SS-220-01",
"online": true,
"ts_utc": "2026-10-25T00:21:00Z",
"sw_ver": "edge-agent/1.4.2",
"cams": ["bay3-camA", "bay3-camB"],
"tasks": ["ppe", "intrusion"]
}
telemetry 建议 5~30 s 一条:整机功率、SoC/NPU 温度、每路 fps_in/fps_infer、MQTT 队列深度、丢帧计数。运维看板只订 telemetry/status,算法平台订 events,职责分离。
B. 端到端验收协议模板(可写进标书)
B.1 固定条款(全文可粘贴)
B.1.1 模型与预处理(锁定)
- 基准模型:YOLOv8n(或招标方提供的同任务项目权重);输入边长 640;部署精度 INT8(或招标方书面同意的 FP16)。
- 后处理:必须含 NMS(IoU 阈值书面固定,默认 0.45);计时包含前处理、推理、NMS、坐标映射。
- 类别表、score 阈值、告警防抖时间在《配置基线表》冻结;验收期不得擅自改阈值刷指标。
B.1.2 视频与路数
- 输入:N 路 1080p(默认 1920×1080,H.264/H.265,25 或 30 fps,以附录源为准);N 在合同中填写(建议站端主机 N≥8,巡检盒子 N≥4)。
- 码流来源:RTSP 真机或招标方提供的循环录像;禁止仅用预处理好的 RGB 文件冒充端到端。
- 端到端路径:解码 →(可选缩放/letterbox)→ NPU/GPU 推理 → NMS → 统一 Schema 发布(MQTT)→ 可选 OSD/编码。
B.1.3 性能指标(填写空表见 B.2)
- 有效 FPS:每路每秒完成「推理+NMS+发布」的帧数中位数;允许按任务设
infer_stride,但须在报告中明示等效 FPS。 - e2e 延迟:取帧时间戳到 MQTT
PUBACK(QoS1)或本地入队完成(QoS0)的 P50/P95。 - 整机功耗:在约定测点用功率计测交流进线或 DC 母线,报告 空闲 / 满载 N 路 / 30 分钟稳态 三档,单位 W。
- 热与降频:满载连续运行 ≥30 分钟;若出现 CPU/NPU/GPU 降频,须给出降频时刻、频率曲线与 FPS 跌落幅度;因降频导致 FPS 低于承诺值的,视为不达标。
- 精度抽检:固定验证集(≥500 张或 ≥10 分钟标注片段);mAP 或业务召回/误报达到合同阈值;INT8 相对 FP32 精度跌落不超过约定百分点。
B.1.4 可靠性与消息总线
- MQTT 断线不堵推理:人为断开 Broker ≥5 分钟,解码与推理 FPS 相对断线前跌落 ≤5%;恢复后积压事件按策略补传或丢弃,不得 OOM。
- 发布队列深度有上限;队列满时丢弃
frames级消息,保留alarm级(策略写进报告)。 - 设备掉电重启后 5 分钟内自动恢复拉流与模型加载;
statusretained 消息正确反映 online。 - 日志不得落明文密码;模型文件校验哈希(SHA256)与
model.ver一致。
B.1.5 测试环境与报告
- 环境温度:默认 25±5℃;户外柜加测 40℃(可选条款)。
- 报告至少含:硬件清单与固件/BSP 版本、模型导出工具链与版本、GStreamer/管线拓扑、功耗曲线、FPS/延迟表、降频曲线、MQTT 断线实验、精度表、统一 Schema 样例报文。
- 公开芯片峰值 TOPS 不得直接等同验收 FPS;承诺值必须以本协议端到端实测为准。
B.2 各芯片填写示例空表
将「承诺」列在投标时填写;「实测」列在验收时填写。N、功耗、FPS 为示例量级占位,非本调研的保证值。
表 1 — BM1684X(算能站端主机)
| 项 | 承诺 | 实测 | 备注 |
|---|---|---|---|
| 板型/模组 | BM1684X 盒/卡 ____ | SoC/PCIe | |
| BSP / libsophon | |||
| 模型格式 | bmodel INT8 | TPU-MLIR 版本____ | |
| N 路 1080p | N=____ | 含解码 | |
| 含 NMS 的有效 FPS/路 | ≥____ | stride=____ | |
| e2e P95 延迟 ms | ≤____ | ||
| 整机功耗 W(满载) | ≤____ | 测点:____ | |
| 30 min 降频 | 无 / 可接受跌落____% | 附曲线 | |
| MQTT 断线推理跌落 | ≤5% | ||
| Schema 适配器 | 算能事件→统一 JSON | 通过/不通过 |
表 2 — RK3588
| 项 | 承诺 | 实测 | 备注 |
|---|---|---|---|
| 板型 | RK3588 ____ | NPU 核心数 | |
| rknn-toolkit / runtime | |||
| 模型 | yolov8n .rknn INT8 |
||
| N 路 1080p | N=____ | mpp 解码 | |
| 有效 FPS/路 | ≥____ | appsink/管线 | |
| e2e P95 ms | ≤____ | ||
| 功耗 W | ≤____ | ||
| 30 min 降频 | |||
| MQTT 断线 | ≤5% | ||
| Schema | appsink→统一 JSON |
表 3 — NVIDIA Jetson Orin(Nano Super / NX / AGX 择一)
| 项 | 承诺 | 实测 | 备注 |
|---|---|---|---|
| 模组 + 功率模式 | Orin ____ / ____W | nvpmodel/jetson_clocks | |
| JetPack / DeepStream | |||
| 引擎 | TensorRT INT8 engine | ||
| N 路 1080p | N=____ | nvinfer+NMS | |
| 有效 FPS/路 | ≥____ | ||
| e2e P95 ms | ≤____ | nvmsgbroker 路径 | |
| 功耗 W | ≤____ | ||
| 30 min 降频 | |||
| MQTT 断线 | ≤5% | ||
| Schema | nvmsgconv 映射统一 JSON | 推荐聚合成每帧一条 |
表 4 — AX650(爱芯站端)
| 项 | 承诺 | 实测 | 备注 |
|---|---|---|---|
| 模组/盒 | AX650 ____ | ||
| AX 引擎 / ax-pipeline | BSP____ | ||
| 模型 | .axmodel INT8 |
||
| N 路 1080p | N=____ | ||
| 有效 FPS/路 | ≥____ | npu_max_fps 设置____ | |
| e2e P95 ms | ≤____ | inproc/process____ | |
| 功耗 W | ≤____ | ||
| 30 min 降频 | |||
| MQTT 断线 | ≤5% | 自建发布器 | |
| Schema | det/track→统一 JSON |
表 5 — RDK X5(地平线/D-Robotics)
| 项 | 承诺 | 实测 | 备注 |
|---|---|---|---|
| 板型 | RDK X5 ____ | ||
| TROS / 算法包版本 | |||
| 模型 | .bin/hbm INT8 |
||
| N 路 1080p | N=____ | ||
| 有效 FPS/路 | ≥____ | 含 BPU | |
| e2e P95 ms | ≤____ | ROS2→MQTT 桥 | |
| 功耗 W | ≤____ | ||
| 30 min 降频 | |||
| MQTT 断线 | ≤5% | 桥接队列策略 | |
| Schema | PerceptionTargets→统一 JSON | 含 disappeared 策略 |
B.3 验收判定(建议写入合同)
- 通过:B.1 全部强制款满足,且 B.2 对应芯片表「实测」达到「承诺」。
- 有条件通过:次要项(如 snapshot URI 格式)限期整改;FPS/功耗/降频/MQTT 断线为否决项。
- 不通过:任一否决项失败,或无法提供可复现脚本/配置基线。
B.4 测试脚本与否决项清单(现场用)
建议最小脚本集:① 多路拉流与 FPS 采样;② 功率计 CSV 对齐时间戳;③ MQTT 断线/复连;④ 固定验证集精度;⑤ 导出 1 小时日志包(管线配置、模型哈希、schema_ver 样例)。
否决项(任一失败即不通过):承诺 FPS、满载功耗上限、30 分钟降频导致的 FPS 跌破承诺、MQTT 断线反压推理、端到端路径缺少真实解码、INT8 精度跌落超标、无法出示 model.ver 与文件哈希一致性。
非否决但须整改:snapshot 命名不规范、telemetry 缺字段、OSD 与 bbox 坐标系不一致、QoS 选择与文档不符。
B.5 标书措辞示例(可直接改写)
投标方应在边缘侧实现与招标方《边缘 AI 事件 JSON Schema v1.0》一致的 MQTT 上报,并提供 DeepStream / 算能 / 爱芯 / TROS / RK 至少一种适配证明。验收以 N 路 1080p、YOLOv8n 或项目权重、640 输入、INT8、含 NMS 的端到端实测为准,满载连续 30 分钟,记录整机功耗与是否降频;MQTT Broker 不可用期间推理主路径不得阻塞。芯片公开 TOPS 与单模型 bench 不得替代本协议指标。
继续深挖建议
- JSON Schema / Protobuf 双栈:用 JSON Schema 做联调,生产可选 Protobuf+MQTT,并给出
msg_id幂等与云端去重窗口。 - 与 IEC 61850 / CIM 的点表映射:将
event.code映射到间隔层报警逻辑节点(告警级别、复归),做一张「AI 事件 ↔ 二次信号」对照表。 - Sparkplug 宿主应用 PoC:仅把 online、告警计数、最高 score、功耗做成 metrics,验证 Ignition 侧是否足够运维。
- 抓拍合规:人脸/人员场景增加 ROI 马赛克、保留期、跨境传输条款;对象存储预签名 URL 时限。
- 统一适配器开源薄库:C++/Python 插件,输入厂商结构体,输出本 Schema;附 DeepStream probe、RK appsink、TROS subscription、AX det 回调样例。
- 验收自动化:一键脚本拉 N 路、断 MQTT、打功率计日志、出 HTML 报告,减少现场扯皮。
- 时序类任务扩展:电弧/局放/振动事件共用 envelope,
objects改为series(窗口长、采样率、特征),与视觉任务并列。 - 多任务同框:PPE + 入侵 + 表计并存时,规定
task分 topic 还是单报文多tasks[],并评估 Broker 带宽。 - 边缘规则引擎:将 debounce、区域入侵多边形、跨线计数放在统一层,避免每个芯片插件重写业务规则。
- OTA 与 schema_ver 联动:模型仓发布必须带兼容的
schema_ver;不兼容则双发过渡期(旧 topic + 新 topic)至少两个版本窗口。
本文件为调研模板,芯片 FPS/功耗须以项目实测填入 B.2;厂商 API 随 SDK 版本变化,映射表应在选型和联调节点各复核一次。