Я использую Face Tracker на Android, и, как исследование литературы, хотел бы определить базовую технику Android FaceDetector.
Проще говоря: я хочу понять, как работает классификатор android.media.FaceDetector
.
Краткий поиск в Google не дал ничего информативного, поэтому я подумал, что посмотрю на код.
Изучая исходный код Java, FaceDetector.java
, не так много узнать: FaceDetector
- это просто класс который предоставляет размеры изображения и количество граней, а затем возвращает массив граней.
В Android-источнике содержится код JNI для этого класса. Я следил за вызовами функций, где, сведенный к основным аспектам, я узнал:
- "FaceFinder" создан в
FaceFinder.c:75
- В строке 90
bbs_MemSeg_alloc
возвращается объектbtk_HFaceFinder
(который содержит функцию для фактического поиска лиц), по существу копируя его массивhsdkA->contextE.memTblE.espArrE
исходного объектаbtk_HSDK
, инициализированного в initialize() (FaceDetector_jni.cpp:145
)btk_SDK_create()
- Кажется, что лабиринт функций обеспечивает друг друга указателями и экземплярами
btk_HSDK
, но нигде я не могу найти конкретное созданиеsdk->contextE.memTblE.espArrE[0]
, которое якобы содержит магию.
Что я обнаружил, это немного подсказка: код JNI ссылается на библиотеку FFTEm, для которой я не могу найти исходный код. Однако, по его мнению, FFT - это быстрое преобразование Фурье, которое, вероятно, используется вместе с предварительно обученной нейронной сетью. Единственная литература, которую я могу найти, которая согласуется с этой теорией, - это статья Бен-Якуба и др.
Я даже не знаю, настроен ли я на правильном пути, поэтому любые предложения, несомненно, помогут.
Изменить: Я добавил +100 баунти для тех, кто может дать любую информацию.