Android - обнаружение функции лица
В настоящее время я работаю над приложением для телефонов Android. Мы хотим обнаружить особенности лица. Программа должна быть способна обнаруживать положения глаз, носа, рта и края лица.
Точность должна быть хорошей, но не должна быть идеальной. Это нормально потерять некоторую точность, чтобы ускорить процесс. Все лица будут фронтальными, и мы будем знать приблизительные позиции функций раньше. Нам не нужно живое обнаружение. Функции должны быть извлечены из сохраненных изображений. Время обнаружения должно быть только до тех пор, пока оно не нарушит работу пользователя. Так что, может быть, даже 2 или 3 секунды в порядке.
С этими предположениями не должно быть слишком сложно найти библиотеку, которая позволит нам достичь этого. Но мой вопрос: какой лучший подход? Какое ваше предложение? Это первый раз для меня для Android, и я не хочу работать в неправильном направлении. Это хорошая идея для нас в библиотеке или лучше (быстрая/более высокая точность) реализовать собственный алгоритм?
Я много гулял, и я нашел много интересного. В Android API также обнаружено лицо. Но возвращаемый класс лица (http://developer.android.com/reference/android/media/FaceDetector.Face.html) содержит только положение глаз. Это меньше для нашего применения. Тогда есть также OpenCV для Android или JavaCV. С чем вы считаете хорошей идеей? Для какой библиотеки есть хорошая документация, учебники?
Ответы
Ответ 1
OpenCV имеет учебник для этой цели, к сожалению, это С++, поэтому вам придется преобразовать его в Android.
Вы также можете попробовать FaceDetection API в Android, это простой пример, если вы обнаруживаете изображения с изображений с возможностью рисования или с SD-карты. Или более поздний Camera.Face API, который работает с изображением камеры.
Если вы хотите, чтобы изображение с вашей камеры находилось в динамическом режиме, чем сначала прочитайте Как сделать снимок с камеры., но я бы рекомендовал вам проверить официальные образцы OpenCV Android и использовать их.
Обновлено:
Безумный Шляпный пример Используйте подход камеры с SurfaceView. Это многообещающе быстро. Посмотрите Mad Hatter.
Соответствующий код, в случае, если ссылка идет вниз, заключается в следующем:
public class FaceDetectionListener implements Camera.FaceDetectionListener {
@Override
public final void onFaceDetection(Face[] faces, Camera camera) {
if (faces.length > 0) {
for (Face face : faces) {
if (face != null) {
// do something
}
}
}
}
}
Ответ 2
Я работаю над подобным проектом. Я провел некоторое тестирование с помощью API FaceDetection и могу сказать, что он не поможет вам, если вы хотите обнаружить глаза, нос, рот и края. Этот API позволяет вам обнаруживать глаза. Это бесполезно, если вы хотите реализовать распознавание лиц, потому что вам нужно больше возможностей, чем просто глаза во время обнаружения лица.
Комментарий к вашему первому ответу: вам действительно нужно распознать лицо. Поиск функций является частью обнаружения лиц, и получение этих функций - первый шаг в приложении распознавания лиц. С помощью OpenCV вы можете использовать Haar-подобные функции для получения этих функций (глаз, носа, рта и т.д.).
Однако я нашел несколько сложным использование функций openCV с отдельным файлом .cpp. Существует вещь JNIEXPORT, которая позволяет редактировать изображение галереи Android с функциями OpenCV внутри .cpp файла. OpenCV имеет образец Haar-подобной функции, обнаруживающий файл .cpp, который может использоваться для обнаружения лица (и распознавания как второго шага с другим алгоритмом).
Вы работаете в Windows или Linux? Я использую окна и не смог использовать учебник, связанный с настройкой OpenCV. Однако у меня есть рабочая среда OpenCV для окон в Eclipse и все образцы из OpenCV 2.3.1 работают. Может быть, мы можем помочь друг другу и поделиться информацией или результатами? сообщите мне.
Ответ 3
Я нашел хорошее решение для обнаружения эмоций лица, предоставляемого этим API Microsoft. Этот API возвращает диаграмму ответа JSON и эмоции. Вы можете попробовать этот API для хорошего результата.
Эмоциональный API
Распознавание эмоций Распознает эмоции, выраженные одним или несколькими людьми в изображении, а также возвращает ограничивающий прямоугольник для лицо. Обнаруженные эмоции - это счастье, печаль, удивление, гнев, страха, презрения, отвращения или нейтралитета.
- Поддерживаемые форматы входных изображений включают JPEG, PNG, GIF (первый кадр), BMP. Размер файла изображения не должен превышать 4 МБ.
- Если пользователь уже назвал Face API, они могут представить прямоугольники лица в качестве дополнительного ввода. В противном случае, Emotion API сначала вычислить прямоугольники.
- Диапазон определяемого размера лица составляет от 36x36 до 4096x4096 пикселей. Лица из этого диапазона не будут обнаружены.
- Для каждого изображения максимальное количество обнаруженных лиц равно 64, а лица оцениваются по размеру прямоугольника лица в порядке убывания. Если нет лицо обнаружено, будет возвращен пустой массив.
- Некоторые лица не могут быть обнаружены из-за технических проблем, например. очень большие углы лица (поза головы), большая окклюзия. Фронтальные и Наилучшие результаты имеют почти лобные поверхности. -Прекращение эмоций и отвращение экспериментальное.
https://www.microsoft.com/cognitive-services/en-us/emotion-api
Ответ 4
это хороший запрос. Я предполагаю, что если вы получите точки функции для глаз, тогда мы можем рассчитать другие точки, также зная приблизительное расстояние других точек от глаз.
Смотрите эту статью, чтобы узнать больше о том, что я пытаюсь сказать: http://klucv2.googlecode.com/svn/trunk/docs/detection%20of%20facial%20feature%20points%20using%20anthropometric%20face%20model.pdf
Надеюсь, это поможет.
Ответ 5
Взгляните на новый интерфейс Face Face, который включает в себя обнаружение лица. Здесь есть учебник:
https://developers.google.com/vision/detect-faces-tutorial