117 lines
3.7 KiB
Python
117 lines
3.7 KiB
Python
|
|
#!/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()
|