2013-03-20 51 views
9

Tôi hiện đang làm việc trên nhận dạng khuôn mặt trong Android. Tôi đã dành thời gian hợp lý trên internet và tôi tìm thấy lớp FaceDetector.Face trong Android. Và đây là những tiện ích của lớp này:Nhận dạng khuôn mặt bằng cách sử dụng android sdk not 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) 

Vấn đề là, tôi không biết cách sử dụng các phương pháp này và tôi không thể tìm thấy bất kỳ hướng dẫn hoặc mã nguồn ví dụ nào cho điều này. Câu hỏi đặt ra là, tôi có nên sử dụng eyesDistance() để phân biệt người khác không? Ví dụ, mắt của SarahDistance là = 6,51 cm và của John là = 6,82. Khi mã tính toán một khoảng cách người mắt và khi nó là 6.82, là nó cho bạn biết rằng "nó là john" là cách này để nhận dạng người dân? Hoặc thuật toán cho điều đó là gì? Hoặc tôi nên sử dụng hằng số EULER? Bằng cách nào? Tôi nghĩ rằng tôi sẽ sử dụng những phương pháp này để nhận diện khuôn mặt, nhưng tôi không biết cách sử dụng nó.

Hoặc bạn có thể đề xuất giải pháp khác để nhận diện khuôn mặt không? Mọi trợ giúp sẽ được đánh giá cao.

+2

Trình gỡ xuống có thể để lại phản hồi không? Để tôi có thể cải thiện câu hỏi. – Ayse

Trả lời

17

Lớp FaceDetector không làm những gì bạn nghĩ. Cụ thể, nó không thực hiện Nhận diện khuôn mặt, nhưng thay vào đó là Nhận diện khuôn mặt (do đó tên lớp).

An example of Facial Detection

Nó phân tích hình ảnh và trả Face s tìm thấy trong các hình ảnh. Nó không phân biệt giữa Face s (bạn không thể biết đó là của John Face hoặc của Sarah Face) khác với khoảng cách giữa đôi mắt của họ - nhưng đó không thực sự là một điểm so sánh hợp lệ. Nó chỉ cung cấp cho bạn các khuôn mặt được tìm thấy và mức độ tin cậy mà các đối tượng tìm thấy thực sự là Face s.

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

Cảm ơn bạn đã trả lời. Tôi nghĩ rằng có thể có một công thức mà chúng tôi sử dụng EULER hoặc eyeDistance để xác định một người .. Có giải pháp nào mà bạn có thể đề xuất cho tôi về vấn đề này không? – Ayse

+0

@aysealmac Tôi không nghĩ rằng bạn có thể xác định duy nhất khuôn mặt chỉ bằng cách sử dụng tư thế và khoảng cách giữa hai mắt, nhưng tôi không phải là chuyên gia về khoa học giữa nhận diện khuôn mặt. – Tushar

+0

Tushar bạn có bản demo này không? –

7

Như Tushar nói, FaceDetector chỉ phát hiện khuôn mặt. Bạn không thể nhận ra chúng bằng cách sử dụng FaceDetector mặc dù. Sản lượng khoảng cách mắt được đo bằng pixel, không tính bằng cm hoặc inch. Nó đại diện cho khuôn mặt lớn như thế nào bên trong hình ảnh bitmap. Góc euler được cho là đại diện cho vòng quay 3D của đầu. Tuy nhiên, nếu ứng dụng của bạn sử dụng bất kỳ api nào trước 14, giá trị góc của thước đo sẽ luôn là 0,0 (chúng không được tính toán). Vì vậy, hãy cẩn thận với điều này.

Nếu bạn muốn nhận dạng khuôn mặt, bạn có thể sử dụng opencv. Tôi đã không sử dụng nó bản thân mình, nhưng tôi nghĩ rằng nó có sẵn trên Android. Face Recognition in OpenCV http://docs.opencv.org/trunk/modules/contrib/doc/facerec/

Nếu bạn không muốn hoặc không thể thêm OpenCV để dự án của bạn, bạn có thể chương trình nhận dạng khuôn mặt của chính mình. Phải mất một thời gian, nhưng nó không quá khó. Bạn có thể triển khai một số biến thể của các eigenfaces: http://www.youtube.com/watch?v=LYgBqJorF44&list=PLd3hlSJsX_Imk_BPmB_H3AQjFKZS9XgZm&index=16

Chúc may mắn!

+0

Cảm ơn bạn đã trả lời – Ayse

1
+0

Chào mừng bạn đến với Stack Overflow và cảm ơn bạn đã trả lời. Vui lòng [không đăng câu trả lời bao gồm về một liên kết] (http://stackoverflow.com/questions/how-to-answer). Bao gồm các điểm quan trọng trong câu trả lời của bạn; để lại liên kết để biết thêm thông tin hoặc làm tài liệu tham khảo. –

Các vấn đề liên quan