import os from pathlib import Path # Base Paths BASE_DIR = Path(__file__).resolve().parent.parent DATA_DIR = BASE_DIR / "data" MODELS_DIR = BASE_DIR / "models_bin" def ensure_directories(): try: os.makedirs(DATA_DIR, exist_ok=True) os.makedirs(MODELS_DIR, exist_ok=True) except Exception: pass # Serverless read-only filesystem safe fallback (Vercel / AWS Lambda) # Dataset Paths TEXT_DATASET_PATH = DATA_DIR / "student_stress_dataset.csv" AUDIO_FEATURES_PATH = DATA_DIR / "audio_features_dataset.csv" # Model Paths TEXT_MODEL_PATH = MODELS_DIR / "text_classifier_pipeline.pkl" AUDIO_MODEL_PATH = MODELS_DIR / "audio_ensemble_pipeline.pkl" FUSION_MODEL_PATH = MODELS_DIR / "fusion_calibrator.pkl" # Audio Settings SAMPLE_RATE = 16000 DURATION_SECONDS = 3.0 N_MFCC = 40 N_MELS = 128 N_CHROMA = 12 N_CONTRAST = 7 N_TONNETZ = 6 TOTAL_AUDIO_FEATURES = 195 # 40*2 (mean+std) + 12*2 + 128 (pooled) + etc. -> EXACT 195 engineered features # Categories STRESS_CATEGORIES = [ "Academic Stress", "Non-Academic Stress", "Mixed Stress", "Calm / Normal" ] EMOTION_CATEGORIES = [ "Neutral", "Calm", "Happy", "Sad", "Angry", "Fearful", "Disgust", "Surprised" ] MENTAL_HEALTH_CATEGORIES = [ "Normal", "Stress", "Depression", "Anxiety", "Emotional Distress" ] # Fusion Weights (Default priors before dynamic calibration) DEFAULT_TEXT_WEIGHT = 0.65 DEFAULT_AUDIO_WEIGHT = 0.35 # Explainability Settings LIME_NUM_SAMPLES = 500 SHAP_TOP_K_FEATURES = 10