1.本项目是一个面向加油站场景的智能视频监控系统,核心业务是 油罐车卸油作业的全程自动化监控与合规检测。系统通过海康威视 SDK 拉取摄像头实时视频流,利用 YOLO 目标检测 + YOLOv8-pose 姿态估计进行实时分析,自动完成"油罐车到达 → 静电消除 → 接地线连接 → 消防器材就位 → 卸油中持续监控 → 油罐车离开"的全流程合规检查,并自动录像归档。同时具备通用的事件规则引擎、动作识别、运动检测、音频检测等能力。
2.业务用途: 通用的规则评估与事件触发引擎,基于区域人数/物品统计和时间窗口判断是否触发告警事件。
3.核心功能:区域统计(update_zone_count): 为每个摄像头的每个区域(zone)维护时间序列统计,记录每帧的人数/物品数、检测明细(detections)、动作(actions),仅保留最近 10 秒数据。
规则评估(evaluate_rules): 评估摄像头下所有启用的规则,支持三种规则类别(rule_category):
simple(传统单次触发):默认,条件满足即触发。
continuous(持续监控):仅当卸油会话处于 UNLOADING 状态时生效。
flow_step(流程步骤):仅当卸油会话状态匹配 allowed_states 时生效。
条件评估(_evaluate_condition): 支持 6 种比较运算符(lt/le/gt/ge/eq/ne)对比阈值;可指定目标类型(target)、必需动作(action,如跌倒)、必需物品(required_objects,如安全帽)。条件 = 数量条件 AND 动作条件 AND 物品条件。
持续时间机制: 条件满足后需持续满足 duration 秒才触发(duration=0 则立即触发);条件中断则重置。
触发后动作: 生成事件消息 → 写入数据库 event_logs → 调用已注册的回调函数(用于 WebSocket 推送等)。
后台清理: 每 30 秒清理 60 秒前的过期统计数据和长时间未触发的规则状态。
单例模式 + 线程安全锁。
unload_oil_engine.py — 卸油作业状态机引擎(核心业务)
业务用途: 维护每个摄像头当前的卸油会话(session),驱动卸油作业全流程状态流转,自动检测每个步骤的合规性,并在卸油过程中持续监控违规行为。
4.完整流程逻辑:自动开会话: 无活跃会话且检测到 tanker ≥1 → 自动 start_session,写入数据库。
TRUCK_ARRIVED → 检测到 tanker + person 同时存在 → 自动推进到 STEP1。
STEP1 → 检测人在静电消除器附近(中心点距离 <120px)且持续 ≥3 秒 → 推进到 STEP2。
STEP2 → 检测接地线 + 油罐车同时存在且持续 ≥5 秒 → 推进到 STEP3。
STEP3 → 检测灭火器 ≥1 且消防桶 ≥1 且持续 ≥3 秒 → 推进到 UNLOADING。
UNLOADING → 持续监控三类违规(带 30 秒冷却去重):
人数不足: 现场 <3 人(warning)。
未穿工衣: 通过 person 与 safety_vest 的 bbox 配对(距离 <150px),未配对的视为未穿(warning)。
上车未戴安全帽: 人在油罐车 bbox 内 + 附近(100px)无安全帽(critical)。
自动结束: 连续 10 秒(TRUC