Обнаружение лиц с помощью OpenCV для не фронтальных изображений

Я пытаюсь использовать opencv для обнаружения лиц. Лица не анфас, камера снимает лица сбоку, поэтому виден только один глаз и часть рта. Я попробовал HaarDetectObjects с несколькими конфигурациями, но безрезультатно. Я изменил каскад и протестировал: haarcascade_frontalface_default.xml, haarcascade_frontalface_alt.xml, haarcascade_profileface.xml с очень плохими результатами. Есть ли другие лучшие каскады? Есть ли другие предложения?

Спасибо


person Hani    schedule 10.01.2012    source источник


Ответы (3)


Теперь у вас есть в OpenCV новый каскад LBP для профильных лиц, созданный Вадимом Писаревским:

https://github.com/Itseez/opencv/blob/master/data/lbpcascades/lbpcascade_profileface.xml

По-видимому, он обнаруживает только лица правильного профиля, поэтому для обнаружения всех лиц профиля необходимо выполнить второй шаг с перевернутым изображением.

person Jose Gómez    schedule 20.02.2013
comment
Это отлично работает для полнопрофильных лиц. Однако не всегда хорошо работает для лиц с частичным профилем. Есть ли на данный момент лучшая версия каскада профилей? - person Mona Jalal; 10.08.2016
comment
Не то, чтобы я знал, но вы всегда можете обучить свой собственный набор лиц, используя базу данных лиц профиля (вы должны быть в состоянии найти некоторые базы данных лиц вокруг). Если вы это сделаете, отправьте сгенерированный каскад в OpenCV, чтобы он был доступен сообществу. - person Jose Gómez; 10.08.2016
comment
Это интересно. Спасибо за документирование этого ограничения и процедуры, позволяющей заставить его работать со всеми гранями профиля. - person Jose Gómez; 25.05.2017

Каскадные файлы, на которые вы ссылаетесь (например, aarcascade_frontalface_default.xml, haarcascade_frontalface_alt.xml, haarcascade_profileface.xml), создаются с использованием полных лицевых поверхностей для обнаружения полных лицевых поверхностей. Таким образом, половина лица, очевидно, не будет правильно распознана компьютером как правильная форма.

В этой ситуации вам может понадобиться научить OpenCV распознавать интересующий вас объект, который в данном случае является «половиной лица». На жаргоне OpenCV это называется - 'HaarTraining'. Используйте это, эту и эту статью в качестве отправной точки для начала обучения.

После того, как вы обучили OpenCV, используя свои данные (например, множество разных изображений половины лица), у вас будет готовый каскадный XML-файл, который вы можете подключить к своему собственному коду для обнаружения половины лица.

Удачи!

person gsbabil    schedule 10.01.2012
comment
Haarcascade_profileface.xml для профилей лиц (не фронтально, а сбоку) - person saurabheights; 28.01.2016
comment
Кстати, попробовал профиль Haarcascade face xml, но оказалось, что он не очень точен. - person saurabheights; 17.03.2016
comment
@gsbabil, вторая ссылка не работает, и этот учебник довольно высокого уровня и написан человеком, для которого английский язык не является родным, что затрудняет его понимание. - person mLstudent33; 06.07.2019

Я имел дело с той же проблемой обнаружения лица для нефронтальных изображений. Попробуйте использовать Multi Task CNN. Это лучшее решение для распознавания лиц и выравнивания. Он способен решать такие задачи, как различные позы, освещение, окклюзия.

Документ доступен по Ссылка. Код доступен на GitHub по Ссылка. Я использовал реализацию Python, и результаты были выдающимися. Хотя код немного медленный, если на изображении много лиц.

Хотя, если вы хотите придерживаться OpenCV, в OpenCV добавлена ​​новая модель глубокого обучения для распознавания лиц. Результаты не так хороши, как Multi Task CNN. Существует реализация модели глубокого обучения OpenCV для обнаружения лиц по адресу pyimagesearch Ссылка

person archit522    schedule 14.06.2018
comment
вы использовали версию Matlab, на которую вы ссылались, или настоятельно рекомендуемую версию C ++ и Caffe? - person mLstudent33; 06.07.2019
comment
на самом деле я не уверен, как получить бесплатную версию Matlab после пробной версии. - person mLstudent33; 06.07.2019
comment
Нет, я не использовал версии Matlab или C++. Университеты обычно предоставляют студентам бесплатный Matlab, или вы можете попробовать GNU Octave. - person archit522; 08.07.2019
comment
The results are not as good as Multi Task CNN Я тестирую как распознавание лиц mtcnn, так и распознавание лиц с помощью глубокого обучения, и для меня оба выглядят идеально. Как вы думаете, почему MTCNN намного лучше, чем глубокое обучение распознаванию лиц opencv? - person S Andrew; 10.05.2020