It's just a bunch of python scripts. Together they:
- Harvest emotions dataset to extract faces from it in normalized way (same size, grey colours)
- Teach a fisherfaces classifier to classificate emotions
- Swap faces to emoticons in real-time (using video stream from a webcam)
If you don't have a dataset you can use a model teached by us and start from step 4:
- Put CK emotions dataset inside /data/ folder following tips from Paul van Gent's blog post
- Run process_dataset.py. It harvests dataset and puts neutral and emotions images into /data/sorted_set/, it also normalizes them
- Run prepare_model.py to teach a model using /data/sorted_set/ files. You can specify list emotions you want to use. It saves a teached model to /models/emotion_detection_model.xml
- Run webcam.py. It opens a webcam stream, detect emotions on faces (using /models/emotion_detection_model.xml) and changes them to specified emojis (/graphics/)
To see it in action you need:
- Python
- OpenCV
- Dataset to teach a model, but you can used one provided by us. It was teached on http://www.consortium.ri.cmu.edu/ckagree/
Q: I have my own emotion dataset. How can I use it with these scripts?
A: You need to supply normalized images of faces with emotions. Use find_faces method from face_detect.py to find faces on your images. It returns cropped and normalized faces, save them to to /data/sorted_set/%emotion_name%. Then run step 3 to teach a model and step 4 to begin swapping faces from webcam.
Q: I want to use different emojis, for example my university profesors
A: Place your university profesors heads inside /graphics/ folder following filenames convetion (filename should be an emotion label)
We got the idea (and harvesting of files) to use Cohn-Kanade dataset to classificate emotions from Paul van Gent's blog post, thanks for that!