Надежное распознавание лиц на C / C++?
Я ищу надежный алгоритм/библиотеку обнаружения лица, желательно на C (C++ тоже в порядке; другие языки я могу портировать, если это необходимо). Я использовал OpenCVв прошлом, но я не думаю, что она инвариантна к вращению. Не обязательно быть в режиме реального времени, но и не должно быть ужасно медленным (возможно, одна или две секунды на фотографию в порядке). Ищу высокую надежность, и не много ложных срабатываний. Кто-нибудь знает о каких-либо хороших реализациях?
6 ответов
проверьте эту страницу OpenCV Wiki об обнаружении лица с помощью Хаар-подобные функции.
@floppydisk: тот же парень написал другой проект реализация этих Haar-подобных функций для обнаружения лица.
концепция не трудно понять, и вы могли бы даже реализовать его самостоятельно. Возможно, самой сложной частью является построение каскада ускоренных классификаторов (но openCV имеет все это легко реализовано!)
некоторые другие методы, которые могут быть использованы при распознавании лиц, которые могут быть инвариантны к аффинным преобразованиям относятся:
- Eigenfaces С SVD / PCA
- Фурье-дескрипторов
- статистические формы модели (этой статье в частности)
вы можете попробовать взглянуть на эту библиотеку:
http://vasc.ri.cmu.edu/NNFaceDetector/
Это показывает в одном из тестовых случаев лица, которые вращаются. Как вы можете видеть, это была диссертация, так что вы также можете прочитать эту статью, если хотите.
Mark - вы говорите, что OpenCV не может быть инвариантным к вращению
Что помешало бы вам сделать четыре сравнения, вращая 90° после каждого сравнения?
над проектом кода, кто-то опубликовал подробное описание проекта для распознавания лиц, а также некоторый исходный код C++ для проекта и ссылки на библиотеки, которые он использовал. Его алгоритм фокусируется на использовании цветовых различий, чтобы найти пятна кожи, а затем проверить, соответствуют ли изображения 19x19 пикселей лицам. Я не знаком со всеми библиотеками для распознавания лиц, но читаю некоторые из его кода, многие методы и функции имеют CV в названии, поэтому он возможно, вы используете библиотеку OpenCV, но я не знаком с ней, поэтому я не уверен на 100%. Однако он дает много объяснений о своем приложении и исходных файлах, поэтому это может быть хорошей отправной точкой.
единственное, с чем я работал, это Visionics FaceIt. Он работал довольно хорошо, но последнее, что я знал, было очень, очень, очень далеко от Свободы (как в пиве, так и в речи).
Я не использовал функции Haar для обнаружения лица, но из того, что я помню, это может быть более эффективным при обнаружении лица, чем собственные лица/pca.
Я столкнулся с проблемой о проблемах вращения с лицом. Я думаю, может быть, вы могли бы попробовать соответствие формы и попытаться исправить объект. Попробуйте сориентировать его на нормальное соотношение сторон головы. Я никогда не заходил так далеко в своем проекте с собственным лицом, но дайте мне знать, как это работает. Это должно быть легко в MATLAB. : P