15
I would add django to the combo you proposed (opencv + keras + tensorflow). Being python based, it will give you a smooth interface to the others and a quick way to have the app up and ready.
The face detection in opencv is fairly straightforward using haar waveletes.
The expression recognition is where we will require learning (keras + tensorflow). I'd propose rather than building something from scratch, to use one of the existing models and retrain the last layer for classification (I know Inceptionv3 has been used for this).
The biggest thing here will be finding labeled data that matches what you want. Kaggle has a very good size data set if all you are looking for are 7 labels (anger, sad, disgust, fear, happy, neutral, surprise).
Let me know if you are interested.