#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. Таким образом, проблема низкой точности распознавания в моем случае заключалась в том, что изображения имели низкий уровень нормализации. Для повышения уровня точности нужно либо добавлять различные алгоритмы для нормализации изображений, либо использовать для распознавания более современные алгоритмы, основанные на нейронных сетях и машинном обучении После нормализации на основе алгоритма из статьи существенно увеличилась точность определения (я добавил поворот и масштабирование изображения на основе положения глаз).
Комментариев нет:
Отправить комментарий