2013-03-20 125 views
9

我目前在android中進行人臉識別。我在互聯網上度過了合理的時間,並且在Android中找到了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釐米,約翰的= 6.82。當代碼計算一個人的眼睛距離,當它是6.82時,它是否告訴你「這是約翰」這是識別人的方式?或者那是什麼算法?或者我應該使用EULER常量?以什麼方式?我想我會用這些方法進行人臉識別,但我不知道如何使用它。

或者你能否提出另一種面部識別解決方案? 任何幫助,將不勝感激。

+2

請問downvoter有沒有反饋?這樣我可以改善這個問題。 – Ayse 2013-03-30 13:55:59

回答

17

FaceDetector類不會做你認爲它的作用。具體來說,它不做面部識別,而是面部檢測(因此類名)。

An example of Facial Detection

它分析的圖像,並返回圖像中找到Face秒。除了眼睛之間的距離之外,它不會區分Face s(你不能區分是John的Face還是Sarah的Face) - 但這並不是真正有效的比較點。它只是給你發現的面孔和發現的對象的置信度實際上是Face s。

例:

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 2013-03-21 08:38:43

+0

@aysealmac我不認爲你可以使用眼睛之間的姿勢和距離來唯一地識別臉部,但我不是面部識別之間的科學專家。 – Tushar 2013-03-21 08:43:52

+0

Tushar你有這個演示嗎? – 2013-11-22 07:53:59

7

正如圖莎爾所說,FaceDetector僅檢測的面孔。雖然你不能使用FaceDetector識別它們。眼距輸出以像素爲單位進行測量,而不是以釐米或英寸爲單位。它代表了位圖圖像中面部有多大。歐拉角度應該表示頭部的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 2013-05-08 10:48:52