|
|
@@ -94,9 +94,17 @@ class SafetyMonitorSystem:
|
|
|
self.event_pusher = None # 事件推送器
|
|
|
self.voice_announcer = None # 语音播报器
|
|
|
|
|
|
- # 功能开关
|
|
|
- self.use_llm = SYSTEM_CONFIG.get('enable_llm', True)
|
|
|
- self.use_ocr = SYSTEM_CONFIG.get('enable_ocr', True)
|
|
|
+ # 功能开关 - 从 SYSTEM_CONFIG 读取
|
|
|
+ self.enable_panorama_camera = SYSTEM_CONFIG.get('enable_panorama_camera', True)
|
|
|
+ self.enable_ptz_camera = SYSTEM_CONFIG.get('enable_ptz_camera', True)
|
|
|
+ self.enable_detection = SYSTEM_CONFIG.get('enable_detection', True)
|
|
|
+ self.enable_safety_detection = SYSTEM_CONFIG.get('enable_safety_detection', True)
|
|
|
+ self.enable_calibration = SYSTEM_CONFIG.get('enable_calibration', True)
|
|
|
+ self.enable_ptz_tracking = SYSTEM_CONFIG.get('enable_ptz_tracking', True)
|
|
|
+ self.enable_ocr = SYSTEM_CONFIG.get('enable_ocr', True)
|
|
|
+ self.enable_llm = SYSTEM_CONFIG.get('enable_llm', True)
|
|
|
+ self.enable_event_push = SYSTEM_CONFIG.get('enable_event_push', True)
|
|
|
+ self.enable_voice_announce = SYSTEM_CONFIG.get('enable_voice_announce', True)
|
|
|
|
|
|
# 状态
|
|
|
self.running = False
|
|
|
@@ -136,16 +144,20 @@ class SafetyMonitorSystem:
|
|
|
|
|
|
# 初始化摄像头
|
|
|
self.camera_source = camera_source
|
|
|
- self.camera = SimpleCamera(camera_source)
|
|
|
-
|
|
|
- if not self.camera.connect():
|
|
|
- logger.error("连接摄像头失败")
|
|
|
- return False
|
|
|
-
|
|
|
- logger.info(f"摄像头连接成功: {camera_source}")
|
|
|
+ if self.enable_panorama_camera:
|
|
|
+ self.camera = SimpleCamera(camera_source)
|
|
|
+
|
|
|
+ if not self.camera.connect():
|
|
|
+ logger.error("连接摄像头失败")
|
|
|
+ return False
|
|
|
+
|
|
|
+ logger.info(f"摄像头连接成功: {camera_source}")
|
|
|
+ else:
|
|
|
+ self.camera = None
|
|
|
+ logger.info("摄像头功能已禁用")
|
|
|
|
|
|
# 初始化 LLM 大模型服务
|
|
|
- if self.use_llm:
|
|
|
+ if self.enable_llm:
|
|
|
try:
|
|
|
llm_config = {**LLM_CONFIG}
|
|
|
if 'llm_host' in self.config:
|
|
|
@@ -160,22 +172,26 @@ class SafetyMonitorSystem:
|
|
|
self.use_llm = False
|
|
|
|
|
|
# 初始化安全检测器 (支持 LLM)
|
|
|
- try:
|
|
|
- llm_config = {**LLM_CONFIG} if self.use_llm else None
|
|
|
-
|
|
|
- self.detector = LLMSafetyDetector(
|
|
|
- yolo_model_path=self.config.get('model_path', SAFETY_DETECTION_CONFIG.get('model_path')),
|
|
|
- llm_config=llm_config,
|
|
|
- use_gpu=self.config.get('use_gpu', SAFETY_DETECTION_CONFIG.get('use_gpu', True)),
|
|
|
- use_llm=self.use_llm
|
|
|
- )
|
|
|
- logger.info("安全检测器初始化成功")
|
|
|
- except Exception as e:
|
|
|
- logger.error(f"安全检测器初始化失败: {e}")
|
|
|
- return False
|
|
|
+ if self.enable_detection and self.enable_safety_detection:
|
|
|
+ try:
|
|
|
+ llm_config = {**LLM_CONFIG} if self.enable_llm else None
|
|
|
+
|
|
|
+ self.detector = LLMSafetyDetector(
|
|
|
+ yolo_model_path=self.config.get('model_path', SAFETY_DETECTION_CONFIG.get('model_path')),
|
|
|
+ llm_config=llm_config,
|
|
|
+ use_gpu=self.config.get('use_gpu', SAFETY_DETECTION_CONFIG.get('use_gpu', True)),
|
|
|
+ use_llm=self.enable_llm
|
|
|
+ )
|
|
|
+ logger.info("安全检测器初始化成功")
|
|
|
+ except Exception as e:
|
|
|
+ logger.error(f"安全检测器初始化失败: {e}")
|
|
|
+ return False
|
|
|
+ else:
|
|
|
+ self.detector = None
|
|
|
+ logger.info("安全检测功能已禁用")
|
|
|
|
|
|
# 初始化编号识别器
|
|
|
- if self.use_ocr and self.use_llm:
|
|
|
+ if self.enable_ocr and self.enable_llm:
|
|
|
try:
|
|
|
self.number_recognizer = NumberRecognizer(LLM_CONFIG)
|
|
|
logger.info("编号识别器初始化成功")
|
|
|
@@ -184,7 +200,7 @@ class SafetyMonitorSystem:
|
|
|
self.number_recognizer = None
|
|
|
|
|
|
# 初始化事件推送器
|
|
|
- if SYSTEM_CONFIG.get('enable_event_push', True):
|
|
|
+ if self.enable_event_push:
|
|
|
try:
|
|
|
push_config = {**EVENT_PUSHER_CONFIG}
|
|
|
if 'api_host' in self.config:
|
|
|
@@ -198,7 +214,7 @@ class SafetyMonitorSystem:
|
|
|
logger.warning(f"事件推送器初始化失败: {e}")
|
|
|
|
|
|
# 初始化语音播报器
|
|
|
- if SYSTEM_CONFIG.get('enable_voice_announce', True):
|
|
|
+ if self.enable_voice_announce:
|
|
|
try:
|
|
|
self.voice_announcer = VoiceAnnouncer(
|
|
|
tts_config=VOICE_ANNOUNCER_CONFIG.get('tts', {}),
|
|
|
@@ -264,6 +280,13 @@ class SafetyMonitorSystem:
|
|
|
|
|
|
def _detection_worker(self):
|
|
|
"""检测工作线程"""
|
|
|
+ # 检查摄像头和检测是否启用
|
|
|
+ if not self.enable_panorama_camera or not self.enable_detection:
|
|
|
+ logger.info("摄像头或检测功能已禁用,检测线程休眠")
|
|
|
+ while self.running:
|
|
|
+ time.sleep(1)
|
|
|
+ return
|
|
|
+
|
|
|
detection_interval = SAFETY_DETECTION_CONFIG.get('detection_interval', 0.1)
|
|
|
last_detection_time = 0
|
|
|
|
|
|
@@ -280,7 +303,7 @@ class SafetyMonitorSystem:
|
|
|
current_time = time.time()
|
|
|
|
|
|
# 获取帧
|
|
|
- frame = self.camera.get_frame()
|
|
|
+ frame = self.camera.get_frame() if self.camera else None
|
|
|
if frame is None:
|
|
|
time.sleep(0.01)
|
|
|
continue
|
|
|
@@ -693,18 +716,20 @@ def main():
|
|
|
print("\n系统初始化失败!")
|
|
|
return 1
|
|
|
|
|
|
- # 禁用功能
|
|
|
+ # 禁用功能 (命令行参数覆盖配置)
|
|
|
if args.no_llm:
|
|
|
- system.use_llm = False
|
|
|
+ system.enable_llm = False
|
|
|
print("大模型判断已禁用,使用规则判断")
|
|
|
if args.no_ocr:
|
|
|
- system.use_ocr = False
|
|
|
+ system.enable_ocr = False
|
|
|
system.number_recognizer = None
|
|
|
print("编号识别已禁用")
|
|
|
if args.no_push:
|
|
|
+ system.enable_event_push = False
|
|
|
system.event_pusher = None
|
|
|
print("事件推送已禁用")
|
|
|
if args.no_voice:
|
|
|
+ system.enable_voice_announce = False
|
|
|
system.voice_announcer = None
|
|
|
print("语音播报已禁用")
|
|
|
|