""" Centralized configuration for the person detection dataset pipeline. All tunable parameters are defined here. """ import os # ────────────────────────────────────────────── # Paths # ────────────────────────────────────────────── BASE_DIR = os.path.dirname(os.path.abspath(__file__)) VIDEO_DIR = os.path.join(BASE_DIR, "video_data") DATASET_DIR = os.path.join(BASE_DIR, "dataset") CHECKPOINT_DIR = os.path.join(BASE_DIR, "checkpoints") LOG_DIR = os.path.join(BASE_DIR, "logs") # Model paths DETECTOR_MODEL = os.path.join(BASE_DIR, "yolo26x.pt") # Large model for auto-labeling TRAIN_MODEL = "yolo26n.pt" # Nano model to train (auto-downloads) # ────────────────────────────────────────────── # Dataset Extraction # ────────────────────────────────────────────── MAX_DATASET_SIZE_GB = 50 # Stop extraction if dataset exceeds this JPEG_QUALITY = 85 # JPEG save quality (1-100) DETECTION_CONF = 0.35 # Min confidence for person detection DETECTION_IOU = 0.45 # NMS IoU threshold BATCH_SIZE = 16 # Frames per YOLO inference batch PERSON_CLASS_ID = 0 # YOLO class ID for "person" # ────────────────────────────────────────────── # Adaptive Sampling # ────────────────────────────────────────────── BASE_FPS = 1.0 # Default: 1 frame per second HIGH_FPS = 3.0 # When person detected: 3 frames per second LOW_FPS = 0.5 # When idle (no person): 0.5 frames per second HIGH_FPS_DURATION = 5 # Seconds to stay at high FPS after person detected LOW_FPS_THRESHOLD = 10 # Seconds without person before dropping to low FPS # ────────────────────────────────────────────── # Train/Test Split (Camera-Level) # ────────────────────────────────────────────── TEST_CAMERAS = 4 # Number of cameras to hold out for testing RANDOM_SEED = 42 # For reproducible camera selection # ────────────────────────────────────────────── # Training # ────────────────────────────────────────────── TRAIN_EPOCHS = 100 TRAIN_BATCH = 16 # Batch size for training (adjust for VRAM) TRAIN_IMGSZ = 640 # Training image size EARLY_STOP_PATIENCE = 15 # Stop if no improvement for N epochs TRAIN_WORKERS = 8 # DataLoader workers TRAIN_PROJECT = os.path.join(BASE_DIR, "runs", "detect") TRAIN_NAME = "person_detection" # ────────────────────────────────────────────── # Video file extensions to process # ────────────────────────────────────────────── VIDEO_EXTENSIONS = {".mp4", ".avi", ".mkv", ".mov", ".wmv", ".flv"}