2013-03-20 3 views
9

В настоящее время я работаю над распознаванием лиц в Android. Я провел разумное время в Интернете, и я нашел класс FaceDetector.Face в Android. И эти утилиты этого класса:Распознавание лиц с использованием 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) 

Проблема заключается в том, я не знаю, как использовать эти методы, и я не могу найти учебник или пример исходного кода для этого. Вопрос в том, должен ли я использовать eyeDistance() для разграничения людей? Например, глаза Сары = 6,51 см, а у Джона = 6,82. Когда код вычисляет расстояние между глазами человека и когда он равен 6,82, разве это говорит вам, что «это джон» - это способ идентифицировать людей? Или какой алгоритм для этого? Или я должен использовать константы EULER? В каком смысле? Я думаю, что буду использовать эти методы для распознавания лиц, но я не знаю, как их использовать.

Или вы можете предложить другое решение для распознавания лиц? Любая помощь будет оценена по достоинству.

+2

Может ли нижестоящий оставить отзыв, пожалуйста? Чтобы я мог улучшить вопрос. – Ayse

ответ

17

FaceDetector класс не делает, что вы думаете. В частности, не выполняет распознавание лица, а вместо этого обнаружение лица (отсюда и название класса).

An example of Facial Detection

Он анализирует изображение и возвращает Face сек, найденные в изображении. Он не делает различия между Face (вы не можете сказать, является ли это Face или Sarah's Face), кроме расстояния между их глазами - но это не действительно действительная точка сравнения. Он просто дает вам найденный Faces и уровень достоверности, который обнаружены на самом деле, 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

Спасибо за ваш ответ. Я думал, что, может быть, есть формула, в которой мы используем EULER или eyeDistance, чтобы идентифицировать человека. Есть ли какое-либо решение, которое вы можете мне предложить для решения проблемы? – Ayse

+0

@aysealmac Я не думаю, что вы можете однозначно идентифицировать лица, используя только позу и расстояние между глазами, но я не специалист в области науки между распознаванием лица. – Tushar

+0

У Тушара есть демо? –

7

Как сказал Tushar, то FaceDetector только распознает лица. Вы не можете распознать их, используя FaceDetector. Выход на расстояние глаз измеряется в пикселях, а не в см или дюймах. Он показывает, насколько велика лицо внутри растрового изображения. Предполагается, что углы эйлеров представляют собой 3D-поворот головы. Однако, если ваше приложение использует любое api до 14, значения углов эйлеров всегда будут равны 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

Добро пожаловать в Stack Overflow и спасибо за ваш ответ. Пожалуйста, не отправляйте ответ, который состоит по существу из ссылки. (Http://stackoverflow.com/questions/how-to-answer). Включите важные моменты в свой ответ; оставьте ссылку для дополнительной информации или в качестве ссылки. –