Spaces:
Running
Running
| #!/usr/bin/env python3 | |
| """ | |
| scripts/data_watcher.py | |
| Watches the data/ directories and auto-triggers detector training when new images arrive. | |
| Requires: pip install watchdog requests | |
| """ | |
| import os | |
| import time | |
| import json | |
| import requests | |
| from watchdog.observers import Observer | |
| from watchdog.events import FileSystemEventHandler | |
| API_URL = os.environ.get('BASE_URL', 'http://localhost:5000') | |
| SETTINGS_FILE = 'settings.json' | |
| class NewImageHandler(FileSystemEventHandler): | |
| def on_created(self, event): | |
| if event.is_directory: | |
| return | |
| ext = os.path.splitext(event.src_path)[1].lower() | |
| if ext in ('.jpg', '.jpeg', '.png'): | |
| print(f"[Watcher] New image detected: {event.src_path}") | |
| self.trigger_training() | |
| def trigger_training(self): | |
| # Load last training params | |
| try: | |
| with open(SETTINGS_FILE, 'r') as f: | |
| params = json.load(f) | |
| except Exception: | |
| print("[Watcher] Could not read settings.json; skipping auto-retrain") | |
| return | |
| if not params.get('auto_retrain', False): | |
| print("[Watcher] auto_retrain disabled in settings; skipping") | |
| return | |
| try: | |
| resp = requests.post(f"{API_URL}/api/train/detector", json=params) | |
| print(f"[Watcher] Auto-retrain triggered: {resp.status_code}, {resp.text}") | |
| except Exception as e: | |
| print(f"[Watcher] Error triggering retrain: {e}") | |
| if __name__ == '__main__': | |
| paths = [ | |
| 'data/train/real', | |
| 'data/train/morph', | |
| 'data/val/real', | |
| 'data/val/morph' | |
| ] | |
| event_handler = NewImageHandler() | |
| observer = Observer() | |
| for p in paths: | |
| if os.path.isdir(p): | |
| observer.schedule(event_handler, p, recursive=False) | |
| print(f"[Watcher] Monitoring {p}" ) | |
| observer.start() | |
| try: | |
| while True: | |
| time.sleep(1) | |
| except KeyboardInterrupt: | |
| observer.stop() | |
| observer.join() |