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

变电站边缘 AI:相机脏污与画质自检手册(可执行)

调研日期:约 2026-10-25(Asia/Shanghai)
落盘:/workspace/research/edge-ai-camera-dirt-quality-selfcheck.md
定位:站端每路相机的模糊 / 脏镜 / 遮挡 / 夜间欠曝周期自检 → 质量门控 → 运维告警与工单;作为防抖 L5 画质门控的输入源;不进保护网。
衔接:edge-ai-alert-debounce-suppression.md(L5)、edge-ai-human-review-false-positive-loop.md、edge-ai-onvif-camera-commissioning.md、edge-ai-observability-logging-metrics.md、edge-ai-evidence-store-snapshot-retention.md、edge-ai-event-schema-acceptance.md、edge-ai-multistream-rtsp-scheduling.md、edge-ai-visible-ir-fusion.md、edge-ai-vlan-network-isolation.md、edge-ai-d60-d90-acceptance-checklist.md。
声明:算法阈值为工程起点,须按站内镜头/焦距/日夜标定冻结进《配置基线表》;不确定处标 unknown。本文不替代二次安规或业主站规。


0. 一句话结论与红线

结论:画质自检是「感知可信度」旁路——周期评测每路相机的清晰度/脏污/遮挡/曝光,输出 quality_gate 供 L5 降权或暂缓业务告警,并生成可审计运维工单;画质差的帧不得当作金标准确认,自检进程不进 PROT,且脏镜/欠曝告警不得被用来永久静音烟火。

红线 ID 禁止项 说明
Q1 画质差不得假确认金标准 blur/dirt/occlude/underexpose 超阈时,业务事件强制 quality=suspect;禁止自动 confirmed,禁止进验收金标准集 / 事故对标 SOE
Q2 自检不进 PROT 采样、指标、工单、MQTT ops/telemetry 均在 AI/CAM/MGMT VLAN;禁止进保护二层、GOOSE、软压板、跳闸回路(对齐 VLAN N1/N5、ONVIF C5)
Q3 脏镜告警不得永久静音烟火 L5 仅允许:按 cam×任务降权 / 拉长 debounce / 暂缓 PPE·表计;SMOKE_FIRE / 高严重度闯入禁止因脏镜一键全站静音或写永久 suppress(对齐防抖 R2、复核 H5)
Q4 自检不得挡推理主路径 清晰度/遮挡评测异步、有界队列;满则丢本轮自检样本,不得阻塞解码/NPU
Q5 不得改写原始证据 自检快照进 ops/quality/ 或证据仓旁路目录;禁止覆写业务告警的 frame_peak.jpg / meta.json 金字段

1. 检测指标、阈值与采样周期

1.1 指标定义(均可配置)

指标键 算法要点 输出 典型用途
laplacian_var 灰度图 Laplacian 方差(清晰度) float 模糊 / 失焦 / 雨雾糊
contrast_rms RMS 对比度或全局标准差 float 雾、脏膜、强逆光发灰
brightness_mean 均值亮度(0~255 或 0~1) float 欠曝 / 过曝
dark_ratio 低于暗阈像素占比 0~1 夜间欠曝、IR 失效
bright_clip_ratio 近饱和像素占比 0~1 过曝、眩光
occlude_ratio 前景遮挡估计:大块低纹理连通域 / 边缘缺失比 / 可选语义「手/布/异物」 0~1 脏镜斑、贴纸、人为遮挡
dirt_score 综合:局部对比度塌陷 + 斑块数 +(可选)与洁净基线帧差分 0~1 油污、水渍、尘积
ir_cut_state 日夜切换态(ONVIF / 厂商私有 / 亮度启发式) day/night/unknown 夜视档阈值切换
freeze_score 相邻采样帧差分过低持续 N 次 0~1 卡死画面 / 假流

实现注意:默认在分析子码流上抽样(720p@10~15fps 管线隔帧即可),ROI 可裁「有效监视区」避开 OSD 时钟区;Laplacian 前建议轻度高斯或直接对下采样图算,控 CPU。

1.2 建议默认阈值(验收期标定后冻结)

条件码 触发逻辑(起点) 严重度 默认动作摘要
BLUR laplacian_var < T_blur 连续 M 次 warning→major 降权 + 难例标 quality_bad
LOW_CONTRAST contrast_rms < T_ctr 连续 M 次 warning 同左;雾天可叠气象票窗
UNDEREXPOSE 夜:brightness_mean < T_dark 或 dark_ratio > T_dr major 切夜视阈值档;双光未标定禁人员金标准
OVEREXPOSE bright_clip_ratio > T_br warning 暂缓表计 OCR 金标准
OCCLUDE occlude_ratio > T_occ(如 0.25~0.40) major 工单「清障/擦镜」;业务告警暂缓(烟火除外策略见 §2)
DIRT dirt_score > T_dirt 或斑块面积比超阈 major 运维擦镜工单;L5 画质门控
FREEZE freeze_score 连续超阈 critical(运维) 标 stream_suspect;触发 RTSP 重拉,不静音烟火逻辑

起点数值(须站内标定,非合同 SLA):

参数 建议起点 配置位置
T_blur(Laplacian var,720p 灰度) 80~150(镜头/降噪相关,unknown 以洁净基线 30% 分位为准) quality.cam.*.T_blur
T_ctr 基线对比度的 40%~50% 同上
T_dark / T_dr mean\<35 或 dark_ratio>0.55(夜) 夜视档
T_br clip_ratio>0.15 昼
T_occ 0.30 遮挡
T_dirt 0.40 脏污综合
M(连续命中) 3(防单帧误判) 防抖式
hold_clear_n 5 次正常后复归 复归迟滞

日/夜两套阈值;ir_cut_state=night 时启用夜档,并禁止把昼档硬套到红外图做人脸/人员金标准(对齐双光手册)。

1.3 采样周期与负载

项 建议 说明
常态采样周期 60~120 s / 路 错峰;C 档 16~32 路须分片调度
告警后加密采样 触发后 15~30 s × 连续 3~5 次确认 减少闪报
每轮算力 ≤ 1 帧 下采样评测;禁全分辨率逐帧 Laplacian 对齐 Q4
基线帧 联调洁净态存 baseline/{cam}.jpg + 指标快照 ONVIF 联调勾选后写入;变更镜头后重采
输出 MQTT …/telemetry/quality(周期)+ …/events/ops(状态变迁) 指标低基数 label:cam,code

1.4 与 ONVIF 联调勾选增量

在 edge-ai-onvif-camera-commissioning.md 清单末追加(本手册落地时一并勾):

# 项 目标
QN1 分析子码流可稳定抽帧 ≥10 min 自检输入可靠
QN2 洁净态采集 baseline/{cam}.jpg + 指标快照入库 脏污差分有参照
QN3 日↔夜切换至少验证 1 次;记录 ir_cut_state 来源 夜档阈值不混用
QN4 OSD 避开自检 ROI(或 ROI 扣除 OSD 带) 降低假模糊
QN5 故意半遮挡镜头 30 s:应出 OCCLUDE/DIRT ops,恢复后 hold_clear_n 内复归 门控可演示

2. 门控动作与上下游衔接

2.1 动作矩阵(按任务差异化)

质量态 PPE / 表计 闯入 烟火 SMOKE_FIRE 运维
OK 正常 L3/L4 正常 正常 —
DEGRADED(轻糊/轻雾) 只出 telemetry + 难例;或 score_thr+0.05 min_hits+1~2,debounce_ms×1.2 保持检测;可标 attrs.quality=degraded ops warning
BAD(脏镜/遮挡/严重欠曝) 暂缓升告警(不发 events,可记 ops) 暂缓或强 suspect+强制复核 禁止静音;仅允许提高时序 min_hits 上限内 + 强制 suspect;仍须短冷却可审计 工单擦镜/清障/查供电
FREEZE / 断流 随 stream_up=0 同左 同左;重拉流优先 critical ops

原则:降权 / 暂缓 / 工单 ≠ 关模型;推理主路径恒开(对齐防抖 R4)。

2.2 与防抖 L5

画质模块写入每路 quality_gate={OK|DEGRADED|BAD|FREEZE} 与 codes[],供 L5 读取:

  • L5 规则 ID 建议:QG_BLUR / QG_DIRT / QG_OCC / QG_NIGHT;
  • 每次因画质抑制或降权须审计:suppress_reason=QUALITY_GATE、rule_id、laplacian_var、dirt_score;
  • 禁止 L5 把 BAD 映射为「全站静音烟火」。

2.3 与人工复核台

  • 业务告警若携带 attrs.quality_gate!=OK → 复核台默认展示「画质差」角标;证据加载失败仍只允许 defer。
  • 驳回原因码优先 FP_QUALITY(见复核手册 §1.3);不得因单次驳回自动写永久 suppress。
  • 确认按钮在 BAD 态下应二次提示:「当前相机画质门控为 BAD,确认仅升通知态,不作金标准」。

2.4 与证据仓

对象 路径建议 保留
自检触发帧 evidence/ops/quality/{site}/{cam}/{ts}/snap.jpg 短保留(如 7~30 d)
sidecar quality.json:指标、阈值版本、baseline_hash、decision 同左
业务告警证据 不变;仅在 meta 旁路字段或事件 attrs 引用 quality_gate 对齐证据仓 R2/R3

禁止用自检帧覆盖 frame_peak.jpg。

2.5 与 ONVIF / 可观测性

  • ONVIF:联调清单增项——洁净基线采集、日夜切换验证、IR-cut 可读则写入 ir_cut_state;Web/OSD 不可替代网关 ts。
  • 指标(低基数):edgeai_cam_laplacian_var{cam}、edgeai_cam_dirt_score{cam}、edgeai_cam_occlude_ratio{cam}、edgeai_cam_quality_gate{cam}(枚举映射 0/1/2/3)、edgeai_cam_quality_alarm_total{cam,code}。
  • 日志:状态变迁打 JSON:cam,code,from,to,metrics, cfg_ver;禁人脸原图与密钥(对齐 O1)。
  • 告警启发:quality_gate=BAD 持续 ≥10 min → 工单;FREEZE ≥60 s → 与 stream_up 联动。

2.6 工单最小字段(运维闭环)

字段 必填 说明
ticket_id / cam / site / bay Y 定位镜头
codes[] Y 如 DIRT,OCCLUDE
since_ts / duration_s Y 进入 BAD 起算
metrics_snapshot Y 触发时指标
suggested_action Y CLEAN_LENS / CLEAR_FOREGROUND / CHECK_FOCUS / CHECK_IR / CHECK_POE
quality.cfg_ver Y 阈值版本可追溯
linked_event_ids 可选 同期被降权的业务告警

工单复归条件:hold_clear_n 次采样均 OK,或现场勾选「已擦镜」并重采基线(重大清洁后建议重采)。

2.7 算法伪代码(边缘侧)

every sample_period_s, per cam (staggered):
  frame = grab_substream_roi(cam)
  m = {laplacian_var, contrast_rms, brightness_mean,
       dark_ratio, bright_clip_ratio, occlude_ratio, dirt_score, freeze_score}
  thr = night_thr if ir_cut_state==night else day_thr
  codes = evaluate(m, thr)          # 单帧候选码
  state = update_hysteresis(cam, codes, M, hold_clear_n)
  gate = map_gate(state)            # OK/DEGRADED/BAD/FREEZE
  publish_telemetry(cam, m, gate)
  if gate_changed:
    publish_ops_event(...); maybe_open_ticket(...)
    write_sidecar_evidence(...)     # 旁路,不覆盖业务 peak
  apply_L5(cam, gate)               # 降权/暂缓;烟火禁 mute

遮挡估计(无语义模型时):对灰度做局部方差图,低方差且大面积连通域占比 → occlude_ratio;可选与 baseline 做结构相似(SSIM 区域)辅助。有轻量分割时可将「手/布/纸」类先验并入,但仍须 M 次确认。

脏污 vs 雾:雾偏全局对比度均匀下降;脏污偏局部斑块。两者可同时为真;L5 取更严门控,工单可并条。

3. 两周落地计划

日 产出 完成定义
D1–D2 选型:子码流抽样点、ROI、基线采集脚本;配置键进仓库 1 路相机洁净基线 + 指标可复现
D3–D4 实现 Laplacian/对比度/亮度/遮挡最小集;周期 60~120 s /metrics 可见;CPU 占用可接受
D5 脏污综合分 + 连续 M 次迟滞;日/夜双档 人为遮挡/擦镜前后可区分
D6 接入 L5:quality_gate → 降权/暂缓矩阵(烟火例外写死) 单测:BAD 时 PPE 无 events、烟火仍可升 suspect
D7 MQTT telemetry/quality + events/ops;证据旁路目录 Broker 可见状态变迁
D8 复核台角标 + FP_QUALITY 联调;禁止盲确认文案 UI 抽测通过
D9 多路错峰;与 RTSP watchdog / ONVIF 基线流程挂钩 8 路无拖垮推理
D10 工单字段:cam、codes、持续时长、建议动作(擦镜/查焦/查供电) 运维可闭环
D11–D12 站内标定:雨雾/夜间/故意脏镜注入;冻结阈值进基线表 误报自检 ≤ 约定
D13–D14 验收演练 + 文档;失败回滚开关 quality_gate.enable=false(仅关门控,不关推理) 门禁全绿或书面偏差

4. 验收门禁(D60/D90 可勾选)

ID 门禁项 否决?
G1 画质 BAD 时业务事件均为 quality=suspect,无自动 confirmed 是
G2 网络抓包 / 路由:自检与 ops 无至保护 VLAN 路径 是
G3 注入脏镜/遮挡:产生 ops 工单;烟火任务未被永久静音(仍可检出测试火焰/烟,或至少保持检测+短冷却) 是
G4 自检高峰时 decode_fps / infer_latency 相对基线劣化 ≤ 约定(建议 ≤10%) 是
G5 连续 M 与 hold_clear_n 迟滞有效:闪断不抖报 是
G6 证据旁路存在且未覆盖业务 frame_peak;复核 FP_QUALITY 可提交 是
G7 指标与日志无密钥、无完整未脱敏人脸 是
G8 配置版本 quality.cfg_ver 写入每条 ops;可回滚禁用门控 是

5. 配置片段(示例)

quality_gate:
  enable: true
  sample_period_s: 90
  confirm_hits: 3
  hold_clear_n: 5
  stream: sub   # 分析子码流
  day:
    T_blur: 100
    T_ctr_ratio: 0.45
    T_occ: 0.30
    T_dirt: 0.40
  night:
    T_blur: 60
    T_dark: 35
    T_dr: 0.55
    T_occ: 0.30
  actions:
    PPE: { DEGRADED: demote, BAD: defer_events }
    INTRUSION: { DEGRADED: tighten_debounce, BAD: suspect_force_review }
    SMOKE_FIRE: { DEGRADED: tag_only, BAD: tag_suspect_keep_detect }  # 禁止 mute
  ops_ticket_after_s: 600

6. 速查

问题 处理
雨雾季节自检误报多 提高 T_blur 迟滞或叠气象降权;勿关烟火
夜视偏色导致「假脏」 分日夜基线;IR 图单独阈值
故意贴纸遮挡 OCCLUDE→工单;闯入暂缓;烟火保持检测
自检 CPU 高 降采样、拉长周期、多路错峰
与金标准集冲突 凡 quality_gate!=OK 的样本默认剔除出金标准
多路同时 BAD(沙尘暴) 站点级 DEGRADED 策略:统一降权非烟火任务;开汇总工单;仍禁全站静音烟火
基线过期(换镜头/改焦距) 强制重采基线;禁止继续用旧基线判脏

一句话交付口径:先让每路相机「可信度」可测、可门控、可工单;门控只降业务告警权重与验收资格,永不代替保护,也永不用脏镜当借口永久关掉烟火通道。

7. 失败模式与禁止项对照

失败模式 正确应对 禁止
误报脏镜导致值班关掉烟火任务 仅降权 PPE/表计;烟火保持 + 工单擦镜 配置「DIRT → mute SMOKE_FIRE」
把模糊帧标成确认告警交差 强制 suspect;复核二次确认文案 自动 confirmed
自检打满 CPU 掉帧 拉长周期、降采样、错峰 在推理线程同步 Laplacian
清洁后仍 BAD 重采 baseline;查阈值是否夜档错用 手工改历史证据 meta
相机进保护调试 VLAN 拒绝联调;回到 CAM VLAN 「临时」跨保口
← 变电站边缘 AI:安全启动与运行时完整性手册 首页 变电站边缘 AI:设备台账与舰队 CMDB 手册(可执行) →