Я внедряю трекер лица на 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, для которой я не могу найти исходный код. Однако, судя по всему, БПФ представляет собой быстрое преобразование Фурье , которое, вероятно, используется вместе с предварительно обученной нейронной сетью. Единственная литература, которую я могу найти, которая согласуется с этой теорией - это статья Бен-Якуба и др.
Я даже не знаю, нахожусь ли я на правильном пути, поэтому любые предложения, несомненно, помогут.
Редактировать: Я добавил +100 к награде за каждого, кто может дать любую информацию.