Estoy implementando un rastreador de rostros en Android, y como estudio de literatura, me gustaría identificar la técnica subyacente de FaceDetector de Android.Técnica subyacente de FaceDetector de Android
En pocas palabras: quiero entender cómo funciona el clasificador android.media.FaceDetector
.
Una breve búsqueda en Google no dio ningún resultado informativo, así que pensé en echarle un vistazo al código.
Al observar el código fuente de Java, FaceDetector.java
, no hay mucho que aprender: FaceDetector
es simplemente una clase que proporciona las dimensiones de la imagen y el número de caras, y luego devuelve una matriz de caras.
La fuente de Android contains the JNI code for this class. He seguido a través de las llamadas de función, donde, reducido a lo esencial, supe:
- El "FaceFinder" se crea en
FaceFinder.c:75
- En la línea 90
bbs_MemSeg_alloc
, devuelve un objetobtk_HFaceFinder
(que contiene la función de encontrar realmente caras), esencialmente copiándolo la matrizhsdkA->contextE.memTblE.espArrE
delbtk_HSDK
objeto original inicializado dentro initialize() (FaceDetector_jni.cpp:145
) porbtk_SDK_create()
- parece ser que un laberinto de funciones mutuamente con los punteros y los casos de
btk_HSDK
, pero en ninguna parte puedo yo encontrar un concr e instanciación desdk->contextE.memTblE.espArrE[0]
que supuestamente contiene la magia.
Lo que tengo descubierto, es una pequeña pista: el código JNI hace referencia a una biblioteca FFTEm que no puedo encontrar el código fuente para. Por lo que parece, sin embargo, FFT es Transformada rápida de Fourier, que probablemente se usa junto con una red neuronal preentrenada. La única literatura que puedo encontrar que se alinea con esta teoría es a paper by Ben-Yacoub et al.
Ni siquiera sé realmente si estoy en el camino correcto, por lo que cualquier sugerencia sería indudablemente de ayuda.
Edit: He añadido un bounty de +100 para cualquiera que pueda darnos alguna idea.
libFFTEm no se hace referencia a partir de la capa de detección de caras de Android, en realidad es la salida compilada de todas las fuentes en externa/Neven – ognian
Eso explica por qué no pude encontrar el código fuente! Gracias; esto sugiere que si de hecho usa transformadas rápidas de Fourier, debería haber alguna evidencia de ello en 'neven'. Sin embargo, nada realmente salta a mí. –
Parece que el "Em" en 'libFFTEm' puede referirse a" expectativa-maximización ", un método estadístico utilizado en la detección de piel basada en color. – Justin