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

Методы распознавания лиц: -

Существуют различные методы распознавания лиц, а именно:

1. На основе геометрических параметров / шаблонов: -

Алгоритмы распознавания лиц классифицируются как алгоритмы на основе геометрии или алгоритмы на основе шаблонов. Методы на основе шаблонов могут быть построены с использованием статистических инструментов, таких как SVM [машины опорных векторов], PCA [анализ основных компонентов], LDA [линейный дискриминантный анализ], методы ядра или преобразования трассировки. Методы, основанные на геометрических элементах, анализируют локальные черты лица и их геометрические отношения. Он также известен как метод, основанный на функциях.

2. Порционные / холистические: -

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

3. На основе внешнего вида / на основе модели: -

Метод на основе внешнего вида показывает лицо на нескольких изображениях. Изображение рассматривается как вектор большой размерности. Этот метод обычно используется для получения пространства признаков из разделения изображения. Образец изображения по сравнению с обучающим набором. С другой стороны, подход, основанный на модели, пытается смоделировать лицо. В новом образце реализована модель и параметры модели, используемые для распознавания изображения.

Метод, основанный на внешнем виде, можно разделить на линейный или нелинейный. Ex-PCA, LDA, IDA используются в прямом подходе, тогда как Kernel PCA используется в нелинейном подходе. С другой стороны, метод на основе модели может быть классифицирован как 2D или 3D Ex-Elastic Bunch Graph Matching.

4. На основе шаблонов / статистики / нейронных сетей: -

4.1. Соответствие шаблонов: -

При сопоставлении с шаблоном шаблоны представлены образцами, моделями, пикселями, текстурами и т. Д. Функция распознавания обычно является мерой корреляции или расстояния.

4.2. Статистический подход: -

В статистическом подходе закономерности выражаются в виде признаков. Функция распознавания в дискриминантной функции. Каждое изображение представлено относительно d функций. Поэтому цель состоит в том, чтобы выбрать и применить правильный статистический инструмент для извлечения и анализа.

Есть много статистических инструментов, которые используются для распознавания лиц. Эти аналитические инструменты используются в двух или более группах или методах классификации. Эти инструменты следующие:

4.2.1. Анализ основных компонентов [PCA]: -

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

4.2.2. Дискретное косинусное преобразование [DCT]: -

Он обозначает серию точек данных, касающихся суммы функций косинуса различных частот колебаний. Дискретное косинусное преобразование основано на дискретном преобразовании Фурье и, следовательно, путем сжатия вариантов его можно использовать для преобразования изображений и обеспечения эффективного уменьшения размерности.

4.2.3. Линейный дискриминантный анализ [LDA]: -

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

4.2.4. Прогнозы, сохраняющие местность [LPP]: -

Он и NIYOGI представили LPP. Это лучшая альтернатива PCA для сохранения структуры и проектирования местности. Алгоритмы распознавания образов обычно ищут ближайший образец или соседей. Таким образом, местность, поддерживающая качество ТОО, может ускорить узнаваемость.

4.2.5. Вейвлет Габора: -

В этом алгоритме это означает, что нейрофизиологические данные, полученные из зрительной коры головного мозга млекопитающих, предполагают, что простые клетки зрительной коры можно рассматривать как семейство самоподобных двумерных вейвлетов Габора. Функции Габора, предложенные Даугманом, представляют собой локальные пространственные полосовые фильтры, которые достигают теоретического предела для совместного разрешения информации в двумерной пространственной и двумерной областях Фурье.

4.2.6. Независимый анализ компонентов [ICA]: -

ICA стремится преобразовать данные в виде линейных комбинаций статистически независимых точек данных. Следовательно, его цель - предоставить независимое, а не некоррелированное представление изображения. ICA - это альтернатива PCA, которая дает более мощное представление данных. Это критерий дискриминантного анализа, который можно использовать для улучшения PCA.

4.2.7. ядро ​​PCA: -

Scholkopf et al. представил использование функций ядра для выполнения нелинейного PCA. Его основная методология заключается в применении нелинейного отображения к входным данным и последующем решении линейного PCA в результирующем подпространстве признаков.

4.3. Нейронные сети: -

Нейронная сеть продолжает использовать распознавание и классификацию образов. Кохонен был первым, кто показал, что нейронная сеть может использоваться для распознавания выровненных и нормализованных лиц. Существуют методы, которые выполняют извлечение признаков с помощью нейронных сетей. Существует множество методов, которые в сочетании с такими инструментами, как PCA или LCA, образуют гибридный классификатор для распознавания лиц. Это такие как нейронная сеть прямого распространения с дополнительным смещением, самоорганизующиеся карты с PCA и сверточные нейронные сети с многоуровневым восприятием и т. Д. Они могут повысить эффективность моделей.

4.3.1. Нейронные сети с фильтрами Габора: -

Алгоритм распознавания лиц достигается за счет реализации многослойного персептрона с алгоритмом обратного распространения. Во-первых, это этап предварительной обработки. Каждое изображение нормализовано по фазам контраста и освещенности. Затем каждое изображение обрабатывается через фильтр Габора. Фильтр Габора имеет пять параметров ориентации и три пространственные частоты, поэтому имеется 15 длин волн Габора.

4.3.2. Нейронные сети и скрытые марковские модели: -

Скрытые марковские модели - это статистический инструмент, используемый при распознавании лиц. Их использовали совместно с нейронными сетями. Он генерируется в нейронной сети, которая обучает псевдо 2D HMM. Входом этого 2D-процесса HMM является выход ИНС, и он обеспечивает алгоритму надлежащее снижение размерности.

4.3.3. Нечеткие нейронные сети: -

Нечеткие нейронные сети для распознавания лиц представили в 2009 году. В этой системе распознавания лиц используется многослойный перцептрон. Идея этого подхода состоит в том, чтобы захватить поверхности принятия решений в нелинейных многообразиях - задачу, которую простой MLP вряд ли может выполнить. Векторы признаков получены с использованием преобразований длины волны Габора.

Как работает распознавание лиц: -

Есть много способов распознавания лиц. Здесь мы используем OpenCV для распознавания лиц. При распознавании лиц изображение сначала готовилось к предварительной обработке, а затем распознаватель лиц обучал распознавать лица. После обучения распознавателя мы тестируем его, чтобы увидеть результаты. Распознаватели лиц OpenCV бывают трех типов:

1. Распознавание лиц EigenFaces

Распознаватель лиц EigenFaces рассматривает все обучающие образы всех персонажей как комплекс и пытается вывести компоненты. Эти компоненты необходимы и полезны (части, которые захватывают наибольшее количество отклонений / изменений) и отбрасывают остальные изображения. Таким образом, он не только извлекает важные элементы из обучающих данных, но и экономит память, отбрасывая менее важные сегменты.

2. Распознаватель FisherFaces

Алгоритм Fisherfaces вместо того, чтобы получать полезные функции, которые представляют все лица всех людей, он удаляет ценные особенности, которые отличают одного человека от других. Эти черты одного человека не преобладают над другими, и у вас есть черты, которые отличают одного человека от других.

3. Гистограммы локальных двоичных шаблонов

Мы знаем, что Eigenfaces и Fisherfaces подвержены влиянию света и в реальной жизни; мы не можем гарантировать идеальные условия освещения. Распознаватель лиц LBPH - это усовершенствование, устраняющее этот недостаток. Идея не в том, чтобы найти локальные особенности изображения. Алгоритм LBPH пытается найти локальную структуру изображения, и делает это путем сравнения каждого пикселя с соседними пикселями.

Как запустить распознавание лиц: -

#import OpenCV module
import cv2
import os
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
#function to detect face
def detect_face (img):
#convert the test image to gray image
gray = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY)
#load OpenCV face detector
face_cas = cv2.CascadeClassifier ('-File name.xml-')
faces = face_cas.detectMultiScale (gray, scaleFactor=1.3, minNeighbors=4);
#if no faces are detected then return image
if (len (faces) == 0):
return None, None
#extract the face
faces [0]=(x, y, w, h)
#return only the face part
return gray[y: y+w, x: x+h], faces [0]
#this function will read all persons' training images, detect face #from each image
#and will return two lists of exactly same size, one list
def prepare_training_data(data_folder_path):
#------STEP-1--------
#get the directories (one directory for each subject) in data folder
dirs = os.listdir(data_folder_path)
faces = []
labels = []
for dir_name in dirs:
#our subject directories start with letter 's' so
#ignore any non-relevant directories if any
if not dir_name.startswith("s"):
continue;
#------STEP-2--------
#extract label number of subject from dir_name
#format of dir name = slabel
#, so removing letter 's' from dir_name will give us label
label = int(dir_name.replace("s", ""))
#build path of directory containin images for current subject subject
#sample subject_dir_path = "training-data/s1"
subject_dir_path = data_folder_path + "/" + dir_name
#get the images names that are inside the given subject directory
subject_images_names = os.listdir(subject_dir_path)
#------STEP-3--------
#go through each image name, read image,
#detect face and add face to list of faces
for image_name in subject_images_names:
#ignore system files like .DS_Store
if image_name.startswith("."):
continue;
#build image path
#sample image path = training-data/s1/1.pgm
image_path = subject_dir_path + "/" + image_name
#read image
image = cv2.imread(image_path)
#display an image window to show the image
cv2.imshow("Training on image...", image)
cv2.waitKey(100)
#detect face
face, rect = detect_face(image)
#------STEP-4--------
#we will ignore faces that are not detected
if face is not None:
#add face to list of faces
faces.append(face)
#add label for this face
labels.append(label)
cv2.destroyAllWindows()
cv2.waitKey(1)
cv2.destroyAllWindows()
return faces, labels
#let's first prepare our training data
#data will be in two lists of same size
#one list will contain all the faces
#and other list will contain respective labels for each face
print("Preparing data...")
faces, labels = prepare_training_data("training-data")
print("Data prepared")
#print total faces and labels
print("Total faces: ", len(faces))
print("Total labels: ", len(labels))
#create our LBPH face recognizer
face_recognizer = cv2.face.createLBPHFaceRecognizer()
#train our face recognizer of our training faces
face_recognizer.train(faces, np.array(labels))
#function to draw rectangle on image
#according to given (x, y) coordinates and
#given width and heigh
def draw_rectangle(img, rect):
(x, y, w, h) = rect
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
#function to draw text on give image starting from
#passed (x, y) coordinates.
def draw_text(img, text, x, y):
cv2.putText(img, text, (x, y), cv2.FONT_HERSHEY_PLAIN, 1.5, (0, 255, 0), 2)
#this function recognizes the person in image passed
#and draws a rectangle around detected face with name of the subject
def predict(test_img):
#make a copy of the image as we don't want to chang original image
img = test_img.copy()
#detect face from the image
face, rect = detect_face(img)
#predict the image using our face recognizer
label= face_recognizer.predict(face)
#get name of respective label returned by face recognizer
label_text = subjects[label]
#draw a rectangle around face detected
draw_rectangle(img, rect)
#draw name of predicted person
draw_text(img, label_text, rect[0], rect[1]-5)
return img
#load test images
test_img1 = cv2.imread("test-data/test1.jpg")
test_img2 = cv2.imread("test-data/test2.jpg")
#perform a prediction
predicted_img1 = predict(test_img1)
predicted_img2 = predict(test_img2)
print("Prediction complete")
#create a figure of 2 plots (one for each test image)
f, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 5))
#display test image1 result
ax1.imshow(cv2.cvtColor(predicted_img1, cv2.COLOR_BGR2RGB))
#display test image2 result
ax2.imshow(cv2.cvtColor(predicted_img2, cv2.COLOR_BGR2RGB))
#display both images
cv2.imshow("Tom cruise test", predicted_img1)
cv2.imshow("Shahrukh Khan test", predicted_img2)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.waitKey(1)
cv2.destroyAllWindows()

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