1.9 KiB
1.9 KiB
flowchart TD A[前端配置设备/检测区/参数] --> B[后端下发或本地生成 service.conf] B --> C[微服务启动] C --> D[读取 /usr/local/etc/service.conf] D --> E[按设备初始化]
E --> F1[启动 fire_leave 推理程序<br/>./yolov5 -m model]
E --> F2[启动 fire_check 推理程序<br/>./yolov5 -m fire_check -R]
E --> F3[启动测温程序<br/>run_thermometry.sh]
F1 --> G1[HTTP 回传人员检测结果]
F2 --> G2[HTTP 回传火焰检测结果]
F3 --> G3[TCP 回传温度值]
G1 --> H1[更新当前人数 PersonCount]
G3 --> H2[更新当前温度 Temperature]
H1 --> I1{PersonCount == 0?}
H2 --> I2{温度 > 阈值?}
I1 -->|是| J1[无人条件成立]
I2 -->|是| J2[超温条件成立]
J1 --> K{无人 + 超温<br/>是否同时成立?}
J2 --> K
K -->|否| K0[重置持续计时]
K -->|是| L[开始累计持续时间]
L --> M{持续时间 >= detection_time?}
M -->|否| L
M -->|是| N{是否在 alarm_time 冷却期?}
N -->|是| N0[不上报,继续监测]
N -->|否| O[触发 fire_leave 动火离人报警]
G2 --> P{检测到火焰<br/>ClassIdx=0 且 Number>0?}
P -->|否| P0[重置火焰计时]
P -->|是| Q[累计火焰持续时间]
Q --> R{持续时间 >= fire_check detection_time?}
R -->|否| Q
R -->|是| S[触发 fire_check 火焰报警]
O --> T[查找报警前后视频片段]
S --> T
T --> U[拼接约30秒报警视频]
U --> V[复制到 /data/upload]
V --> W[上传视频到后端/Nginx]
W --> X[WebSocket 上报告警事件]
X --> Y[后端转发前端展示]
Z1[GPIO按钮] --> Z2[目标业务:暂停 fire_leave 上报]
Z2 --> Z3[暂停期内人员离开报警不上报]
Z3 --> K
Z2 -.不影响.-> P
WS1[WebSocket /dhlr/alert] --> BEEP[控制蜂鸣器 GPIO109]
WS2[WebSocket /dhlr/forbid_time] --> Z2