8.3 KiB
8.3 KiB
Project Report: Multimodal Driver State Analysis
1) Project Scope
This repository implements an end-to-end workflow for multimodal driver-state analysis in a simulator setup.
The system combines:
- Facial Action Units (AUs)
- Eye-tracking features (fixations, saccades, blinks, pupil behavior)
It covers:
- Data ingestion and conversion
- Sliding-window feature generation
- Exploratory analysis
- Model training experiments
- Real-time inference from SQLite
- MQTT publishing
- Optional Linux
systemdscheduling
2) End-to-End Workflow
2.1 Data Ingestion and Conversion
Main scripts:
dataset_creation/create_parquet_files_from_owncloud.pydataset_creation/parquet_file_creation.py
Purpose:
- Read source recordings (
.h5and/or ownCloud-fetched files) - Keep relevant simulator/physiology columns
- Filter invalid samples (e.g., invalid level segments)
- Export subject-level parquet files
2.2 Feature Engineering (Offline)
Main script:
dataset_creation/combined_feature_creation.py
Behavior:
- Builds fixed-size sliding windows over subject time series
- Aggregates AU statistics per window (e.g.,
FACE_AUxx_mean) - Computes eye-feature aggregates (fix/sacc/blink/pupil metrics)
- Produces training-ready feature tables
2.3 Online Camera + Eye + AU Feature Extraction
Main scripts:
dataset_creation/camera_handling/camera_stream_AU_and_ET_new.pydataset_creation/camera_handling/eyeFeature_new.pydataset_creation/camera_handling/db_helper.py
Runtime behavior:
- Captures webcam stream with OpenCV
- Extracts gaze/iris-based signals via MediaPipe
- Records overlapping windows (
VIDEO_DURATION=50s,START_INTERVAL=5s,FPS=25) - Runs AU extraction (
py-feat) from recorded video segments - Computes eye-feature summary from generated gaze parquet
- Writes merged rows to SQLite table
feature_table
Operational note:
DB_PATHand other paths are currently code-configured and must be adapted per deployment.
2.4 Model Training
Location:
model_training/(primarily notebook-driven)
Included model families:
- CNN variants (different fusion strategies)
- XGBoost
- Isolation Forest
- OCSVM
- DeepSVDD
Supporting utilities:
model_training/tools/scaler.pymodel_training/tools/performance_split.pymodel_training/tools/mad_outlier_removal.pymodel_training/tools/evaluation_tools.py
2.5 Real-Time Prediction and Messaging
Main script:
predict_pipeline/predict_sample.py
Pipeline:
- Loads runtime config (
predict_pipeline/config.yaml) - Pulls latest row from SQLite (
database.path/table/key) - Replaces missing values using
fallbackmap - Optionally applies scaler (
.pkl/.joblib) - Loads model (
.keras,.pkl,.joblib) and predicts - Publishes JSON payload to MQTT topic
Expected payload form:
{
"valid": true,
"_id": 123,
"prediction": 0
}
2.6 Scheduled Prediction (Linux)
Files:
predict_pipeline/predict.servicepredict_pipeline/predict.timerpredict_pipeline/predict_service_timer_documentation.md
Role:
- Run inference repeatedly without manual execution
- Timer/service configuration can be customized per target machine
3) Runtime Configuration
Primary config file:
predict_pipeline/config.yaml
Sections:
database: SQLite location + table + sort keymodel: model pathscaler: scaler usage + pathmqtt: broker and publish formatsample.columns: expected feature orderfallback: default values for NaN replacement
Important:
- The repository currently uses environment-specific absolute paths in some scripts/configs.
- Paths should be normalized before deployment to a new machine.
4) Data and Feature Expectations
Prediction expects SQLite rows containing:
_Idstart_time- All configured model features (AUs + eye metrics)
Common feature groups:
FACE_AUxx_meancolumns- Fixation counters and duration statistics
- Saccade count/amplitude/duration statistics
- Blink count/duration statistics
- Pupil mean and IPA
5) Installation and Dependencies
Install base requirements:
pip install -r requirements.txt
Typical key packages in this project:
numpy,pandas,scikit-learn,scipy,pyarrow,pyyaml,joblibopencv-python,mediapipe,torch,py-feat,pygazeanalyserpaho-mqtt- optional data access stack (
pyocclient,h5py,tables)
6) Repository File Inventory
6.1 Root
.gitignore- Git ignore rulesreadme.md- minimal quickstart documentationproject_report.md- full technical documentation (this file)requirements.txt- Python dependencies
6.2 Dataset Creation
dataset_creation/parquet_file_creation.py- local source to parquet conversiondataset_creation/create_parquet_files_from_owncloud.py- ownCloud download + parquet conversiondataset_creation/combined_feature_creation.py- sliding-window multimodal feature generationdataset_creation/maxDist.py- helper/statistical utility script
AU Creation
dataset_creation/AU_creation/AU_creation_service.py- AU extraction service workflowdataset_creation/AU_creation/pyfeat_docu.ipynb- py-feat exploratory notes
Camera Handling
dataset_creation/camera_handling/camera_stream_AU_and_ET_new.py- current camera + AU + eye online pipelinedataset_creation/camera_handling/eyeFeature_new.py- eye-feature extraction from gaze parquetdataset_creation/camera_handling/db_helper.py- SQLite helper functions (camera pipeline)dataset_creation/camera_handling/camera_stream_AU_and_ET.py- older pipeline variantdataset_creation/camera_handling/camera_stream.py- baseline camera streaming scriptdataset_creation/camera_handling/db_test.py- DB test utility
6.3 EDA
EDA/EDA.ipynb- main EDA notebookEDA/distribution_plots.ipynb- distribution visualizationEDA/histogramms.ipynb- histogram analysisEDA/researchOnSubjectPerformance.ipynb- subject-level analysisEDA/owncloud_file_access.ipynb- ownCloud exploration/access notebookEDA/calculate_replacement_values.ipynb- fallback/median computation notebookEDA/login.yaml- local auth/config artifact for EDA workflows
6.4 Model Training
CNN
model_training/CNN/CNN_simple.ipynbmodel_training/CNN/CNN_crossVal.ipynbmodel_training/CNN/CNN_crossVal_EarlyFusion.ipynbmodel_training/CNN/CNN_crossVal_EarlyFusion_Filter.ipynbmodel_training/CNN/CNN_crossVal_EarlyFusion_Test_Eval.ipynbmodel_training/CNN/CNN_crossVal_faceAUs.ipynbmodel_training/CNN/CNN_crossVal_faceAUs_eyeFeatures.ipynbmodel_training/CNN/CNN_crossVal_HybridFusion.ipynbmodel_training/CNN/CNN_crossVal_HybridFusion_Test_Eval.ipynbmodel_training/CNN/deployment_pipeline.ipynb
XGBoost
model_training/xgboost/xgboost.ipynbmodel_training/xgboost/xgboost_groupfold.ipynbmodel_training/xgboost/xgboost_new_dataset.ipynbmodel_training/xgboost/xgboost_regulated.ipynbmodel_training/xgboost/xgboost_with_AE.ipynbmodel_training/xgboost/xgboost_with_MAD.ipynb
Isolation Forest
model_training/IsolationForest/iforest_training.ipynb
OCSVM
model_training/OCSVM/ocsvm_with_AE.ipynb
DeepSVDD
model_training/DeepSVDD/deepSVDD.ipynb
MAD Outlier Removal
model_training/MAD_outlier_removal/mad_outlier_removal.ipynbmodel_training/MAD_outlier_removal/mad_outlier_removal_median.ipynb
Shared Training Tools
model_training/tools/scaler.pymodel_training/tools/performance_split.pymodel_training/tools/mad_outlier_removal.pymodel_training/tools/evaluation_tools.py
6.5 Prediction Pipeline
predict_pipeline/predict_sample.py- runtime prediction + MQTT publishpredict_pipeline/config.yaml- runtime database/model/scaler/mqtt configpredict_pipeline/fill_db.ipynb- helper notebook for DB setup/testingpredict_pipeline/predict.service- systemd service unitpredict_pipeline/predict.timer- systemd timer unitpredict_pipeline/predict_service_timer_documentation.md- Linux service/timer guide
6.6 Generic Tools
tools/db_helpers.py- common SQLite utilities used by prediction path
7) Known Technical Notes
- Several paths are hardcoded for a specific runtime environment and should be parameterized for portability.
- Camera and AU processing are resource-intensive; version pinning and hardware validation are recommended.