fix: 修复运行错误

- algorithms.py 添加 threading/redis/logger 导入
- ResultReporter 添加 report_heartbeat() 和 close() 方法
This commit is contained in:
2026-01-30 15:15:09 +08:00
parent 36674edff8
commit 4632ae74f3
10 changed files with 198 additions and 0 deletions

View File

@@ -1,5 +1,7 @@
import logging
import os
import sys
import threading
import time
from collections import deque
from datetime import datetime, timedelta
@@ -7,6 +9,9 @@ from typing import Any, Dict, List, Optional, Tuple
import cv2
import numpy as np
import redis
logger = logging.getLogger(__name__)
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

View File

@@ -235,6 +235,33 @@ class ResultReporter:
else:
raise Exception(f"MQTT 发布失败: {result[0]}")
def report_heartbeat(
self,
device_id: str,
status: Dict[str, Any]
) -> bool:
"""上报心跳"""
try:
heartbeat_data = {
"device_id": device_id,
"status": status,
"timestamp": datetime.now().isoformat(),
}
topic = f"{self._topic_prefix}/heartbeat/{device_id}"
if self._client and self._connected:
result = self._client.publish(topic, json.dumps(heartbeat_data, ensure_ascii=False))
if result[0] == mqtt.MQTT_ERR_SUCCESS:
self._logger.debug(f"心跳上报成功: {device_id}")
return True
self._logger.warning(f"心跳上报失败MQTT未连接: {device_id}")
return False
except Exception as e:
self._logger.error(f"心跳上报异常: {e}")
return False
def get_pending_alerts(self) -> List[Dict[str, Any]]:
"""获取待同步的告警"""
if self._local_cache:
@@ -301,6 +328,14 @@ class ResultReporter:
if self._client:
self._client.loop_stop()
self._client.disconnect()
def close(self):
"""关闭上报器(别名)"""
self.cleanup()
if self._client:
self._client.loop_stop()
self._client.disconnect()
self._logger.info("ResultReporter 清理完成")

View File

@@ -263,3 +263,120 @@ ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无
2026-01-30 09:27:08 | INFO | main | 收到信号 2, 正在停止服务...
2026-01-30 09:27:08 | INFO | main | 已停止所有视频流
2026-01-30 09:27:08 | INFO | main | 已停止所有视频流
2026-01-30 15:08:51 | INFO | main | Edge_Inference_Service 初始化开始
2026-01-30 15:08:51 | INFO | main | ==================================================
2026-01-30 15:08:51 | INFO | main | Edge_Inference_Service 启动
2026-01-30 15:08:51 | INFO | main | ==================================================
2026-01-30 15:08:51 | INFO | main | 数据库初始化成功
2026-01-30 15:08:55 | INFO | main | 配置管理器初始化成功
2026-01-30 15:08:55 | INFO | main | 流管理器初始化成功
2026-01-30 15:08:55 | INFO | main | 图像预处理器初始化完成: 输入尺寸 480x480, Batch大小 1-8, FP16模式 True
2026-01-30 15:08:55 | INFO | main | 预处理器初始化成功
2026-01-30 15:08:55 | INFO | main | TensorRT引擎初始化配置: 模型=./models/yolo11n.engine, 输入尺寸=480x480, Batch=1, FP16=True
2026-01-30 15:08:56 | INFO | main | 连接事件: load - TensorRT -> ./models/yolo11n.engine
2026-01-30 15:08:56 | INFO | main | TensorRT引擎加载成功: ./models/yolo11n.engine
2026-01-30 15:08:56 | INFO | main | 引擎已加载: default
2026-01-30 15:08:56 | INFO | main | 推理引擎加载成功: ./models/yolo11n.engine
2026-01-30 15:08:56 | INFO | main | 后处理器初始化完成: NMS阈值=0.45, 置信度阈值=0.5
2026-01-30 15:08:56 | INFO | main | 后处理器初始化成功
2026-01-30 15:08:56 | INFO | main | 结果上报器初始化成功
2026-01-30 15:08:56 | ERROR | main | 算法管理器初始化失败: name 'threading' is not defined
Traceback (most recent call last):
File "C:\Users\16337\PycharmProjects\ai_edge\main.py", line 124, in _init_algorithm_manager
self._algorithm_manager = AlgorithmManager()
File "C:\Users\16337\PycharmProjects\ai_edge\algorithms.py", line 267, in __init__
self._update_lock = threading.Lock()
NameError: name 'threading' is not defined
2026-01-30 15:08:56 | INFO | main | 所有组件初始化完成
2026-01-30 15:08:56 | INFO | main | 已启动 0 个视频流
2026-01-30 15:08:56 | INFO | main | Edge_Inference_Service 已启动
2026-01-30 15:08:56 | ERROR | main | 心跳上报失败: 'ResultReporter' object has no attribute 'report_heartbeat'
Traceback (most recent call last):
File "C:\Users\16337\PycharmProjects\ai_edge\main.py", line 374, in heartbeat
self._reporter.report_heartbeat("edge_inference_device", status)
AttributeError: 'ResultReporter' object has no attribute 'report_heartbeat'
2026-01-30 15:09:26 | ERROR | main | 心跳上报失败: 'ResultReporter' object has no attribute 'report_heartbeat'
Traceback (most recent call last):
File "C:\Users\16337\PycharmProjects\ai_edge\main.py", line 374, in heartbeat
self._reporter.report_heartbeat("edge_inference_device", status)
AttributeError: 'ResultReporter' object has no attribute 'report_heartbeat'
2026-01-30 15:09:56 | ERROR | main | 心跳上报失败: 'ResultReporter' object has no attribute 'report_heartbeat'
Traceback (most recent call last):
File "C:\Users\16337\PycharmProjects\ai_edge\main.py", line 374, in heartbeat
self._reporter.report_heartbeat("edge_inference_device", status)
AttributeError: 'ResultReporter' object has no attribute 'report_heartbeat'
2026-01-30 15:10:26 | ERROR | main | 心跳上报失败: 'ResultReporter' object has no attribute 'report_heartbeat'
Traceback (most recent call last):
File "C:\Users\16337\PycharmProjects\ai_edge\main.py", line 374, in heartbeat
self._reporter.report_heartbeat("edge_inference_device", status)
AttributeError: 'ResultReporter' object has no attribute 'report_heartbeat'
2026-01-30 15:10:30 | INFO | main | 收到信号 2, 正在停止服务...
2026-01-30 15:10:30 | INFO | main | 已停止所有视频流
2026-01-30 15:10:30 | INFO | main | 已停止所有视频流
2026-01-30 15:10:30 | INFO | main | TensorRT引擎资源已释放
2026-01-30 15:10:30 | INFO | main | 所有引擎已释放
2026-01-30 15:11:55 | INFO | main | Edge_Inference_Service 初始化开始
2026-01-30 15:11:55 | INFO | main | ==================================================
2026-01-30 15:11:55 | INFO | main | Edge_Inference_Service 启动
2026-01-30 15:11:55 | INFO | main | ==================================================
2026-01-30 15:11:55 | INFO | main | 数据库初始化成功
2026-01-30 15:11:59 | INFO | main | 配置管理器初始化成功
2026-01-30 15:11:59 | INFO | main | 流管理器初始化成功
2026-01-30 15:11:59 | INFO | main | 图像预处理器初始化完成: 输入尺寸 480x480, Batch大小 1-8, FP16模式 True
2026-01-30 15:11:59 | INFO | main | 预处理器初始化成功
2026-01-30 15:11:59 | INFO | main | TensorRT引擎初始化配置: 模型=./models/yolo11n.engine, 输入尺寸=480x480, Batch=1, FP16=True
2026-01-30 15:11:59 | INFO | main | 连接事件: load - TensorRT -> ./models/yolo11n.engine
2026-01-30 15:11:59 | INFO | main | TensorRT引擎加载成功: ./models/yolo11n.engine
2026-01-30 15:11:59 | INFO | main | 引擎已加载: default
2026-01-30 15:11:59 | INFO | main | 推理引擎加载成功: ./models/yolo11n.engine
2026-01-30 15:11:59 | INFO | main | 后处理器初始化完成: NMS阈值=0.45, 置信度阈值=0.5
2026-01-30 15:11:59 | INFO | main | 后处理器初始化成功
2026-01-30 15:11:59 | INFO | main | 结果上报器初始化成功
2026-01-30 15:11:59 | ERROR | main | 算法管理器初始化失败: name 'logger' is not defined
Traceback (most recent call last):
File "C:\Users\16337\PycharmProjects\ai_edge\algorithms.py", line 293, in start_config_subscription
redis_client = redis.Redis(
NameError: name 'redis' is not defined
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\16337\PycharmProjects\ai_edge\main.py", line 125, in _init_algorithm_manager
self._algorithm_manager.start_config_subscription()
File "C:\Users\16337\PycharmProjects\ai_edge\algorithms.py", line 313, in start_config_subscription
logger.error(f"启动配置订阅失败: {e}")
NameError: name 'logger' is not defined
2026-01-30 15:11:59 | INFO | main | 所有组件初始化完成
2026-01-30 15:11:59 | INFO | main | 已启动 0 个视频流
2026-01-30 15:11:59 | INFO | main | Edge_Inference_Service 已启动
2026-01-30 15:13:21 | INFO | main | 收到信号 2, 正在停止服务...
2026-01-30 15:13:21 | INFO | main | 已停止所有视频流
2026-01-30 15:13:21 | INFO | main | 已停止所有视频流
2026-01-30 15:13:21 | INFO | main | TensorRT引擎资源已释放
2026-01-30 15:13:21 | INFO | main | 所有引擎已释放
2026-01-30 15:14:04 | INFO | main | Edge_Inference_Service 初始化开始
2026-01-30 15:14:04 | INFO | main | ==================================================
2026-01-30 15:14:04 | INFO | main | Edge_Inference_Service 启动
2026-01-30 15:14:04 | INFO | main | ==================================================
2026-01-30 15:14:04 | INFO | main | 数据库初始化成功
2026-01-30 15:14:08 | INFO | main | 配置管理器初始化成功
2026-01-30 15:14:08 | INFO | main | 流管理器初始化成功
2026-01-30 15:14:08 | INFO | main | 图像预处理器初始化完成: 输入尺寸 480x480, Batch大小 1-8, FP16模式 True
2026-01-30 15:14:08 | INFO | main | 预处理器初始化成功
2026-01-30 15:14:08 | INFO | main | TensorRT引擎初始化配置: 模型=./models/yolo11n.engine, 输入尺寸=480x480, Batch=1, FP16=True
2026-01-30 15:14:08 | INFO | main | 连接事件: load - TensorRT -> ./models/yolo11n.engine
2026-01-30 15:14:08 | INFO | main | TensorRT引擎加载成功: ./models/yolo11n.engine
2026-01-30 15:14:08 | INFO | main | 引擎已加载: default
2026-01-30 15:14:08 | INFO | main | 推理引擎加载成功: ./models/yolo11n.engine
2026-01-30 15:14:08 | INFO | main | 后处理器初始化完成: NMS阈值=0.45, 置信度阈值=0.5
2026-01-30 15:14:08 | INFO | main | 后处理器初始化成功
2026-01-30 15:14:08 | INFO | main | 结果上报器初始化成功
2026-01-30 15:14:12 | INFO | main | 算法管理器初始化成功
2026-01-30 15:14:12 | INFO | main | 所有组件初始化完成
2026-01-30 15:14:12 | INFO | main | 已启动 0 个视频流
2026-01-30 15:14:12 | INFO | main | Edge_Inference_Service 已启动
2026-01-30 15:14:21 | INFO | main | 收到信号 2, 正在停止服务...
2026-01-30 15:14:21 | INFO | main | 已停止所有视频流
2026-01-30 15:14:21 | INFO | main | 已停止所有视频流
2026-01-30 15:14:21 | INFO | main | TensorRT引擎资源已释放
2026-01-30 15:14:21 | INFO | main | 所有引擎已释放

View File

@@ -159,3 +159,44 @@ Traceback (most recent call last):
File "C:\Users\16337\miniconda3\envs\yolo\lib\socket.py", line 845, in create_connection
sock.connect(sa)
ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。
2026-01-30 15:08:56 | ERROR | main | 算法管理器初始化失败: name 'threading' is not defined
Traceback (most recent call last):
File "C:\Users\16337\PycharmProjects\ai_edge\main.py", line 124, in _init_algorithm_manager
self._algorithm_manager = AlgorithmManager()
File "C:\Users\16337\PycharmProjects\ai_edge\algorithms.py", line 267, in __init__
self._update_lock = threading.Lock()
NameError: name 'threading' is not defined
2026-01-30 15:08:56 | ERROR | main | 心跳上报失败: 'ResultReporter' object has no attribute 'report_heartbeat'
Traceback (most recent call last):
File "C:\Users\16337\PycharmProjects\ai_edge\main.py", line 374, in heartbeat
self._reporter.report_heartbeat("edge_inference_device", status)
AttributeError: 'ResultReporter' object has no attribute 'report_heartbeat'
2026-01-30 15:09:26 | ERROR | main | 心跳上报失败: 'ResultReporter' object has no attribute 'report_heartbeat'
Traceback (most recent call last):
File "C:\Users\16337\PycharmProjects\ai_edge\main.py", line 374, in heartbeat
self._reporter.report_heartbeat("edge_inference_device", status)
AttributeError: 'ResultReporter' object has no attribute 'report_heartbeat'
2026-01-30 15:09:56 | ERROR | main | 心跳上报失败: 'ResultReporter' object has no attribute 'report_heartbeat'
Traceback (most recent call last):
File "C:\Users\16337\PycharmProjects\ai_edge\main.py", line 374, in heartbeat
self._reporter.report_heartbeat("edge_inference_device", status)
AttributeError: 'ResultReporter' object has no attribute 'report_heartbeat'
2026-01-30 15:10:26 | ERROR | main | 心跳上报失败: 'ResultReporter' object has no attribute 'report_heartbeat'
Traceback (most recent call last):
File "C:\Users\16337\PycharmProjects\ai_edge\main.py", line 374, in heartbeat
self._reporter.report_heartbeat("edge_inference_device", status)
AttributeError: 'ResultReporter' object has no attribute 'report_heartbeat'
2026-01-30 15:11:59 | ERROR | main | 算法管理器初始化失败: name 'logger' is not defined
Traceback (most recent call last):
File "C:\Users\16337\PycharmProjects\ai_edge\algorithms.py", line 293, in start_config_subscription
redis_client = redis.Redis(
NameError: name 'redis' is not defined
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\16337\PycharmProjects\ai_edge\main.py", line 125, in _init_algorithm_manager
self._algorithm_manager.start_config_subscription()
File "C:\Users\16337\PycharmProjects\ai_edge\algorithms.py", line 313, in start_config_subscription
logger.error(f"启动配置订阅失败: {e}")
NameError: name 'logger' is not defined