9

私は現在、アンドロイドの顔認識に取り組んでいます。インターネットでかなりの時間を費やし、Android で FaceDetector.Face クラスを見つけました。そして、これらはこのクラスのユーティリティです:

 Constants
 float  CONFIDENCE_THRESHOLD
 int    EULER_X The x-axis Euler angle of a face.
 int    EULER_Y The y-axis Euler angle of a face.
 int    EULER_Z The z-axis Euler angle of a face.

 Public Methods
 float   confidence()
 float   eyesDistance()
 void    getMidPoint(PointF point)
 float   pose(int euler)

問題は、これらのメソッドの使用方法がわからず、チュートリアルやサンプル ソース コードが見つからないことです。問題は、人々を区別するために eyesDistance() を使用する必要があるかどうかです。たとえば、Sarah の eyesDistance は = 6.51 cm、John の is= 6.82 です。コードが人の目の距離を計算し、それが 6.82 の場合、「ジョンです」と言うのは、これが人を識別するための方法ですか? または、そのためのアルゴリズムは何ですか?または、EULER 定数を使用する必要がありますか? どのように?これらの方法を顔認証に使おうと思っているのですが、使い方がわかりません。

または、顔認識の別のソリューションを提案できますか? どんな助けでも大歓迎です。

4

2 に答える 2

17

クラスはあなたFaceDetectorが思っていることをしません。具体的には、顔認識ではなく顔検出を行います(クラス名はそのためです)。

顔検出の例

画像を分析し、画像でFace見つかった を返します。目の間の距離を除いて、 sを区別しFaceません (ジョンのFaceものかサラのものかはわかりません) - しかし、それは実際には有効な比較ポイントではありません。Face見つかった顔と、見つかったオブジェクトが実際にFaces であるという信頼レベルを提供するだけです。

元:

int maxNumFaces = 2; // Set this to whatever you want
FaceDetector fd = new FaceDetector(imageWidth,imageHeight,maxNumFaces);
Faces[] faces = new Faces[maxNumFaces];

try {
  int numFacesFound = fd.findFaces(image, faces);

  for (int i = 0; i < maxNumFaces; ++i) {
     Face face = faces[i];
     Log.d("Face " + i + " found with " + face.confidence() + " confidence!");
     Log.d("Face " + i + " eye distance " + face.eyesDistance());
     Log.d("Face " + i + " pose " + face.pose());
     Log.d("Face " + i + " midpoint (between eyes) " + face.getMidPoint());
  }
} catch (IllegalArgumentException e) {
  // From Docs:
  // if the Bitmap dimensions don't match the dimensions defined at initialization 
  // or the given array is not sized equal to the maxFaces value defined at 
  // initialization
}
于 2013-03-21T08:28:33.833 に答える