← 首页 · 边缘工程 边缘工程

跨芯片统一边缘 AI 事件 Schema 与端到端验收协议模板

调研日期:约 2026-10-25(Asia/Shanghai)
用途:多芯片站端盒子统一上报契约 + 可写进标书的验收条款
参考实践:Eclipse Sparkplug B、NVIDIA DeepStream nvmsgconv/nvmsgbroker、IEC 61850/CIM 命名思路;以可落地 JSON/MQTT 模板为主,厂商原生字段仅作映射。


A. 跨芯片统一边缘 AI 事件 JSON / MQTT Schema

A.1 设计原则

  1. 一张业务契约,多条适配器:站端/云端只认本 Schema;DeepStream、算能、爱芯、TROS、RK 各自写薄适配层,禁止业务系统直连厂商私有 JSON。
  2. 位置语义对齐电力二次习惯:site(站)→ bay(间隔/区域)→ cam(摄像机/传感器通道),便于与二次系统点表、巡检工单对齐(IEC 思路,非强制 61850 编码)。
  3. 告警与遥测分离:高频检测框走 events/frames;设备在线、温度、队列深度走 telemetry/status,避免把每帧 bbox 塞进 SCADA。
  4. 可审计:必带 model_ver、schema_ver、device_id、UTC 时间戳;抓拍可选、可脱敏。
  5. 断线不堵推理: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)

  1. 坐标:统一层默认 xywh_norm;若上游为 letterbox,适配器必须先反变换到原图再归一化,并在 attrs.letterbox=true 标注,避免 OSD 与云端画框错位。
  2. 类别:cls 用稳定英文/拼音码(如 no_helmet),展示名由云端词典翻译;禁止把中文标签直接当主键。
  3. 节流:无告警帧可按 publish_every_n(如 15)上报摘要;告警帧立即发、不受节流。同一 track_id 在 debounce_ms 内只升一次告警。
  4. 时钟:ts_utc 以主机 NTP 为准;无网环境用 ts_mono_ms 做相对排序,上云后再做墙钟校准。
  5. 安全: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 模型与预处理(锁定)

  1. 基准模型:YOLOv8n(或招标方提供的同任务项目权重);输入边长 640;部署精度 INT8(或招标方书面同意的 FP16)。
  2. 后处理:必须含 NMS(IoU 阈值书面固定,默认 0.45);计时包含前处理、推理、NMS、坐标映射。
  3. 类别表、score 阈值、告警防抖时间在《配置基线表》冻结;验收期不得擅自改阈值刷指标。

B.1.2 视频与路数

  1. 输入:N 路 1080p(默认 1920×1080,H.264/H.265,25 或 30 fps,以附录源为准);N 在合同中填写(建议站端主机 N≥8,巡检盒子 N≥4)。
  2. 码流来源:RTSP 真机或招标方提供的循环录像;禁止仅用预处理好的 RGB 文件冒充端到端。
  3. 端到端路径:解码 →(可选缩放/letterbox)→ NPU/GPU 推理 → NMS → 统一 Schema 发布(MQTT)→ 可选 OSD/编码。

B.1.3 性能指标(填写空表见 B.2)

  1. 有效 FPS:每路每秒完成「推理+NMS+发布」的帧数中位数;允许按任务设 infer_stride,但须在报告中明示等效 FPS。
  2. e2e 延迟:取帧时间戳到 MQTT PUBACK(QoS1)或本地入队完成(QoS0)的 P50/P95。
  3. 整机功耗:在约定测点用功率计测交流进线或 DC 母线,报告 空闲 / 满载 N 路 / 30 分钟稳态 三档,单位 W。
  4. 热与降频:满载连续运行 ≥30 分钟;若出现 CPU/NPU/GPU 降频,须给出降频时刻、频率曲线与 FPS 跌落幅度;因降频导致 FPS 低于承诺值的,视为不达标。
  5. 精度抽检:固定验证集(≥500 张或 ≥10 分钟标注片段);mAP 或业务召回/误报达到合同阈值;INT8 相对 FP32 精度跌落不超过约定百分点。

B.1.4 可靠性与消息总线

  1. MQTT 断线不堵推理:人为断开 Broker ≥5 分钟,解码与推理 FPS 相对断线前跌落 ≤5%;恢复后积压事件按策略补传或丢弃,不得 OOM。
  2. 发布队列深度有上限;队列满时丢弃 frames 级消息,保留 alarm 级(策略写进报告)。
  3. 设备掉电重启后 5 分钟内自动恢复拉流与模型加载;status retained 消息正确反映 online。
  4. 日志不得落明文密码;模型文件校验哈希(SHA256)与 model.ver 一致。

B.1.5 测试环境与报告

  1. 环境温度:默认 25±5℃;户外柜加测 40℃(可选条款)。
  2. 报告至少含:硬件清单与固件/BSP 版本、模型导出工具链与版本、GStreamer/管线拓扑、功耗曲线、FPS/延迟表、降频曲线、MQTT 断线实验、精度表、统一 Schema 样例报文。
  3. 公开芯片峰值 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 不得替代本协议指标。

继续深挖建议

  1. JSON Schema / Protobuf 双栈:用 JSON Schema 做联调,生产可选 Protobuf+MQTT,并给出 msg_id 幂等与云端去重窗口。
  2. 与 IEC 61850 / CIM 的点表映射:将 event.code 映射到间隔层报警逻辑节点(告警级别、复归),做一张「AI 事件 ↔ 二次信号」对照表。
  3. Sparkplug 宿主应用 PoC:仅把 online、告警计数、最高 score、功耗做成 metrics,验证 Ignition 侧是否足够运维。
  4. 抓拍合规:人脸/人员场景增加 ROI 马赛克、保留期、跨境传输条款;对象存储预签名 URL 时限。
  5. 统一适配器开源薄库:C++/Python 插件,输入厂商结构体,输出本 Schema;附 DeepStream probe、RK appsink、TROS subscription、AX det 回调样例。
  6. 验收自动化:一键脚本拉 N 路、断 MQTT、打功率计日志、出 HTML 报告,减少现场扯皮。
  7. 时序类任务扩展:电弧/局放/振动事件共用 envelope,objects 改为 series(窗口长、采样率、特征),与视觉任务并列。
  8. 多任务同框:PPE + 入侵 + 表计并存时,规定 task 分 topic 还是单报文多 tasks[],并评估 Broker 带宽。
  9. 边缘规则引擎:将 debounce、区域入侵多边形、跨线计数放在统一层,避免每个芯片插件重写业务规则。
  10. OTA 与 schema_ver 联动:模型仓发布必须带兼容的 schema_ver;不兼容则双发过渡期(旧 topic + 新 topic)至少两个版本窗口。

本文件为调研模板,芯片 FPS/功耗须以项目实测填入 B.2;厂商 API 随 SDK 版本变化,映射表应在选型和联调节点各复核一次。

← 多路 RTSP 视频管线与负载调度可执行手册 首页 边缘 AI MQTT 加固 + 离线缓冲可执行手册 →