File size: 1,613 Bytes
90fa9aa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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