Android - распознавание лиц

В настоящее время я работаю над приложением для телефонов Android. Мы хотим распознавать черты лица. Программа должна уметь определять положение глаз, носа, рта и края лица.

Точность должна быть хорошей, но не обязательно идеальной. Чтобы ускорить процесс, можно потерять некоторую точность. Все лица будут фронтальными, и мы заранее узнаем их приблизительное положение. Нам не нужно живое обнаружение. Характеристики должны быть извлечены из сохраненных изображений. Время обнаружения должно быть таким, чтобы оно не мешало работе пользователя. Так что, может быть, даже 2 или 3 секунды подойдут.

При таких предположениях не должно быть слишком сложно найти библиотеку, которая позволит нам достичь этого. Но у меня вопрос: какой подход лучше? Что вы предлагаете? Я впервые разрабатываю для Android, и я не хочу идти в неправильном направлении. Это хорошая идея для нас - библиотека или лучше (быстрее / с большей точностью) реализовать какой-то существующий алгоритм самостоятельно?

Я много гуглил и нашел много интересного. Также в Android API есть функция распознавания лиц. Но возвращенный класс лица (http://developer.android.com/reference/android/media/FaceDetector.Face.html) содержит только положение глаз. Это меньше для нашего приложения. Также есть OpenCV для Android или JavaCV. Как вы думаете, с чем лучше всего работать? Для какой библиотеки есть хорошая документация, учебные пособия?


person tschoartschi    schedule 20.03.2012    source источник
comment
Пожалуйста, добились ли вы успеха в ваших исследованиях? Я пытаюсь сделать что-то подобное. Пожалуйста, дай мне знать!   -  person Lisa Anne    schedule 05.02.2013


Ответы (5)


OpenCV имеет учебник для этой цели, к сожалению, C ++ только для того, чтобы вам пришлось преобразовать его в Android.

Вы также можете попробовать FaceDetection API в Android, это простой пример если вы обнаруживаете изображения из изображений с возможностью рисования или SDCard. Или более поздний Camera.Face API, который работает с камерой. изображение.

Если вы хотите получать изображение с камеры в динамическое время, сначала прочтите Как сделать снимок с камеры., но я бы порекомендовал вам проверить официальные образцы OpenCV для Android и использовать их.

Обновлено:

Пример Безумного Шляпника использует подход камеры с SurfaceView. Это многообещающе быстро. Взгляните на Безумный Шляпник.

Соответствующий код, если ссылка не работает, выглядит следующим образом:

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
                }
            }
        }
    }
}
person Tofeeq Ahmad    schedule 20.03.2012
comment
Спасибо за быстрый ответ. На самом деле мне не нужно распознавание лиц. Изображения, которые я буду обрабатывать, содержат только лица. Самая важная часть - найти особенности. Где глаза, нос, рот и где край лица (где начинается фон, где начинаются волосы). Мне просто нужно применить это к сохраненным изображениям, а не в реальном времени на камере. Вы знаете хорошее введение в это? Может быть, OpenCV или альтернативный алгоритм? - person tschoartschi; 20.03.2012
comment
FaceDetection API обнаруживает лицо на основе Distance bw eyes и других функций. Так что попробуйте исследовать. Если не повезло, переходите на OpenCV. - person Tofeeq Ahmad; 20.03.2012
comment
Я видел это в документации. Но я подумал, действительно ли легче выделить другие черты, если я знаю положение глаз. Android 4 дает вам также координаты для мотылька. Так что я искал что-то подобное - person tschoartschi; 20.03.2012
comment
Извините за разделение на 2 комментария, но я не могу нажать кнопку редактирования на моем смартфоне :-D Потому что я думаю, что обнаруживать особенности в изображениях нетривиально. Во время изучения этой темы я слышу некоторые теоретические вещи, но я никогда не применяю это в реальном мире. Боюсь, что я пытаюсь изобрести колесо, если буду реализовывать все самостоятельно. И я уверен, что это моя собственная версия. не будет идеальным из-за нехватки времени и недостатка знаний - person tschoartschi; 20.03.2012
comment
Да, самостоятельная работа займет много времени. Попробуйте использовать какой-нибудь API - person Tofeeq Ahmad; 20.03.2012
comment
Спасибо за ваш ответ ;-) Я более подробно рассмотрю Android API и OpenCV. Может быть, я попробую это учебник по настройке OpenCV, я дам вам знать, как это сработало ;-) - person tschoartschi; 20.03.2012
comment
Я очень хочу знать, насколько вы можете настроить эту вещь ... Желаю вам удачи - person Tofeeq Ahmad; 20.03.2012

Я работаю над подобным проектом. Я провел некоторое тестирование с FaceDetection API и могу сказать, что он не поможет вам, если вы хотите обнаруживать глаза, нос, рот и края. Этот API позволяет обнаруживать только глаза. Это бесполезно, если вы хотите реализовать распознавание лиц, потому что вам нужно больше функций, чем просто глаза во время части обнаружения лица.

Комментарий к вашему первому ответу: вам действительно нужно распознавать лица. Поиск функций - это часть распознавания лиц, и получение этих функций - первый шаг в приложении для распознавания лиц. С OpenCV вы можете использовать функции Хаара для получения этих функций (глаза, нос, рот и т. Д.).

Однако мне показалось несколько сложным использовать функции openCV с отдельным файлом .cpp. Существует функция JNIEXPORT, которая позволяет редактировать изображение галереи Android с помощью функций OpenCV внутри файла .cpp. OpenCV имеет образец файла .cpp для обнаружения Хаара, который можно использовать для обнаружения лиц (и распознавания в качестве второго шага с другим алгоритмом).

Вы разрабатываете на Windows или Linux? Я использую окна, и мне не удалось использовать учебник, который вы связали, чтобы настроить OpenCV с ним. Однако у меня есть рабочая среда Windows OpenCV в Eclipse, и все образцы из OpenCV 2.3.1 работают. Может быть, мы сможем помочь друг другу и поделиться какой-то информацией / результатами? пожалуйста, дайте мне знать.

person pimmes111    schedule 21.03.2012
comment
Для FaceDetection API он, кажется, определяет только середину глаз и расстояние между ними, но можно ли добраться до отдельных глаз? Или возможно узнать, что лицо наклонено? - person Lim Thye Chean; 26.07.2014

Я нашел хорошее решение для обнаружения эмоций на лице, предоставляемое этим Microsoft API. Этот API возвращает ответ в формате JSON и график эмоций. Вы можете попробовать этот API для получения хорошего результата.

Emotion API

Распознавание эмоций. Распознает эмоции, выраженные одним или несколькими людьми на изображении, а также возвращает ограничивающую рамку для лица. Обнаруженные эмоции - это счастье, печаль, удивление, гнев, страх, презрение и отвращение или нейтральность.

  • Поддерживаемые форматы входных изображений включают JPEG, PNG, GIF (первый кадр), BMP. Размер файла изображения не должен превышать 4 МБ.
  • Если пользователь уже вызвал Face API, он может отправить прямоугольники лица в качестве необязательного ввода. В противном случае Emotion API сначала вычислит прямоугольники.
  • Обнаруживаемый размер лица составляет от 36x36 до 4096x4096 пикселей. Лица вне этого диапазона не будут обнаружены.
  • Для каждого изображения максимальное количество обнаруженных лиц составляет 64, и лица ранжируются по размеру прямоугольника лица в порядке убывания. Если лицо не обнаружено, будет возвращен пустой массив.
  • Некоторые лица могут быть не обнаружены из-за технических проблем, например очень большие углы лица (поза головы), большой прикус. Наилучшие результаты имеют фронтальное и прифронтовое лицо. -Эмоции презрения и отвращения носят экспериментальный характер.

https://www.microsoft.com/cognitive-services/en-us/emotion-api

person Rohit Rathore    schedule 27.04.2016

это хороший вопрос. Я думаю, если вы получите характерные точки для глаз, тогда мы сможем вычислить другие точки, зная предполагаемое расстояние от других точек до глаз.

См. Этот документ, чтобы узнать больше о том, что я пытаюсь сказать: http://klucv2.googlecode.com/svn/trunk/docs/detection%20of%20facial%20feature%20points%20using%20anthropometric%20face%20model.pdf

Надеюсь, это поможет.

person shalki    schedule 29.04.2014

Взгляните на новый API-интерфейс Android Face, который включает обнаружение лицевых ориентиров. Здесь есть учебник:

https://developers.google.com/vision/detect-faces-tutorial

person pm0733464    schedule 20.08.2015