Реализации обнаружения / распознавания лиц C ++

Я бы подумал, что Google может ответить на этот вопрос, но мне не очень повезло.

Кто-нибудь знает какие-либо реализации на C ++ с открытым исходным кодом каких-либо алгоритмов обнаружения лиц, кроме метода Виолы-Джонса (усиленные каскады функций, подобных Хаару)?

Кроме того, существует ли где-нибудь реализация Fisherfaces на C ++ с открытым исходным кодом?

Спасибо.


person theotherphil    schedule 27.09.2011    source источник


Ответы (1)


Этот пост привлекает внимание, поэтому я хотел бы его обновить. Я предоставил библиотеку распознавания лиц, которую я написал для OpenCV, которая включает гистограммы Eigenfaces, Fisherfaces и Local Binary Patterns на момент написания этой статьи. Итак, OpenCV 2.4.2 теперь поставляется со всем, чтобы начать работу, см. Очень подробную документацию:

Теперь первоначальный ответ.

Я являюсь автором статьи, указанной в сообщении Кевина. Обратите внимание, что вам нужно найти собственные значения несимметричной матрицы S_ {W} ^ {- 1} S_ {B} для Fisherfaces, я явно не упоминал об этом в своем блоге. В текущей версии OpenCV есть решатель для симметричных матриц; поскольку собственные значения и сингулярные значения не эквивалентны для несимметричных матриц, вы также не можете использовать SVD. Для своего проекта я адаптировал решатель JAMA к C ++ для решения проблемы собственных значений для несимметричных матриц, поэтому нет необходимости использовать для этого внешнюю библиотеку. CMakeLists.txt настроен, поэтому можно использовать Eigen, так что у вас есть выбор.

Наконец-то я нашел несколько минут для реализации метода Fisherfaces с помощью OpenCV2 C ++ API и подтолкнул код в мою учетную запись github по адресу:

main.cpp показывает, как использовать класс Fisherfaces и как использовать линейный дискриминантный анализ с тем же примером, что и на : http://www.bytefish.de/wiki/pca_lda_with_gnu_octave. Он поставляется как проект CMake, поэтому для компиляции достаточно ввести:

philipp@mango:~/some/dir$ mkdir build; cd build
philipp@mango:~/some/dir/build$ cmake ..
philipp@mango:~/some/dir/build$ make
philipp@mango:~/some/dir/build$ ./lda

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

Обратите внимание на две вещи. (1) Я читаю изображения из файла CSV (точно так же, как этот), вам не нужно заботиться о порядке меток. (2) Я храню собственные векторы по столбцам, а PCA в OpenCV хранит их по строкам. Это просто вопрос личного вкуса, но я никогда не видел этого ни для одного другого решателя, поэтому решил хранить их по столбцам.

person bytefish    schedule 23.10.2011
comment
Я очень поздно ответил на это, но большое спасибо. Это очень полезно. - person theotherphil; 25.11.2011
comment
Без проблем. Вам нужен какой-нибудь код на распознавание лиц? У меня есть код Python и C ++, которым я мог бы поделиться. - person bytefish; 25.11.2011
comment
Что вы реализовали? В настоящее время я использую только каскадную функцию Хаара в OpenCV. Если у вас есть код, использующий другой метод, было бы неплохо его попробовать. - person theotherphil; 25.11.2011
comment
Да, обнаружение основано на каскадах. Только что увидел выше, вы его не ищете. Могу опубликовать снова, когда использую другие методы. - person bytefish; 25.11.2011