A CNN for classifying drunkeness based on infrared facial images (essentially the heat distribution across the face).
Written by Kevin Tang and Andrew Vernier as a class project for EECS 498/598: Affective ML.
We were able to achieve a statistically significant accuracy of 0.87 for classifying facial infrared images as drunk or sober.
Paper: Drunk Detection using Machine Learning Methods and Infrared Images
Presentation: Drunk Detection using Machine Learning Methods and Infrared Images
The images used to train our CNN comes from the SOBER-DRUNK DATA BASE created by Georgia Koukiou and Vassilis Anastassopoulos from the University of Patras.
The images used are infrared images of 41 particpants before and after consuming various amounts of alcohol. Although the original data contains infrared images of many body parts, we only utilize the frontal facial infrared images for training our CNN.
Below is an example of a frontal facial infrared image represented in grayscale:
The following README contains more detailed information about data collection and methodology:
00_Readme_sober_drunk.txt
# Setup virtualenv
python3 -m venv env; source env/bin/activate
# Python 3.7 or above
python -V
pip install -r requirements
# Prepare data to be used (saves data to data_<YYYY-MM-DD-hh-mm-ss>.pickle)
python drunk_detector data --train-files data/train/*/* --test-files data/test/*/* --val-files data/validation/*/*
# Predict drunkeness using best CNN model
python drunk_detector predict -m sum -d data_*.pickle
# Train a new hyperparameter tuned CNN
python drunk_detector train -m sum -d data_*.pickle