The bin Laden Face Locator

 

Final Design Document

 

Developed by fred_the_token

Section 1 – High-Level Description of Software


This is a complete facial recognition system that is expandable through using different filters. These filters consist of a combination of an input filter (which selects the input, whether it be a video or a picture), an output filter (which outputs the results to the screen), and the intermediate filters which can consist of a flesh-tone locator, a neural-network eye locator, a statistical eye locator, a neural-network face locator, a fast-face locator which uses comparisons of areas, and a eigenfaces face recognizer. The GUI is designed so that other filters can be added at will, so as to enable the use of custom filters. Currently, it is designed to work in the *nix world, with possible extensions into the Windows world. The source code will be Open Source so as to enable better experimentation in the academic world.

We also have a face database trainer that makes a face database to be checked against in the facial recognition filter.

Section 2 – System Components


Our program was written in both c and c++, with the c coming from code that we found on the web and c++ from code that we wrote ourselves. (For references, see the end of this file) It is designed to run in the *nix world, with Makefile options that enable the use or not of the GUI. Currently it runs best in the Linux world, with the majority of the testing done with Red Hat Linux 8.0. To run the GUI, one needs to have the Image Magik to open the images, and the GTK to run the GUI. They are both available for download from the web, however, Red Hat 8.0 comes with it pre-installed. In order to compile the Makefile, one needs gcc as well as make, again, Red Hat comes with it. There are no other special requirements for compiling and installing.

To use, simply download the tar file, un-tar it, switch to the “face_rec” directory, then type “make”. Once compiled, type in “bin/face_rec”, and the program will start. To create a face database, type in “bin/FaceDB”. You will have to use that face database in the face recognizer filter. You will also have to indicate which neural network to use in the face locator filter, as well as the source file for the image or video.

Section 3 – System Capabilities


At the base level, our GUI can take any major image type (those handled by Image Magik such as .gif or .jpg), and depending on the filters chosen, scan it for flesh-tones, locate faces, locate eyes, recognize faces, and display the output. Also possible is the scanning of videos in the mpg format. A separate program can create face databases from which a person can be recognized.

Section 4 – Coolness Factor


The coolest thing about our system is the fact that we can put in different filters. If you want to create your own filter, such as a specialized hand-locator, or a gesture recognizer, it will be easy to implement and input it into the GUI. Also, if you want to integrate it into some other program, such as an identifier or verifier, it’s easy to do with the no-GUI option in the Makefile. If you have a new recognizer that you think will be more accurate, you can implement it into the program easily, as well as a new locator. You can also pipe things together to get more accurate and faster results. We haven’t seen any other programs out there that allow such flexibility in choosing and adapting your own filters, so it’ll be a great contribution to research.

One of the cool things is that if you type in "face locator modular" into google, we're the first page that shows up.
http://www.google.com/search?hl=en&lr=&ie=UTF-8&oe=UTF-8&q=face+locator+modular

Section 5 – Individual Contributions


  1. Overall GUI – Rob
  2. Makefile – Bobby
  3. Face locators (Neural Networks and fast face locator)- Bobby
  4. Flesh-tone locator – Justin
  5. Stat-eye locator –Justin
  6. Face recognizer – Bobby
  7. Documentation (Web page, Final Design Docs, ReadMe) – Justin, Bobby
Time Spent: Bobby – 1/3, Rob – 1/3, Justin – 1/3

Section 6 – Accomplishments


We’re happy with the final design in the fact that we were able to complete the basic and desired features. We’re really happy that we were able to do this despite having never taken any machine learning classes – this was all new stuff to all of us. It did open up a cool new world in the machine learning and pattern recognition that will help us later on in our future jobs and research opportunities.

While we didn’t get everything that we wanted accomplished, like porting it to Windows or get it really optimized for speed or accuracy, we did the basics completed and are satisfied with the results.

Section 7 – Lessons Learned: Working as a team


One of the things that we learned is that it helps a lot having someone there to help catalyze the learning and coding process. While it does take two people, Pair Programming helps clarify ideas and understanding in the group. It takes time and understanding to be able to integrate work done by two different people, therefore if both are present the whole time it really speeds things up.

However, it did really help to split up the project so that each one can be focused on by each person, thus speeding up the project that way.

Section 8 – Lessons Learned: Building a large software system


At the start of the semester we were all gung ho about using CVS, our source code protector. However, as time went on it became inconvenient to use it as we went to our different sides in the programming – Bobby focused on the locator, Rob on the GUI, and Justin on the recognizer. We failed to update our source code with each other and as a consequence the reintegration went much harder than it could have been.

However, it wasn’t too hard, and we were able to complete it. I believe that good planning from the start on the overall system really helped out on that.

Section 9 – Lessons Learned: Time Machine


We would have chosen a different face recognizer to base our filter off of rather than the CSU one we used – they had a version that was optimized for their purposes and not really useful for us. We could have used the OpenCV examples had we known about it from the start of the semester.

Also, it would have been helpful to have a web cam that works in Linux from the start.

Appendix


Project Home Page:
http://www.cs.utah.edu/~elliss/final

Project README:
http://www.cs.utah.edu/~elliss/final/README.html

Face locator was written by Bobby using the Annie Neural Network Library
http://annie.sourceforge.net/

A good algorithm for the difference in pixels code came from:
http://gscrlig1.eng.ohio-state.edu/flxu/publications/papers/pedestrian_iv2002.pdf

Face recognizer inspired by CSU’s eigenfaces.
http://www.cs.colostate.edu/evalfacerec/

Face recognition home page
http://www.cs.rug.nl/~peterkr/FACE/face.html

Face detection home page
http://home.t-online.de/home/Robert.Frischholz/face.htm