2010-11-13 2 views
3

Я пытаюсь закодировать программу распознавания лиц в Python (я собираюсь применить алгоритм k-nn для классификации).Создание набора данных из изображения с Python для распознавания лиц

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

Таким образом я получил набор данных, как следующий (последний столбец - это метка класса, и я только показал первые 7 функций набора данных вместо 16384).

176, 176, 175, 175, 177, 173, 178, 1 
162, 161, 167, 162, 167, 166, 166, 2 

Но когда я применяю к-нн к этому набору данных, я получаю неудобные результаты. Нужно ли применять дополнительные процессы к этому набору данных, а не просто преобразовывать изображение в пиксельное представление?

Спасибо.

+1

Можете ли вы описать * неудобный результат * немного более подробно? Кроме того, сколько у вас изображений? –

ответ

0

Как вы печатаете это? Вы пытались использовать функцию reshape? Он преобразует 2D-изображения в одномерные изображения с/без нескольких каналов.

Кроме того, пиксели изображения не являются features. У вас может быть много разных объектов за лицом - занавески, книги, другие лица и т. Д. Такие вещи, как граница лица, расстояние между глазами и т. Д., Более инвазивны к таким вещам.

+0

Почему отрицательный голос? –

1

Если вы хотите, чтобы он хорошо работал, да, вам нужно сделать преобразование объектов.

PCA или LDA хорошо работают. PCA возьмет коллекцию входных векторов (в данном случае, ваших векторизованных изображений) и найдет Eigenfaces, которые охватывают множество входов. Затем во время тестирования вы проецируете свой вектор ввода (т. Е. Изображение) на этот набор Eigenfaces и используете результирующий вектор координат в качестве вашего вектор-функции. Для получения дополнительной информации см. [Turk and Pentland, 1991].

Мои личные эксперименты с использованием этого базового метода PCA на PIE database были успешными.

1

Возможно, вам понадобятся глаза, кончик носа и рот.

Возможно, вам также понадобится более сложный метод представления изображений. Например, направление градиента и самоценового изображения было бы хорошей отправной точкой.

1

Как правило, трубопровод распознавания лиц нуждается в нескольких этапах, чтобы быть эффективными. Некоторая степень геометрической нормировки имеет решающее значение для точности. Вам нужно либо вручную наметить фидуциальные точки, либо получить преобразование для каждого изображения, либо автоматически определить точки доступа, для которых есть детекторы точек с открытым исходным кодом. Попробуйте функцию getAffineTransform opencv. Кроме того, несоответствия освещения могут вызвать огромные проблемы. Вы можете попробовать осветить методы нормализации (например, самоцентрируемое изображение), так как они хорошо работают для рассеянного отражения и теней (не столько зеркальное отражение). Для уменьшения размерности, начинаются основные анализы компонентов (PCA) или линейный дискриминантный анализ (LDA). Тем не менее, вместо того, чтобы сырые пиксельные функции, вы можете рассмотреть более значимые функции, такие как LBP, HOG или SIFT. Кроме того, вы сможете достичь более высокой точности, чем KNN, с более сложными (хотя и более сложными) классификаторами, такими как SVM.

Смежные вопросы