2013-03-20 26 views
9

私は現在アンドロイドで顔認識を行っています。私はインターネット上で妥当な時間を過ごし、アンドロイドでFaceDetector.Faceクラスを見つけました。そして、これらは、このクラスのユーティリティです:android sdkを使用した顔認識opencv

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()を使うべきかどうかです。たとえば、サラの目の距離は6.51 cm、ジョンの値は6.82です。コードが人の目の距離を計算し、それが6.82であるとき、それは "それはジョンです"と言うのでしょうか?これは人を識別するための方法ですか?または、そのアルゴリズムは何ですか?または、EULER定数を使用する必要がありますか?どのように?私はこれらの方法を顔認識に使うつもりだと思っていますが、使用方法はわかりません。

顔認識のための別の解決策を提案できますか? ご協力いただければ幸いです。

+2

フィードバックを残すことはできますか?私は質問を改善することができるように。 – Ayse

答えて

17

FaceDetectorクラスは、あなたが思うとはしません。具体的には、は顔認識を行わず、顔検出(したがってクラス名)です。

An example of Facial Detection

これは画像を解析して画像中に見出さFace Sを返します。彼らの目の間の距離以外にFace(JohnのFaceかSarahのFaceかどうかはわかりませんが、それは本当に有効な比較ポイントではありません)。見つかったFacesと、見つかったオブジェクトが実際にFaceであるという確信度を与えるだけです。

例:

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 
} 
+0

ご返信ありがとうございます。人を特定するためにEULERやeyeDistanceを使用する式があるかもしれないと思っていましたが、問題について私に提案できる解決策はありますか? – Ayse

+0

@aysealmac私はあなたが姿勢と目の間の距離だけを使って顔を一意に識別できるとは思わないが、私は顔認識の間の科学の専門家でもない。 – Tushar

+0

Tusharあなたはこれのデモを持っていますか? –

7

Tusharが言ったように、FaceDetectorのみ顔を検出します。あなたはFaceDetectorを使用してそれらを認識することはできません。眼の距離出力は、cmまたはインチではなく、ピクセル単位で測定されます。これは、顔がビットマップ画像の内側にどれくらい大きいかを表します。オイラー角は、頭部の3D回転を表すものとする。しかし、あなたのアプリが14より前にapiを使用すると、オイラーの角度値は常に0.0になります(計算されません)。だから、これで気をつけてください。

顔認識を行いたい場合は、opencvを使用できます。私は自分で使ったことはありませんが、Androidで利用できると思います。 Face Recognition in OpenCV http://docs.opencv.org/trunk/modules/contrib/doc/facerec/

あなたが望んでいないか、プロジェクトにOpenCVのを追加することができない場合は、自分で顔認識をプログラムすることができます。それは時間がかかりますが、それほど難しくありません。固有モードのいくつかのバリエーションを実装することができます:http://www.youtube.com/watch?v=LYgBqJorF44&list=PLd3hlSJsX_Imk_BPmB_H3AQjFKZS9XgZm&index=16

幸運を祈る!

+0

お返事ありがとう – Ayse

1

このリンクを使用して、あなたに役立つかもしれません。 http://www.edumobile.org/android/android-programming-tutorials/face-detection-example-tutorials-in-android/

+0

ようこそスタックオーバーフローとあなたの答えに感謝します。 [基本的にリンクからなる回答を投稿しない](http://stackoverflow.com/questions/how-to-answer)。あなたの答えに重要な点を含めてください。追加情報や参考資料としてリンクを張ってください。 –