2013-03-20 4 views
9

Ich arbeite derzeit auf Gesichtserkennung in Android. Ich verbrachte eine angemessene Zeit im Internet und ich fand FaceDetector.Face-Klasse in Android. Und das sind die Utilities dieser Klasse:Gesichtserkennung mit Android SDK nicht 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) 

Das Problem ist, ich weiß nicht, wie diese Methoden verwenden und ich kann keinen Tutorial oder Beispiel-Quellcode für diese finden. Die Frage ist, ob ich eyesDistance() benutzen sollte, um die Leute zu unterscheiden? Zum Beispiel ist Sarahs Augenabstand = 6,51 cm und Johns ist = 6,82. Wenn der Code die Augenlänge einer Person berechnet und wenn es 6,82 ist, sagt es dann, dass es "John" ist, ist dies der Weg, um die Leute zu identifizieren? Oder was ist der Algorithmus dafür? Oder sollte ich EULER-Konstanten verwenden? Inwiefern? Ich denke, ich werde diese Methoden für die Gesichtserkennung verwenden, aber ich weiß nicht, wie man es benutzt.

Oder können Sie eine andere Lösung für die Gesichtserkennung vorschlagen? Jede Hilfe wäre willkommen.

+2

Kann der downvoter bitte eine Rückmeldung hinterlassen? Damit ich die Frage verbessern kann. – Ayse

Antwort

17

Die FaceDetector Klasse tut nicht, was Sie denken, dass es tut. Spezifisch, es tut nicht Gesichtserkennung, sondern stattdessen Gesichtserkennung (daher der Klassenname).

An example of Facial Detection

Es analysiert ein Bild und gibt Face s im Bild gefunden. Es macht keinen Unterschied zwischen Face s (Sie können nicht sagen, ob es John Face oder Sarah Face ist), außer der Abstand zwischen ihren Augen - aber das ist nicht wirklich ein gültiger Vergleichspunkt. Es gibt Ihnen nur die gefundenen Gesichter und das Konfidenzniveau, dass die gefundenen Objekte tatsächlich Face s sind.

Ex:

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

Danke für Ihre Antwort. Ich dachte, dass es vielleicht eine Formel gibt, in der wir EULER oder eyeDistance verwenden, um eine Person zu identifizieren. Gibt es eine Lösung, die Sie mir für das Problem vorschlagen können? – Ayse

+0

@aysealmac Ich glaube nicht, dass man Gesichter anhand der Pose und der Entfernung zwischen den Augen eindeutig identifizieren kann, aber ich bin auch kein Experte in der Wissenschaft zwischen Gesichtserkennung. – Tushar

+0

Tushar hast du eine Demo davon? –

7

Tushar Wie gesagt, der FaceDetector erkennt nur die Gesichter. Sie können sie jedoch nicht mit dem FaceDetector erkennen. Die Augenabstandausgabe wird in Pixeln gemessen, nicht in cm oder Zoll. Es gibt an, wie groß das Gesicht im Bitmap-Bild ist. Die Euler-Winkel sollen die 3D-Rotation des Kopfes darstellen. Wenn Ihre App jedoch eine api vor 14 verwendet, sind die Winkelwerte von euler immer 0,0 (sie werden nicht berechnet). Also, pass gut damit auf.

Wenn Sie die Gesichtserkennung durchführen möchten, können Sie opencv verwenden. Ich habe es selbst nicht benutzt, aber ich denke es ist auf Android verfügbar. Face Recognition in OpenCV http://docs.opencv.org/trunk/modules/contrib/doc/facerec/

Wenn Sie nicht wollen oder können nicht OpenCV zu Ihrem Projekt hinzufügen, können Sie die Gesichtserkennung programmieren selbst. Es braucht etwas Zeit, aber es ist nicht so schwer. Sie können eine Variation von Eigenflächen implementieren: http://www.youtube.com/watch?v=LYgBqJorF44&list=PLd3hlSJsX_Imk_BPmB_H3AQjFKZS9XgZm&index=16

Viel Glück!

+0

Danke für die Antwort – Ayse

1
+0

Willkommen bei Stack Overflow und danke für Ihre Antwort. Bitte [schreibe keine Antwort, die im Wesentlichen aus einem Link besteht] (http://stackoverflow.com/questions/how-to-answer). Fügen Sie die wichtigen Punkte in Ihre Antwort ein; verlassen Sie den Link für zusätzliche Informationen oder als Referenz. –