Project: Identity Recognition
One requirement of the ECE curriculum at Carnegie Mellon is completing a capstone design course. A capstone course is a time-intensive class where students often pair up and build a project throughout the course of the semester. Towards the end of the semester, faculty members, parents, other students, and even company recruiters gather and observe the different capstone projects.
I chose to take the Signal Processing capstone design course, 18-551. And, with a partner*, I built an "identity recognition" engine.
So much about us, such as our names, contact information, educational background, work history, and even friends, is available on the internet; we've formed an "identity network" online. For our capstone design project, we chose to build an identity recognition application to index into this network. The design and implementation of our project required cross-disciplinary knowledge from signal processing, pattern recognition, and to an extent even machine learning. In a nutshell, the goal of our project was to retrieve data on an individual, representative of their identity, given just one image of their face.
We broke up the task of identity recognition into four stages: face detection, image normalization, recognition, and entry lookup. Face detection refers to the process of classifying which part of an image is the facial region. Face normalization accounts for differences in lighting, facial expression, rotation, etc. which might make the same person look differently. Recognition refers to classifying a probe image as a known target person. Finally, entry lookup was used to retrieve information on the person once the application recognized who they were.
Throughout this project, I designed and implemented many novel ideas. First was the idea of modeling the face as a polygon instead of a rectangle; I etched out pixels which lied outside of the polygon representative of the facial region in order to focus only on relevant dimensions. Second was the concept of artificially illuminating the face to produce several linearly independent variants of a given person. This helped combat illumination variance and was necessary for a proper LDA implementation. All in all, this project was a tremendous learning experience which gave me a working knowledge of SVMs and Viola Jones object detection as well as forced me to implement, in VC++, many machine learning algorithms. I coded, using OpenCV, single- and multi-instance PCA, LDA, Fisherface reduction, and variable dimension kNN. In addition I wrote many computation geometry routines which performed tasks such as dynamic polgyon etching, artificial illumination generation, and eye-skew detection. Altogether the GUI application was 3908 lines of VC++!
* Although this was completed as a partner project, I designed and implemented the recognition engine myself.