Создание набора данных из изображения с помощью Python для распознавания лиц - PullRequest
3 голосов
/ 13 ноября 2010

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

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

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

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

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

Спасибо.

Ответы [ 4 ]

1 голос
/ 08 августа 2013

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

1 голос
/ 14 ноября 2010

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

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

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

1 голос
/ 17 ноября 2010

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

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

0 голосов
/ 14 ноября 2010

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

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

...