Страницы

Поиск по вопросам

понедельник, 8 октября 2018 г.

Настройка распознавания лиц в OpenCV

У меня есть набор изображений для обучения: для двух персон по 10 изображений и 80 изображений различных персон для проверки достоверности распознавания. Имеется 3 контрольных изображения, по 1 с каждой персоной и одна общая с десяткой персон (в которую входят первые две и несколько из 80). На всех изображениях персоны расположены фронтально. Хотелось бы в результате распознавания на всех 3 контрольных изображениях опознать две персоны, для которых производилось обучение с помощью 10 изображений. Проблема заключается в том, что все 3 алгоритма (LBPH, Fisherfaces, Eigenfaces) не справились с этой задачой (на одном или двух изображениях помечают персону другой, причем для которой было всего 1 обучающее изображение), очевидно, у меня где-то ошибка в последовательности обучения или распознавания, или я чего-то не учел.
Добавление изображения для обучения:
считать изображения для обучения в градациях серого определить позицию лица и сделать новое изображение на основе этой позиции для алгоритов кроме LBPH привести изображения к одному размеру (я так и не смог определить, какой лучше всего размер использовать, наугад тыкал разные) Histogram Equalization добавить в вектор который потом пойдет в обучение
Добавление изображения для распознавания:
Определить все лица на изображении в градации серого и для каждого выполнить сделать новое изображение на основе позиции для алгоритов кроме LBPH привести изображения к одному размеру Histogram Equalization отправить на распознавание
Буду рад принять любые советы и ответить на Ваши вопросы, спасибо за помощь!


Ответ

Процесс распознавания лица можно разбить на 3 стадии:
выделение области с лицом нормализация изображения сравнение и анализ
OpenCV предоставляет утилиты для 1 и 3 стадии, а вот 2 стадию (самую сложную) возлагает ответственность на пользователя. Алгоритмы LBPH, Fisherfaces, Eigenfaces достигают 90% точности распознавания на специально подготовленных изображениях (нормализованных). Если взять подборку AT&T, то можно заметить, что у них все изображения: имеют одинаковый размер (ширина и высота), все приведены к градации серого с нормализацией, однотонный фон, лица отцентрированы и произведено выравнивание на основе опорных точек и произведены другие методы нормализации. Пример выполнения процесса нормализации. Разбор и анализ алгоритмов распознавания, используемых в OpenCV. AT&T Facedatabase
Таким образом, проблема низкой точности распознавания в моем случае заключалась в том, что изображения имели низкий уровень нормализации. Для повышения уровня точности нужно либо добавлять различные алгоритмы для нормализации изображений, либо использовать для распознавания более современные алгоритмы, основанные на нейронных сетях и машинном обучении
После нормализации на основе алгоритма из статьи существенно увеличилась точность определения (я добавил поворот и масштабирование изображения на основе положения глаз).

Комментариев нет:

Отправить комментарий