views:

789

answers:

4

I'm implementing a face tracker on Android, and as a literature study, would like to identify the underlying technique of Android's FaceDetector.

A brief Google search didn't yield anything informative, so I thought I'd take a look at the code.

By looking at the Java source code, FaceDetector.java, there isn't much to be learned: FaceDetector is simply a class that is provided the image dimensions and number of faces, then returns an array of faces.

The Android source contains the JNI code for this class. I followed through the function calls, where, simply put, I learned:

  1. The "FaceFinder" is created in FaceFinder.c:75
  2. On line 90, bbs_MemSeg_alloc returns a btk_HFaceFinder object (which contains the function to actually find faces), essentially copying it the hsdkA->contextE.memTblE.espArrE array of the original btk_HSDK object initialized within initialize() (FaceDetector_jni.cpp:145) by btk_SDK_create()
  3. It appears that a maze of functions provide each other with pointers and instances of btk_HSDK, but nowhere can I find a concrete instantiation of sdk->contextE.memTblE.espArrE[0] that supposedly contains the magic.

What I have discovered, is a little clue: the JNI code references a FFTEm library that I can't find the source code for. By the looks of it, however, FFT is Fast Fourier Transform, which is probably used together with a pre-trained neural network. The only literature I can find that aligns with this theory is a paper by Ben-Yacoub et al.

I don't even really know if I'm set on the right path, so any suggestions at all would undoubtedly help.

Edit: I've added a +100 bounty for anybody who can give any insight.

+1  A: 

I Found a couple of links too...Not sure if it would help you...

http://code.google.com/p/android-playground-erdao/source/browse/#svn/trunk/SnapFace

http://code.google.com/p/jjil/

http://benosteen.wordpress.com/2010/03/03/face-recognition-much-easier-than-expected/

Rahul
Thank you for your response, and those are interesting projects indeed, but I'm looking for some insight into how Android's *built-in* face detector works (`android.media.FaceDetector`).
Paul Lammertsma
A: 

Hi,

have a look at this: http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=1562271

I think I once saw some matlab code doing this in a presentation. Maybe it's somewhere online.

Greetings, Lars

Lars
I googled this link here:Maybe it's the code. I don't know, I don't have matlab or scilab here to try it out. Maybe you have:http://download.cnet.com/Face-Recognition-in-Fourier-Space/3000-2053_4-10878312.html
Lars
A: 

Highly likely: it uses a pre-trained dataset that someone (e.g. google? ) meticulously compiled with positive and negative examples labelled by an army of persons outside the US. The code itself would just query the image with the training set. It will be surprising if uncovering 'the code' gives much insight, as the training data is what makes stuff like this work.

peter karasev
Most of the techniques, if not all, use a training set. I'm really looking for the core technique that finds and discriminates between features. This is relevant because it determines the size of the search space, the characteristics of the features and finally, the detection speed.
Paul Lammertsma
No, I'm saying its the training data set *itself*, not how you find or discriminate with it that's crucial. It doesn't matter if you have the code, you don't have 10,000 educated persons in the 3rd world to label examples for you.
peter karasev
e.g. if you did have access to such human resources, you can simply pick any cookie cutter classifier, run on the 'current data set', then have people go back and tag any testing data where detection was false positive or false negative. Then add similar labelled data to the set, and so on. You just need a lot of people who can focus and click accurately.
peter karasev
+2  A: 

I'm on a phone, so can't respond extensively, but Google keywords "neven vision algorithm" pull up some useful papers...

Also, US patent 6222939 is related.

Possibly also some of the links on http://peterwilliams97.blogspot.com/2008/09/google-picasa-to-have-face-recognition.html might be handy...

Stobor
It appears that Google acquired Neven Vision, an object recognition technique based upon various patents filed by Hartmut Neven. I've not found a detailed description of the algorithm, but following up on the patent gives a little insight.
Paul Lammertsma