私は Android にフェイス トラッカーを実装しており、文献調査として、Android の FaceDetector の基礎となる技術を特定したいと考えています。
android.media.FaceDetector
簡単に言えば、分類器がどのように機能するかを理解したいのです。
Google で簡単に検索しても有益な情報は得られなかったので、コードを調べてみようと思いました。
Java ソース コード を見ると、FaceDetector.java
学ぶべきことはあまりありません。FaceDetector
は、画像のサイズと顔の数を指定して、顔の配列を返す単純なクラスです。
Android ソースには、このクラスの JNI コードが含まれています。私は関数呼び出しをたどりました。ここで、最低限の本質に還元されて、次のことを学びました。
- 「FaceFinder」は
FaceFinder.c:75
- 90 行目で、オブジェクト (実際に顔を検出する関数を含む) を
bbs_MemSeg_alloc
返します。これは、基本的に、 initialize() ( ) によって初期化された元のオブジェクトの配列をコピーします。btk_HFaceFinder
hsdkA->contextE.memTblE.espArrE
btk_HSDK
FaceDetector_jni.cpp:145
btk_SDK_create()
- 関数の迷路が のポインターとインスタンスを相互に提供しているように見えますが、魔法が含まれていると思われる
btk_HSDK
の具体的なインスタンス化はどこにも見つかりません。sdk->contextE.memTblE.espArrE[0]
私が発見したのは、ちょっとした手がかりです。JNI コードは、ソース コードが見つからない FFTEm ライブラリを参照しています。ただし、一見すると、FFT はFast Fourier Transformであり、事前にトレーニングされたニューラル ネットワークと一緒に使用される可能性があります。この理論と一致する唯一の文献は、Ben-Yacoub らによる論文です。
私が正しい道を歩んでいるかどうかさえ本当にわからないので、どんな提案でも間違いなく役に立ちます。
編集:洞察を与えることができる人には、+100 の報奨金を追加しました。