我正在 Android 上实现人脸跟踪器,作为文献研究,我想确定 Android 的 FaceDetector 的底层技术。
简单地说:我想了解android.media.FaceDetector
分类器是如何工作的。
一个简短的谷歌搜索没有产生任何信息,所以我想我会看看代码。
通过查看 Java 源代码,FaceDetector.java
没有什么要学习的:FaceDetector
只是一个提供图像尺寸和人脸数量的类,然后返回一个人脸数组。
Android 源代码包含此类的 JNI 代码。我跟踪了函数调用,在那里,我学到了最基本的东西:
- “FaceFinder”创建于
FaceFinder.c:75
- 在第 90 行,
bbs_MemSeg_alloc
返回一个btk_HFaceFinder
对象(其中包含实际查找人脸的函数),本质上是将它复制到在 initialize() ( ) 中通过以下方式初始化hsdkA->contextE.memTblE.espArrE
的原始对象的数组btk_HSDK
FaceDetector_jni.cpp:145
btk_SDK_create()
- 似乎错综复杂的函数相互提供了 的指针和实例
btk_HSDK
,但我在任何地方都找不到sdk->contextE.memTblE.espArrE[0]
所谓的包含魔法的具体实例。
我发现的是一个小线索:JNI 代码引用了一个我找不到源代码的 FFTEm 库。然而,从表面上看,FFT 是快速傅里叶变换,它可能与预训练的神经网络一起使用。我能找到的唯一符合这一理论的文献是 Ben-Yacoub 等人的论文。
我什至不知道我是否走在正确的道路上,所以任何建议无疑都会有所帮助。
编辑:我为任何可以提供任何见解的人添加了 +100 赏金。