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

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

Спасибо

Ответ 1

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

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

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

Ответ 2

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

В этой ситуации вам может понадобиться тренировать OpenCV, чтобы распознать ваш объект интереса, который в этом случае является "половиной лица". В жаргоне OpenCV он известен как " HaarTraining '. Используйте this, this и эта статья в качестве отправной точки для начала обучения.

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

Удачи!