31 votes

Technique sous-jacente du détecteur de visage d'Android

Je suis en train d'implémenter un tracker de visage sur Android, et en tant qu'étude documentaire, j'aimerais identifier la technique sous-jacente du FaceDetector d'Android.

Pour faire simple : je veux comprendre comment le android.media.FaceDetector Le classificateur fonctionne.

Une brève recherche sur Google n'a rien donné d'informatif, alors j'ai pensé jeter un coup d'œil au code.

En regardant le code source de Java, FaceDetector.java il n'y a pas grand-chose à apprendre : FaceDetector est simplement une classe qui reçoit les dimensions de l'image et le nombre de faces, puis renvoie un tableau de faces.

La source Android contient le code JNI de cette classe . J'ai suivi les appels de fonction, où, réduit à l'essentiel, j'ai appris :

  1. Le "FaceFinder" est créé dans FaceFinder.c:75
  2. Sur la ligne 90, bbs_MemSeg_alloc renvoie un btk_HFaceFinder (qui contient la fonction permettant de trouver les faces), en lui copiant essentiellement l'objet hsdkA->contextE.memTblE.espArrE du tableau original btk_HSDK objet initialisé dans initialize() ( FaceDetector_jni.cpp:145 ) par btk_SDK_create()
  3. Il apparaît qu'un dédale de fonctions se fournissent mutuellement des pointeurs et des instances de btk_HSDK mais je ne trouve nulle part une instanciation concrète de sdk->contextE.memTblE.espArrE[0] qui est censé contenir la magie.

Ce que je ont découvert, est un petit indice : le code JNI fait référence à une bibliothèque FFTEm dont je ne trouve pas le code source. En apparence, cependant, FFT est Transformée de Fourier rapide qui est probablement utilisé avec un réseau neuronal pré-entraîné. La seule littérature que j'ai pu trouver qui va dans le sens de cette théorie est la suivante un article de Ben-Yacoub et al.

Je ne sais même pas vraiment si je suis sur la bonne voie, alors toute suggestion serait sans aucun doute utile.

Edit : J'ai ajouté une prime de 100 $ pour quiconque peut donner un aperçu.

0 votes

LibFFTEm n'est pas référencé dans la couche de détection des visages d'Android, il s'agit en fait de la sortie compilée de toutes les sources dans external/neven.

0 votes

Cela explique pourquoi je ne pouvais pas trouver le code source ! Merci ; cela suggère que s'il utilise effectivement les Transformations de Fourier Rapides, il devrait y avoir des traces de cela dans le code source. neven . Cependant, rien ne me saute vraiment aux yeux.

2 votes

On dirait que le "Em" dans libFFTEm peut faire référence à l'"expectation-maximisation", une méthode statistique utilisée dans la détection de la peau basée sur la couleur.

4voto

0 votes

Merci pour votre réponse, et ce sont des projets intéressants en effet, mais je cherche un aperçu de la façon dont Android intégré le détecteur de visage fonctionne ( android.media.FaceDetector ).

3voto

Stobor Points 15428

Je suis sur un téléphone, je ne peux donc pas répondre de manière exhaustive, mais les mots-clés Google "neven vision algorithm" font apparaître quelques articles utiles...

Aussi, Brevet américain 6222939 est lié.

Peut-être aussi certains des liens sur http://peterwilliams97.blogspot.com/2008/09/google-picasa-to-have-face-recognition.html pourrait être utile...

0 votes

Il semble que Google ait acquis Neven Vision, une technique de reconnaissance d'objets basée sur divers brevets déposés par Hartmut Neven. Je n'ai pas trouvé de description détaillée de l'algorithme, mais le suivi du brevet donne un petit aperçu.

0 votes

Le site divers brevets répertoriés sur ce site donner un aperçu de la technique. Cela semble suggérer qu'elle s'appuie fortement sur Ondelettes de Gabor .

0voto

Lars Points 570

Jetez un coup d'œil à ceci : http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=1562271

Je pense avoir vu une fois un code Matlab faisant cela dans une présentation. Il est peut-être quelque part en ligne.

Salutations, Lars

0 votes

J'ai cherché ce lien ici : Peut-être que c'est le code. Je ne sais pas, je n'ai pas matlab ou scilab ici pour l'essayer. Peut-être que vous l'avez : download.cnet.com/Face-Recognition-in-Fourier-Space/

0 votes

J'ai bien peur de ne pas trouver de preuve que c'est la technique sur laquelle Neven Vision est basée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X