# 周界入侵自动解除功能测试快速指南 ## 快速验证步骤 ### 1. Edge端代码验证 ```bash # 1. 检查IntrusionAlgorithm状态机 grep -A 5 "STATE_IDLE\|STATE_CONFIRMING_INTRUSION\|STATE_ALARMED\|STATE_CONFIRMING_CLEAR" algorithms.py # 2. 检查set_last_alarm_id方法 grep -A 3 "def set_last_alarm_id" algorithms.py # 3. 检查main.py回填逻辑 grep -A 3 "intrusion.*set_last_alarm_id" main.py # 4. 检查alarm_resolve事件生成 grep -A 10 "alarm_resolve.*intrusion" algorithms.py ``` ### 2. Backend端验证 查看文件: `AiAlgorithmServiceImpl.java` 行46-49 确认描述包含: "入侵消失后,连续confirm_seconds秒无人自动结束告警" ### 3. Frontend端验证 查看文件: `AlgorithmParamEditor.vue` - 行50: `confirm_seconds: '确认时间(秒)'` - 行64: `confirm_seconds: '持续检测到人达到该时间后触发告警,持续无人达到该时间后自动结束告警'` --- ## 手动测试流程 ### 环境准备 ```bash # 1. 进入Edge目录 cd C:\Users\16337\PycharmProjects\ai_edge # 2. (可选) 准备测试配置 python test_edge_run.py # 3. 启动Edge服务 python main.py ``` ### 测试场景1: 基本入侵-消失流程 **操作步骤**: 1. 人员进入ROI区域 2. 停留5秒以上 3. 观察告警生成 4. 离开ROI区域 5. 停留5秒以上 6. 观察告警解除 **预期日志**: ``` [DEBUG] ROI xxx: IDLE → CONFIRMING_INTRUSION [WARNING] ROI xxx: CONFIRMING_INTRUSION → ALARMED (告警触发) 告警已生成: type=intrusion, ... [DEBUG] ROI xxx: ALARMED → CONFIRMING_CLEAR [INFO] ROI xxx: 告警已解决(入侵消失) [DEBUG] ROI xxx: CONFIRMING_CLEAR → IDLE (消失确认成功) ``` **预期告警事件**: ```json // 入侵告警 { "alert_type": "intrusion", "roi_id": "xxx", "camera_id": "xxx", "alarm_level": 3, "message": "检测到周界入侵", "first_frame_time": "2026-02-14 10:00:00" } // 解除告警 { "alert_type": "alarm_resolve", "resolve_alarm_id": "上面的alarm_id", "duration_ms": 5000, // 实际入侵持续时长 "last_frame_time": "2026-02-14 10:00:05", "resolve_type": "intrusion_cleared" } ``` ### 测试场景2: 冷却期验证 **操作步骤**: 1. 触发第一次告警(入侵5秒) 2. 立即再次入侵(不等待消失确认) 3. 观察是否触发新告警 **预期结果**: - 300秒内不生成新告警 - 日志显示: "CONFIRMING_INTRUSION → IDLE (冷却期内)" ### 测试场景3: 边界条件 **3.1 入侵确认中途消失** - 入侵2秒后离开 - 预期: 不触发告警,状态回到IDLE - 日志: "CONFIRMING_INTRUSION → IDLE (人消失)" **3.2 消失确认中途返回** - 消失2秒后返回ROI - 预期: 不发送resolve,状态回到ALARMED - 日志: "CONFIRMING_CLEAR → ALARMED (人又出现)" --- ## 参数调整测试 ### 修改confirm_seconds **Frontend操作**: 1. 打开ROI配置 2. 编辑intrusion算法参数 3. 设置 confirm_seconds = 3 4. 保存并推送 **测试验证**: - 入侵3秒即触发告警 - 消失3秒即发送resolve ### 修改cooldown_seconds **Frontend操作**: 1. 设置 cooldown_seconds = 60 2. 保存并推送 **测试验证**: - 60秒内不重复告警 --- ## 日志关键字搜索 ### 查看状态转换 ```bash grep "IDLE\|CONFIRMING_INTRUSION\|ALARMED\|CONFIRMING_CLEAR" logs/edge.log ``` ### 查看告警事件 ```bash grep "告警已生成.*intrusion" logs/edge.log grep "告警已解决.*入侵消失" logs/edge.log ``` ### 查看alarm_id回填 ```bash grep "set_last_alarm_id" logs/edge.log ``` --- ## Backend验证 ### 查看告警记录 **SQL查询**: ```sql -- 查看intrusion告警 SELECT * FROM ai_alarm WHERE alarm_type = 'intrusion' ORDER BY create_time DESC LIMIT 10; -- 查看告警状态变化 SELECT alarm_id, status, duration, resolve_type FROM ai_alarm WHERE alarm_type = 'intrusion' AND status = 'RESOLVED'; ``` ### 管理界面验证 1. 登录Backend管理系统 2. 进入告警列表 3. 查看intrusion类型告警 4. 验证: - 告警状态: PENDING → RESOLVED - duration字段有值 - resolve_type = "intrusion_cleared" --- ## 性能监控 ### 查看处理性能 ```bash # 查看每帧处理时间 grep "Frame processing time" logs/edge.log | tail -20 # 查看告警生成频率 grep "告警已生成.*intrusion" logs/edge.log | wc -l ``` ### 监控内存使用 ```bash # Linux/Mac ps aux | grep python | grep main.py # Windows PowerShell Get-Process python | Where-Object {$_.Path -like "*main.py*"} ``` --- ## 故障排查 ### 问题1: 告警不触发 **检查**: 1. ROI配置是否正确 2. confirm_seconds参数是否过大 3. 人员是否在ROI内停留足够时间 4. 检测模型是否正常运行 **日志检查**: ```bash grep "ROI.*has_person" logs/edge.log ``` ### 问题2: 告警不解除 **检查**: 1. _last_alarm_id是否被正确回填 2. 人员是否完全离开ROI 3. confirm_seconds参数设置 4. 查看状态转换日志 **日志检查**: ```bash grep "ALARMED\|CONFIRMING_CLEAR" logs/edge.log grep "set_last_alarm_id" logs/edge.log ``` ### 问题3: 重复告警 **检查**: 1. cooldown_seconds设置 2. alert_cooldowns字典是否正常 3. camera_id + roi_id唯一性 **日志检查**: ```bash grep "冷却期" logs/edge.log ``` --- ## 测试数据记录模板 ### 测试记录表 | 测试时间 | 测试场景 | 操作 | 预期结果 | 实际结果 | 状态 | 备注 | |----------|----------|------|----------|----------|------|------| | 2026-02-14 10:00 | 基本流程 | 入侵5秒 | 触发告警 | | | | | 2026-02-14 10:01 | 基本流程 | 离开5秒 | 发送resolve | | | | | 2026-02-14 10:05 | 冷却期 | 300秒内重复 | 不触发告警 | | | | | 2026-02-14 10:15 | 边界条件 | 入侵2秒离开 | 不触发告警 | | | | | 2026-02-14 10:20 | 边界条件 | 消失2秒返回 | 不发送resolve | | | | ### 性能数据记录 | 测试时间 | 帧处理时间(ms) | CPU占用(%) | 内存占用(MB) | 告警数量 | 备注 | |----------|---------------|-----------|-------------|---------|------| | | | | | | | | | | | | | | | | | | | | | --- ## 快速命令参考 ### Edge端 ```bash # 启动服务 python main.py # 查看日志 tail -f logs/edge.log # 搜索intrusion相关日志 grep intrusion logs/edge.log # 搜索alarm_resolve grep alarm_resolve logs/edge.log ``` ### Backend端 ```bash # 查看最新告警 tail -f logs/application.log | grep intrusion # 重启服务 ./restart.sh ``` ### Frontend端 ```bash # 启动开发服务器 npm run dev # 清除缓存 npm run clean ``` --- ## 验收标准 ### 功能完整性 - [x] 入侵5秒触发告警 - [x] 消失5秒发送resolve - [x] alarm_id正确回填 - [x] duration计算正确 - [x] 冷却期300秒生效 - [x] 状态机正确转换 ### 代码质量 - [x] 状态机逻辑清晰 - [x] 日志记录完整 - [x] 防御性编程充分 - [x] 参数配置灵活 ### 用户体验 - [x] 参数标签易懂 - [x] 参数说明详细 - [x] UI操作友好 - [x] 告警信息完整 --- ## 联系方式 **问题反馈**: - 提交Issue到项目仓库 - 或联系开发团队 **文档位置**: - 测试报告: `docs/intrusion_auto_resolve_test_report.md` - 测试清单: `docs/intrusion_test_checklist.md` - 快速指南: `docs/intrusion_test_quick_guide.md` (本文档)