#!/usr/bin/env python3 """ 清理旧的ROI配置 - 只保留用户实际配置的3个ROI """ 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("=== Old ROI Cleanup Tool ===\n") config_manager = get_config_sync_manager() # Get all ROIs all_rois = config_manager.get_roi_configs(force_refresh=True) binds = config_manager.get_bindings() print(f"Current ROIs: {len(all_rois)}") # Separate old ROIs (using Chinese names) from user-configured ROIs (using cam_xxx) user_rois = [roi for roi in all_rois if roi.camera_id.startswith('cam_')] old_rois = [roi for roi in all_rois if not roi.camera_id.startswith('cam_')] print(f"\nUser-configured ROIs (cam_xxx format): {len(user_rois)}") for roi in user_rois: print(f" - ROI: {roi.roi_id}") print(f" Camera: {roi.camera_id}") print() print(f"Old ROIs (Chinese name format, to be deleted): {len(old_rois)}") for roi in old_rois: print(f" - ROI: {roi.roi_id}") print(f" Camera: {roi.camera_id}") print() if not old_rois: print("[OK] No old ROIs found. Database is clean!") return # Find related bindings old_roi_ids = {roi.roi_id for roi in old_rois} old_binds = [b for b in binds if b.roi_id in old_roi_ids] print(f"Related old bindings: {len(old_binds)}") for bind in old_binds: print(f" - Bind: {bind.bind_id} (ROI: {bind.roi_id}, Algo: {bind.algo_code})") # Ask for confirmation print("\n" + "=" * 50) print("Cleanup Plan:") print(f" 1. Delete {len(old_rois)} old ROI records (Chinese name format)") print(f" 2. Delete {len(old_binds)} related old binding records") print(f" 3. Keep {len(user_rois)} user-configured ROIs (cam_xxx format)") print("=" * 50) response = input("\nProceed with cleanup? (yes/no): ").strip().lower() if response != 'yes': print("\n[CANCELLED] Cleanup aborted") return # Perform cleanup print("\n[EXECUTING] Cleanup in progress...") config_manager._init_database() db_manager = config_manager._db_manager if not db_manager: print("[ERROR] Database manager not available") return deleted_rois = 0 deleted_binds = 0 # Delete old bindings first for bind in old_binds: try: db_manager.delete_binding(bind.bind_id) deleted_binds += 1 print(f" [OK] Deleted binding: {bind.bind_id}") except Exception as e: print(f" [FAIL] Failed to delete binding {bind.bind_id}: {e}") # Delete old ROIs for roi in old_rois: try: db_manager.delete_roi(roi.roi_id) deleted_rois += 1 print(f" [OK] Deleted ROI: {roi.roi_id} (Camera: {roi.camera_id})") except Exception as e: print(f" [FAIL] Failed to delete ROI {roi.roi_id}: {e}") # Invalidate cache config_manager.invalidate_all_cache() # Summary print("\n" + "=" * 50) print("Cleanup Summary") print("=" * 50) print(f"Deleted old ROIs: {deleted_rois}/{len(old_rois)}") print(f"Deleted old bindings: {deleted_binds}/{len(old_binds)}") print(f"Remaining user ROIs: {len(user_rois)}") if deleted_rois == len(old_rois): print("\n[SUCCESS] Old ROI records cleaned up!") print("\nNow you have:") print(f" - {len(user_rois)} ROI configs (your actual configurations)") print(" - 0 ROI configs (old data)") print("\nNext: You need to add the 3 camera configs for cam_xxx IDs") else: print("\n[WARNING] Some records failed to delete") if __name__ == "__main__": main()