Страницы

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

четверг, 5 декабря 2019 г.

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

#java #cpp #opencv #распознавание_образов #javacv


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

Добавление изображения для обучения:


считать изображения для обучения в градациях серого 
определить позицию лица и сделать новое изображение на основе этой позиции
для алгоритов кроме LBPH привести изображения к одному размеру (я так и не смог определить,
какой лучше всего размер использовать, наугад тыкал разные)
Histogram Equalization
добавить в вектор который потом пойдет в обучение


Добавление изображения для распознавания:


Определить все лица на изображении в градации серого и для каждого выполнить
сделать новое изображение на основе позиции
для алгоритов кроме LBPH привести изображения к одному размеру
Histogram Equalization
отправить на распознавание


Буду рад принять любые советы и ответить на Ваши вопросы, спасибо за помощь!
    


Ответы

Ответ 1



В рамках учебного процесса выполнял ваши задачи(как раз эти три алгоритма), вот github Если вкратце, брал изображение с камеры и определял, кто этот человек из локальной базы данных(набор изображений). Там есть форма, в которой можете покрутить параметры по всем трем алгоритмам Но github не позволил загрузить библиотеки emgu с проектом, т.к. они слишком много весят, вам придется добавить их вручную Если нужно будет, я могу их загрузить отдельно через другой ресурс

Ответ 2



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

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

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