【发布时间】:2011-03-22 04:30:57
【问题描述】:
我正在 Android 上实现人脸跟踪器,作为文献研究,我想确定 Android 的 FaceDetector 的底层技术。
简单地说:我想了解android.media.FaceDetector 分类器的工作原理。
简单的 Google 搜索没有提供任何信息,所以我想我应该看看代码。
通过查看 Java 源代码 FaceDetector.java,没有太多要学习的东西:FaceDetector 只是一个提供图像尺寸和人脸数量的类,然后返回一个人脸数组。
Android 源码contains the JNI code for this class。我跟踪了函数调用,在那里,我学到了最基本的东西:
- “FaceFinder”在
FaceFinder.c:75中创建 - 在第 90 行,
bbs_MemSeg_alloc返回一个btk_HFaceFinder对象(其中包含实际查找人脸的函数),本质上是将其复制到在 initialize() 中初始化的原始btk_HSDK对象的hsdkA->contextE.memTblE.espArrE数组(@987654324 @) bybtk_SDK_create() - 似乎错综复杂的函数相互提供了
btk_HSDK的指针和实例,但我无法找到据称包含魔法的sdk->contextE.memTblE.espArrE[0]的具体实例。
我已经发现了一点线索:JNI 代码引用了一个我找不到源代码的 FFTEm 库。然而,从表面上看,FFT 是快速傅里叶变换,它可能与预训练的神经网络一起使用。我能找到的唯一符合这个理论的文献是a paper by Ben-Yacoub et al.
我什至不知道我是否走上了正确的道路,所以任何建议无疑都会有所帮助。
编辑:我已经为任何可以提供任何见解的人添加了 +100 赏金。
【问题讨论】:
-
libFFTEm 没有被Android的人脸检测层引用,实际上是external/neven中所有源的编译输出
-
这就解释了为什么我找不到源代码!谢谢;这表明如果它确实使用了快速傅立叶变换,那么在
neven中应该有一些证据。然而,我并没有真正跳出来。 -
看起来
libFFTEm中的“Em”可能指的是“期望最大化”,一种用于基于颜色的皮肤检测的统计方法。 -
有一个项目,从Android中提取了neven人脸检测库:https://github.com/lqs/neven。
标签: android java-native-interface fft face-detection