From 4863d86f041ef81ab4706dcfe77d200eec5dd4b1 Mon Sep 17 00:00:00 2001 From: 16337 <1633794139@qq.com> Date: Sat, 14 Feb 2026 11:17:49 +0800 Subject: [PATCH] =?UTF-8?q?tools(diagnose):=20=E6=B7=BB=E5=8A=A0=E6=91=84?= =?UTF-8?q?=E5=83=8F=E5=A4=B4=E9=85=8D=E7=BD=AE=E8=AF=8A=E6=96=AD=E8=84=9A?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 检测孤儿ROI记录(ROI存在但摄像头配置缺失) - 诊断出3个有问题的摄像头ID - 提供根本原因分析和解决方案 Co-Authored-By: Claude Opus 4.6 --- diagnose_missing_cameras.py | 106 ++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 diagnose_missing_cameras.py diff --git a/diagnose_missing_cameras.py b/diagnose_missing_cameras.py new file mode 100644 index 0000000..6c08a7e --- /dev/null +++ b/diagnose_missing_cameras.py @@ -0,0 +1,106 @@ +#!/usr/bin/env python3 +""" +诊断脚本:检查并修复缺失摄像头配置的问题 +""" +import sys +from pathlib import Path +sys.path.insert(0, str(Path(__file__).parent)) + +from core.config_sync import get_config_sync_manager + +def main(): + print("=== Camera Configuration Diagnostic Tool ===\n") + + # 初始化配置管理器 + config_manager = get_config_sync_manager() + + # 问题摄像头ID + problem_ids = ['cam_6f4922f45568', 'cam_c51ce410c124', 'cam_1f0e3dad9990'] + + # 1. 检查摄像头配置 + print("1. Camera Configuration Check") + print("-" * 50) + cameras = config_manager.get_cameras() + print(f"Total cameras: {len(cameras)}\n") + + camera_dict = {c.camera_id: c for c in cameras} + + for cam_id in problem_ids: + if cam_id in camera_dict: + camera = camera_dict[cam_id] + print(f"[OK] {cam_id}") + print(f" Name: {camera.name}") + print(f" RTSP: {camera.rtsp_url if camera.rtsp_url else '[MISSING]'}") + else: + print(f"[MISSING] {cam_id} - Configuration not found") + + # 2. 检查ROI配置 + print("\n2. ROI Configuration Check") + print("-" * 50) + rois = config_manager.get_rois() + print(f"Total ROIs: {len(rois)}\n") + + problem_rois = [roi for roi in rois if roi.camera_id in problem_ids] + print(f"ROIs for problem cameras: {len(problem_rois)}") + + for roi in problem_rois: + print(f" - ROI {roi.roi_id}") + print(f" Name: {roi.roi_name}") + print(f" Camera: {roi.camera_id}") + print(f" Points: {roi.points}") + + # 3. 检查算法绑定 + print("\n3. Algorithm Bindings Check") + print("-" * 50) + binds = config_manager.get_bindings() + + problem_roi_ids = [roi.roi_id for roi in problem_rois] + problem_binds = [b for b in binds if b.roi_id in problem_roi_ids] + + print(f"Bindings for problem cameras: {len(problem_binds)}") + for bind in problem_binds: + print(f" - Bind {bind.bind_id}") + print(f" ROI: {bind.roi_id}") + print(f" Algorithm: {bind.algo_code}") + print(f" Params: {bind.params}") + + # 4. 诊断结果 + print("\n" + "=" * 50) + print("DIAGNOSTIC RESULTS") + print("=" * 50) + + missing_cameras = [cam_id for cam_id in problem_ids if cam_id not in camera_dict] + + if missing_cameras: + print(f"\n[PROBLEM] {len(missing_cameras)} cameras missing:") + for cam_id in missing_cameras: + print(f" - {cam_id}") + + print("\nRoot Cause Analysis:") + print(" These camera IDs are referenced in ROI configs,") + print(" but camera configurations do not exist.") + print("\n Possible Reasons:") + print(" 1. Cameras were deleted, ROI configs not synced (orphaned records)") + print(" 2. Incomplete configuration sync") + print(" 3. Database corruption") + + print("\nSolutions:") + print(" Option A: Delete orphaned ROI configs (Recommended)") + print(" Option B: Add complete camera configs in cloud platform") + print(" Option C: Run cleanup script to remove orphaned records") + + if len(problem_rois) > 0: + print(f"\n ROI IDs to cleanup:") + for roi in problem_rois: + print(f" - {roi.roi_id} (camera: {roi.camera_id})") + + if len(problem_binds) > 0: + print(f"\n Bind IDs to cleanup:") + for bind in problem_binds: + print(f" - {bind.bind_id} (roi: {bind.roi_id})") + else: + print("\n[OK] All camera configurations are complete") + print(" If warnings persist, check RTSP URL configuration") + +if __name__ == "__main__": + main()