- use SQLite instead XMLs
- different way of merging multiple faces together. Currently, in the interests of saving space, as new faces are added to a particular person, rather than keeping them all separate they are merged together using eigen projections.It is good bcause it does save space, loading time and memory in general it tends to lose precision. So a differentmethod of merging would great addition, or perhaps an altogether different approach.
- New algorithm for face recognition. Currently Eigenfaces is the working algorithm, however it is coloury and rotation variant. This obviously has an adverse effect on quality of recognition. Fisherfacesis much more tollerant to rotation and colour changes. Hidden Markov Model based approach is another possible way of doing it. There used to be good helper function in OpenCV, however they reside in legacy headers and sadly a lot of documentation has been lost so revere engineering will be required from source. Ultimately an entirely new approach would be equally interesting to consider e.g. recognition based neural maps(network). Ideally the projectis not to invent a new method, but rather implement already existing one from the literature.
- Sub-categorising unknown faces into similar groups. So when one is tagged all others in the same group are also tagged.
- Face recognition in the videos: add tags based on people scanned from the videos in the library.
- ... (waiting for the end of the exam session)
Where should I start?
You might be asking yourself what should I do next? Where should I begin? The ideal student would be the one that knows what they are trying to do and don't need to have their "hand held" at every step of the way. Asking question is great and we will try to be as helpful as we can be. There are some simple things you can do:
- Open Google Scholar and search for "face recognition" this will give you some general papers and more specific implementations of face recognition. You should have access to the papers, if not let me know and I will try to get the paper you want.
- An embedded HMM-based approach for face detection and recognition is a good paper to read for example of Hidden Markov Model based recognition. If you think you can implement it that would be a good idea. OpenCV has some functions to help with that. There are also elastic graph based approaches.
- Choose one method that you think is most appropriate, having 1 or 2 reasons for choosing it would be good.
- Get the HEAD copies of digikam (git) and libface (svn), libface is much smaller and probably the easiest thing to start playing around with. Try things, see what works what doesn't. Don't be afraid to break some code, you can always go back and checkout the HEAD once again.
- Ask if you are really stuck and have no idea on where to go.
Eigenface Improvement in Libface:
It was planned that, the eigenface improvement will be done using different distance measures instead of Euclidean distance. But, the problem is in libface, opencv function is currently being used for eigenface calculation. So, the distance measure is also in the opencv code. Improvement this way necessitates the change in opencv code which is impossible or create a new eigenface calculation code of our own which seems distracting from the main purpose of the project.
I will try some other improvements later.
Fisherface Implementation Completion :
PGM image type support for testing :
The support has already been given in the code and also been committed to the svn head. Currently, PGM support of Qt is being used. We may also have used PGM type support from opencv in our code. This seems unnecessary at this point. If in later stage, we think of giving the support for digikam we can use the opencv or even better make a pgm support for KDE itself.