Создание набора данных из образа с помощью Python для распознавания лиц

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

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

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

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

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

Благодарю.

4 Solutions collect form web for “Создание набора данных из образа с помощью Python для распознавания лиц”

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

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

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

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

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

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

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

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

  • DrawContours () не работает opencv python
  • Ошибка OpenCV3: «Невозможно остановить поток: несоответствующий ioctl для устройства»
  • Аномалия с установкой эллипса при использовании cv2.ellipse с различными параметрами?
  • Удостоверение классификаторов в детекторе лица opencv
  • Отслеживание двух разных цветов с использованием OpenCV 2.3 и Python
  • Python: Сегментация изображений как предварительный процесс для классификации
  • Два отдельных процесса, совместно использующих один канал Camera OpenCv
  • opencv 3 ошибка обнаружения функции python на функции cv2.detectAndCompute, а также на cv2.compute
  • Автозаполнение OpenCV-Python в Windows не работает
  • как извлечь границы изображения (изображение сканирования OCT / сетчатки)
  • Объединение двух изображений с OpenCV
  • Python - лучший язык программирования в мире.