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

边缘 AI 证据仓与抽帧留存手册(变电站 / 电力场景)

调研日期:约 2026-10-25(Asia/Shanghai)
定位:告警事件的前后文抽帧、短视频、特征窗、元数据如何落盘、加密、设保留期,并与 MQTT 事件 Schema、主动学习、时间同步、D60/D90 门禁对齐。
衔接:edge-ai-event-schema-acceptance.md、edge-ai-mqtt-hardening-offline-buffer.md、edge-ai-active-learning-relabel-loop.md、edge-ai-time-sync-ntp-ptp.md、edge-ai-d60-d90-acceptance-checklist.md、edge-ai-substation-gateway-bom.md、edge-ai-model-signstore-mender-cookbook.md。
公开工具参考:本地环形缓冲 + SQLite 索引、可选 MinIO / NAS、rclone 同步;不确定处标 unknown。本文不复述站端未公开规程。


0. 一句话结论与红线

结论:证据仓是「管理信息大区 / AI VLAN」上的可审计旁路资产——以可信 ts(建议 RFC3339 UTC)+ 稳定 event_id 为键,本地 SSD/eMMC 环形缓冲优先落证,MQTT 只带 media_refs 指针;断链时推理与留证不得停,上传可后补。

红线 ID 禁止项 说明
R1 禁止证据无可信 ts clock_quality 为 unsync / step_recent 时,证据可落盘但默认 quality=suspect,不得进验收金标准集或事故对标 SOE
R2 禁止把证据写进保护网 证据盘、MinIO、rclone 目标、标注机均不得进保护二层域;无跳闸/GOOSE/软压板路径(对齐 BOM「禁止跨保」)
R3 保留期与隐私/安保 含人脸/人员的帧默认脱敏副本进飞轮;明文原图仅短保留+授权;日志禁长时效预签名 URL;出境默认否
R4 MQTT 不塞大媒体 事件 JSON 内嵌 b64 ≤100KB;完整 clip / 多帧走对象存储或本地路径,靠 media_refs 引用
R5 断 MQTT 仍留证 离线缓冲保事件;证据写入本地仓,恢复后再同步——不得因 Broker 断而停抽帧

1. 证据对象分层

层级 对象 典型格式 何时生成 与 Schema 关系
L0 元数据 事件旁路 JSON / 索引行 JSON + SQLite 行 每次告警/难例触发 对齐 ts_utc/msg_id/model.ver/clock_quality
L1 单帧 主证据帧(原图或 OSD) JPEG / WebP 告警峰值帧 + 可选前后抽样 event.snapshot.uri 或 media_refs[]
L2 Overlay 框 / 热力 / 多边形叠图 PNG / WebP(可有损) 调试与复核;可与 L1 同存 不替代 L1;审计时成对核验
L3 短 clip 告警前后 N 秒 MP4(H.264)或环形缓冲切片 高严重度 / 人工抽查 体积大,默认更短保留期
L4 MCU 特征窗 振动/电流等窗 .npy / 二进制 + sidecar TinyML 触发同窗 ts_gateway 为主;MCU 单调计数辅
L5 模型指纹 权重与配置哈希 SHA-256 + 可选 Ed25519 与 model.ver 绑定 衔接签名仓;错签事件不配可信证据
L6 时钟质量 clock_quality 快照 JSON 字段 每条证据必带或可推导 见时间同步手册

命名注意:现有事件 Schema 主时间字段为 ts_utc,消息键为 msg_id。本手册 event_id = 证据主键(推荐 = msg_id,或 ULID(site,cam,code,ts));media_refs = 指向 L1–L4 的相对路径或内网 URI 列表(MQTT 侧只传引用,不传整文件)。


2. 目录与命名约定

2.1 目录树(按日 / 站 / event_id)

/var/edgeai/evidence/                          # 工业 SSD 挂载点(示例)
  SS-220-01/                                   # site
    2026/10/25/                                # UTC 日(与 ts_utc 日一致,禁止混用本地日切)
      bay-3/
        camA/
          01JABCDEF1234567890XYZ/              # event_id(= msg_id 推荐)
            meta.json                          # L0
            frame_peak.jpg                     # L1
            frame_peak.overlay.webp            # L2 可选
            clip_pre3_post5.mp4                # L3 可选
            feat_mcu_win.bin + feat_mcu.json   # L4 可选
            MANIFEST.sha256                    # 内容哈希清单
            MANIFEST.sig                       # 可选分离签名
  index.sqlite                                 # 全局索引(可按站分库)
  retention.json                               # 保留策略版本

2.2 meta.json 最小字段

{
  "schema_ver": "1.0.0",
  "event_id": "01JABCDEF1234567890XYZ",
  "msg_id": "01JABCDEF1234567890XYZ",
  "ts": "2026-10-25T01:00:00.123Z",
  "ts_utc": "2026-10-25T01:00:00.123Z",
  "ts_mono_ms": 18442210,
  "site": "SS-220-01",
  "bay": "bay-3",
  "cam": "bay3-camA",
  "device_id": "box-rk3588-07",
  "task": "ppe",
  "event_code": "PPE_NO_HELMET",
  "quality": "suspect",
  "clock_quality": { "source": "ntp", "state": "sync", "offset_ms": 3.2 },
  "model": { "name": "yolox-ppe", "ver": "2026.10.12-int8", "hash_sha256": "…" },
  "trigger": { "reason": "ALARM", "score": 0.87, "debounce_ms": 2000 },
  "media_refs": [
    { "role": "peak_frame", "path": "frame_peak.jpg", "sha256": "…", "mime": "image/jpeg" },
    { "role": "overlay", "path": "frame_peak.overlay.webp", "sha256": "…", "mime": "image/webp" },
    { "role": "clip", "path": "clip_pre3_post5.mp4", "sha256": "…", "mime": "video/mp4" }
  ],
  "privacy": { "face_blur": true, "plate_blur": true, "raw_retained": false },
  "retention_class": "alarm_30d"
}

2.3 与 Schema / MQTT 衔接

Schema / Topic 证据仓动作
ts_utc / 手册 ts 目录日切与索引排序键;展示转 Asia/Shanghai
msg_id ↔ event_id 幂等:同 id 不重复建目录;补传不改键
event.snapshot.uri 可写 file:// 相对根或内网 MinIO 预签名;禁写保护网地址
扩展 media_refs 告警事件可选数组;MQTT 体积控在小 JSON
frames Topic(QoS0) 可节流发「有新证据」摘要;满队列优先丢 frames,本地仓仍写
难例队列字段 snap_uri → 指向本仓 L1;trigger_reason 写入 meta.trigger

3. 存储选型与容量估算

3.1 选型

层 推荐 用途 备注
热盘 工业 NVMe/SSD(BOM:64+128/256 GB 档) 环形缓冲 + 当日证据 eMMC 只放系统/索引小库,避免海量 JPEG 磨损
温盘 站控区 NAS 或自托管 MinIO 超保留热盘后的冷存 / 标注拉取 仅 AI VLAN;TLS + 桶策略
同步 rclone(rclone sync / copy) 盒 → NAS/MinIO;可 cron + 限速 断网重试;勿在推理线程内同步
索引 SQLite(WAL) event_id, ts, site, cam, task, code, paths, sha256, retention_class, sync_state 与 MQTT 离线缓冲库分文件,避免锁竞争

加密建议(可执行最小集):

  1. 盘级:LUKS / 工控盘自加密(若业主要求)——具体认证流程 unknown(按业主安规)。
  2. 对象:MinIO SSE-S3 或客户端加密后再 rclone;密钥不进 Git。
  3. 传输:HTTPS / mTLS;禁止明文 SMB 出站到公网。

3.2 容量公式(经验估算)

[
\text{GB/天} \approx N_{\text{cam}} \times R_{\text{trig}} \times \big(S_{\text{jpg}} + r_{\text{clip}} \cdot S_{\text{clip}} + r_{\text{ov}} \cdot S_{\text{ov}}\big) / 1024
]

符号 含义 示例默认
(N_{\text{cam}}) 路数 4~8
(R_{\text{trig}}) 每路每天触发留证次数(节流后) 告警 20~100;难例另计配额
(S_{\text{jpg}}) 单帧 JPEG/WebP MB 0.15~0.4(1080p q80)
(r_{\text{clip}}) 含短视频比例 0.05~0.2
(S_{\text{clip}}) 单 clip MB 约 码率Mbps × 秒 / 8;例 2 Mbps × 8 s ≈ 2 MB
(r_{\text{ov}}, S_{\text{ov}}) overlay 比例与大小 可选;常 < 单帧

环形缓冲盘容量:

[
\text{SSD}{\text{GB}} \ge \text{GB/天} \times D{\text{hot}} \times 1.3
]

(D_{\text{hot}}):热保留天(告警常见 7~30;难例原图 30~90 可配,对齐主动学习手册)。1.3 为碎片/索引/MANIFEST 余量。

勿用「路数 × FPS × 全帧落盘」做主路径:全帧录像是 NVR 职责;证据仓默认事件驱动抽帧。若需持续低帧率抽样做难例负样本,单独配额并计入 (R_{\text{trig}})。


4. 触发策略

策略 规则(建议默认) 产出
告警前后窗 峰值帧 + 前 (N_{\text{pre}}) / 后 (N_{\text{post}}) 秒(如 3/5);仅 L3 时编码 clip L1+L3
仅难例 / 低置信 对齐主动学习:LOW_SCORE / HIGH_ENTROPY / RULE_MODEL_MISMATCH / HUMAN_REJECT / SUSPECT_STALE L1+meta;clip 默认关
节流与去重 同 (cam, task, 近似感知哈希) 冷却 5–15 min 最多 1 次;同 event_code 防抖窗内合并 防雨雾刷盘
严重度分级 SMOKE_FIRE / PERSON_INTRUSION 可开 clip;普通 PPE 默认真帧 配额记账
时钟降级 unsync/step_recent:仍落证,强制 quality=suspect,难例窗需人工确认 R1
断 MQTT 本地 evidence_writer 与推理同机异步队列;SQLite 索引 sync_state=pending R5;恢复后 rclone/对象上传
红水位 盘 >85%:停 L3 → 停难例非人工 → 只保高严重度 L1;记 evidence_drop_* 对齐 MQTT 丢弃哲学

硬规则:难例/证据触发不改联锁;SMOKE_FIRE / 闯入 / PPE 禁止因留证去跳闸。


5. 完整性:哈希、签名、防篡改

5.1 内容哈希

  1. 每个媒体文件写后立即算 SHA-256,写入 media_refs[].sha256 与 MANIFEST.sha256(sha256sum 格式)。
  2. 索引库存同一哈希;抽检:sha256sum -c MANIFEST.sha256。
  3. 上传 MinIO 后可用 ETag/校验和对账(工具链细节以版本为准,unknown 处写实测)。

5.2 可选签名(衔接模型签名仓)

项 建议
算法 与模型仓一致优先 Ed25519(openssl / minisign);密钥分离保管
签名对象 MANIFEST.sha256 或整包 tar 的哈希
验签时机 审计导出前、训练集入库前、D90 抽检
失败处置 标记 integrity=fail;不得进 A 轨微调集

模型权重本身仍走 edge-ai-model-signstore-mender-cookbook.md;证据仓签名管的是媒体包,不是替换模型轨。

5.3 防篡改清单(运维可勾选)

  • [ ] 证据根目录非 root 可写业务账号;挂载 nodev,nosuid(若策略允许)
  • [ ] 删除/改期仅走带审计日志的 GC 任务;禁人工静默 rm
  • [ ] retention.json 版本号入库;缩短保留期须双人确认
  • [ ] 导出给外包前只给脱敏集;原图通道单独 ACL
  • [ ] 定期对随机 event_id 做哈希复核并留报告

6. 两周落地清单 + D60/D90 验收门禁

6.1 两周落地(可执行)

日 动作 产出
D1 定挂载点、目录约定、event_id=msg_id;SSD 与 eMMC 职责拆分 配置基线
D2 SQLite 索引 schema + 写入 API(异步,禁阻塞推理) 库文件 + 单测
D3 告警触发 → L1 + meta.json + MANIFEST;MQTT 只带 uri/media_refs 样例包
D4 接入 clock_quality;unsync 强制 suspect 样例 JSON
D5 前后窗 clip 可选开关;节流/感知哈希去重 配置项
D6 断 Broker ≥5 min:推理 FPS 跌落 ≤5% 且 本地证据持续增长 实验记录(叠 D60-03)
D7 盘水位丢弃策略演练 水位日志
D8 可选 MinIO 桶 + rclone 限速同步;预签名短时效 同步 runbook
D9 难例路径打通:snap_uri → 本仓;与主动学习队列字段对齐 联调记录
D10 Ed25519 签 MANIFEST(可选)+ 错签拒收演练 签字记录
D11 脱敏默认开;保留期分 alarm_* / hardcase_* / train_cold retention.json
D12 容量试算写入 BOM 附件;热盘 ≥ 公式×1.3 容量表
D13 抽检 20 条:ts 时区、哈希、跨保目视(证据网段) 抽检表
D14 整理进 D60/D90 文档包;修订本手册版本号 交付清单

6.2 验收门禁(对齐现有检查单,可勾选)

id 描述 级别 证据产物 □
EV-D60-01 告警事件具备可信 ts/ts_utc + event_id;无时区或缺字段否决 否决 样例 meta + Broker 事件 □
EV-D60-02 media_refs 可打开且 SHA-256 一致;MQTT 无大体积 b64 滥用 否决 MANIFEST 校验日志 □
EV-D60-03 断 MQTT ≥5 min:本地证据仍写入;恢复后可补同步 否决 与 D60-03 同次实验附表 □
EV-D60-04 证据存储与保护网隔离(目视+VLAN/ACL) 否决 叠 D60-09 □
EV-D60-05 难例 snap_uri 指向本仓;周配额与冷却生效 警告/否决(飞轮站) 难例周报 □
EV-D90-01 保留期、脱敏、GC 已跑通;D90-13 抓拍条款可抽检 警告→逾期否决 运维包 + 抽检 □
EV-D90-02 完整性:随机抽检哈希;可选签名验过;错签拒收 否决(若合同要求签名) 抽检报告 □
EV-D90-03 难例闭环 ≥2 周期所用媒体均可按 event_id 回溯 否决 叠 D90-08 □
EV-D90-04 容量与 BOM 存储档一致;红水位策略可演示 警告 容量表 + 演练 □

否决例:生产盒长期 unsync 仍把证据当金标准;证据盘挂在保护 VLAN;断 Broker 后停抽帧;难例集对外冒充公开 benchmark。


7. 与现有文档衔接点

文档 衔接什么
edge-ai-event-schema-acceptance.md ts_utc/msg_id/event.snapshot;本手册补 event_id/media_refs/clock_quality 落盘约定
edge-ai-mqtt-hardening-offline-buffer.md 事件离线 SQLite 与证据仓分库;优先级丢 frames 保 events;断线测法共用
edge-ai-active-learning-relabel-loop.md 难例触发码、snap_uri、30–90 天难例保留、脱敏与权属;训练集冷存迁出本仓
edge-ai-time-sync-ntp-ptp.md clock_quality 枚举与 suspect 规则;抽帧窗依赖可信 ts
edge-ai-d60-d90-acceptance-checklist.md 上表 EV-* 作为证据专项增补;D60-03/09、D90-08/13 强相关
edge-ai-substation-gateway-bom.md SSD/eMMC 容量档、AI VLAN、禁止跨保
edge-ai-model-signstore-mender-cookbook.md model.ver/权重 SHA;MANIFEST 可选同源 Ed25519 思路
edge-ai-mcu-tinyml-sensing-cookbook.md L4 特征窗与 ts_gateway

8. 公开实践引用与 unknown

项 状态
MinIO 桶生命周期 / SSE 公开产品能力可用;站内版本与策略 按部署填写
rclone 后端与限速参数 公开 CLI;生产参数 实测
SQLite WAL 在工控闪存上的寿命 视盘与写入速率;高写场景优先 SSD
业主安规下的精确保留天数、加密等级、审计接口 unknown(写入合同附件,勿用本文数字替代)
与站内 NVR/安防平台的官方对接规程 unknown(本文只定义 AI 边缘自管证据仓)

9. 结语

证据仓让「告警可复核、难例可回流、审计可对时」。落地口诀:可信 ts、本地先落、指针上云、永不跨保、哈希可验、保留可配。一切以端到端实测与业主合规为准;公开工具名不等于站端已批准部署。

← 边缘 AI 时间同步(NTP / PTP)与事件时间戳可执行手册 首页 边缘 AI:GStreamer 芯片元素矩阵 + OTA 实操对比(Mender / Balena / 自建) →