Research-grade multimodal emotion recognition system using:
- Video face dynamics (FaceNet + temporal BiLSTM + attention)
- Physiological signals (BVP/EDA/TEMP/ACC_X/ACC_Y/ACC_Z)
- Cross-modal attention + soft reliability gating
- emotion_recognition/models: all model components and full assembly
- emotion_recognition/utils: preprocessing, dataset, metrics
- emotion_recognition/scripts: stage-wise training + inference utilities
- streamlit_app.py: deployment-ready web app
python3 -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install -r requirements.txtpython -m compileall emotion_recognitionpython -m emotion_recognition.scripts.train_face \
--dataset-root Dataset \
--fer-root Dataset/FER \
--ck-csv Dataset/CKPLUS/ckextended.csv \
--epochs 50 \
--batch-size 64 \
--output artifacts/facenet_stage1.pthpython -m emotion_recognition.scripts.train_signal \
--dataset-root Dataset \
--wesad-root Dataset/WESAD \
--epochs 50 \
--batch-size 32 \
--output artifacts/signal_stage2.pthIf NPZ files are missing, Stage 2 auto-prepares artifacts/wesad_train.npz and artifacts/wesad_val.npz from raw S*/S*.pkl files.
python -m emotion_recognition.scripts.train_multimodal \
--dataset-root Dataset \
--facenet-stage1 artifacts/facenet_stage1.pth \
--signal-stage2 artifacts/signal_stage2.pth \
--epochs 50 \
--batch-size 8 \
--output artifacts/multimodal_stage3.pthpython -m emotion_recognition.scripts.check_data --dataset-root Datasetpython -m emotion_recognition.scripts.predict_clip \
--checkpoint artifacts/multimodal_stage3.pth \
--video /path/to/clip.MP4 \
--signal-csv /path/to/32-Hertz.csv \
--participant-id P01 \
--ad-code AD01 \
--demographics-csv /path/to/Participant_demographic_information.csvpython -m emotion_recognition.scripts.inference_realtime \
--checkpoint artifacts/multimodal_stage3.pthstreamlit run streamlit_app.pyUpload:
- checkpoint (.pth)
- video clip (.mp4)
- optional signal CSV and participant/ad metadata for aligned multimodal inference
Use a Streamlit Space and upload this repository.
Suggested settings:
- SDK: streamlit
- Python: 3.11
- Startup command:
streamlit run streamlit_app.py --server.port 7860 --server.address 0.0.0.0
- Remove large local artifacts from Git tracking (checkpoints/data are ignored by default).
- Initialize git and commit.
- Push to GitHub.
git init
git add .
git commit -m "Initial multimodal emotion recognition implementation"
git branch -M main
git remote add origin https://github.com/<your-username>/<your-repo>.git
git push -u origin main- Validation/test split is participant-level to avoid leakage.
- Stage 3 evaluation aggregates all windows per clip (
meanormajority). - Checkpoint stores normalization stats used by deployment app.
- NeuroBioSense
32-Hertz.csvfiles without participant/ad keys use a label-agnostic fallback segment strategy.
Run one command to train/evaluate all three modes on binary valence and auto-generate final report files:
./emotion_recognition/scripts/run_final_project_suite.shOutputs:
artifacts/final_valence_face_only.json/.pthartifacts/final_valence_signal_only.json/.pthartifacts/final_valence_multimodal.json/.pthartifacts/final_valence_metadata.json/.pklreports/final_project_report.mdreports/final_project_report.texreports/diagrams/data_pipeline.mmdreports/diagrams/architecture.mmd
Optional LaTeX build:
pdflatex -output-directory reports reports/final_project_report.tex