fix: 修复10个关键bug提升系统稳定性和性能

1. YOLO11输出解析错误: 移除不存在的objectness行,正确使用class_scores.max()
2. CPU NMS逻辑错误: keep_mask同时标记保留和抑制框导致NMS失效,改用独立suppressed集合
3. 坐标映射缺失: _build_tracks中scale_info未使用,添加revert_boxes还原到ROI裁剪空间
4. batch=1限制: 恢复真正的动态batch推理(1~8),BatchPreprocessor支持多图stack
5. 帧率控制缺失: _read_frame添加time.monotonic()间隔控制,按target_fps跳帧
6. 拉流推理耦合: 新增独立推理线程(InferenceWorker),生产者-消费者模式解耦
7. 攒批形同虚设: 添加50ms攒批窗口+max_batch阈值,替代>=1立即处理
8. LeavePost双重等待: LEAVING确认后直接触发告警,不再进入OFF_DUTY二次等待
9. register_algorithm每帧调用: 添加_registered_keys缓存,O(1)快速路径跳过
10. GPU context线程安全: TensorRT infer()内部加锁,防止多线程CUDA context竞争

附带修复:
- reset_algorithm中未定义algorithm_type变量(NameError)
- update_roi_params中循环变量key覆盖外层key
- AlertInfo缺少bind_id字段(TypeError)
- _logger.log_alert在标准logger上不存在(AttributeError)
- AlarmStateMachine死锁(Lock改为RLock)
- ROICropper.create_mask坐标解析错误
- 更新测试用例适配新API

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-02-04 16:47:26 +08:00
parent fa0304aa47
commit 98595402c6
9 changed files with 352 additions and 234 deletions

View File

@@ -30,21 +30,22 @@ class TestNMSProcessor(unittest.TestCase):
self.assertEqual(len(keep_boxes), 1)
def test_nms_multiple_boxes(self):
"""测试多个检测框"""
"""测试多个检测框高IoU重叠框应被抑制"""
from core.postprocessor import NMSProcessor
nms = NMSProcessor(nms_threshold=0.45)
# box1 和 box2 高度重叠 (IoU > 0.45)box3 独立
boxes = np.array([
[100, 100, 200, 200],
[150, 150, 250, 250],
[110, 110, 210, 210],
[300, 300, 400, 400]
])
scores = np.array([0.9, 0.85, 0.8])
class_ids = np.array([0, 0, 0])
keep_boxes, keep_scores, keep_classes = nms.process(boxes, scores, class_ids)
self.assertLessEqual(len(keep_boxes), 2)
def test_nms_empty_boxes(self):