В этом посте мы рассмотрим, что такое распознавание лиц и чем оно отличается от распознавания лиц?
Давайте сначала кратко разберемся в принципе распознавания лиц, а затем перейдем к кодированию! !
В конце этой статьи вы также можете разработать программу распознавания лиц для распознавания лиц на изображениях! ! !
Обзор распознавания лиц
Что, если бы машины могли автоматически определять объекты на изображениях без вмешательства человека?
Лицо у всех может быть немного разным, но ведь можно с уверенностью сказать, что все лица имеют определенные характеристики. Существуют различные алгоритмы распознавания лиц, но алгоритм Виолы-Джонса является старейшим из используемых до сих пор.
Обнаружение лиц часто является первым шагом ко многим приложениям, связанным с лицами, таким как распознавание лиц или проверка лиц. Однако распознавание лиц имеет очень полезные применения. Вероятно, одним из самых успешных применений распознавания лиц является «фотографирование». Пример: при нажатии на фотографию друга камера со встроенным алгоритмом распознавания лиц определяет, где находится лицо, и соответствующим образом настраивает фокус.
Обзор распознавания лиц
Вообще говоря, распознавание лиц — это метод идентификации или подтверждения личности человека по лицу. Для распознавания лиц доступны различные алгоритмы, но их точность может различаться. В этой статье я расскажу вам, как использовать глубокое обучение для распознавания лиц. Давайте теперь разберемся, как распознавать лица с помощью глубокого обучения.
Здесь мы используем встраивание лиц, при котором каждое лицо преобразуется в вектор. Метод преобразования лиц в векторы называется глубоким метрическим обучением. Позвольте мне разбить этот процесс на три простых шага для лучшего и более легкого понимания:
1. Распознавание лиц:
Первая задача, которую мы выполняем, — обнаружение лиц на изображениях (фото) или видеопотоках. Теперь мы знаем точные координаты/местоположение лица, поэтому извлекаем это лицо для дальнейшей обработки.
2. Извлечение признаков:
Теперь посмотрите, что мы обрезали лицо с изображения, поэтому мы извлекли из него определенные черты. Здесь мы увидим, как извлечь эти черты лица, используя встраивание лица.
Как мы знаем, нейронная сеть принимает на вход изображение лица и выдает вектор, представляющий наиболее важные черты лица! В машинном обучении этот вектор представляет собой не что иное, как так называемое встраивание, поэтому мы называем это векторным встраиванием лиц.
Теперь, как это поможет идентифицировать лица разных людей? Когда мы обучаем нейронную сеть, она учится выводить похожие векторы для лиц, которые выглядят одинаково. Давайте рассмотрим пример, если у меня есть несколько изображений лиц в разные промежутки времени, то понятно, что некоторые черты могут меняться, но ненамного. Таким образом, в этой задаче векторы, относящиеся к лицам, похожи или, можно сказать, очень близки в векторном пространстве.
Теперь, когда мы увидели, как работает эта сеть, давайте посмотрим, как использовать эту сеть на наших собственных данных. Здесь мы передаем все изображения в данных в эту предварительно обученную сеть, чтобы получить соответствующие вложения и сохранить эти вложения в файле для использования на следующем шаге.
3. Сравнение лиц:
Мы сохранили эмбеддинги лиц для каждого лица в данных в файле, следующим шагом будет выявление новых изображений, которых нет в наших данных. Итак, первый шаг — вычислить встраивание лица изображения, используя ту же сеть, которую мы использовали ранее, а затем сравнить это вложение с остальными имеющимися вложениями. Если полученное вложение ближе или похоже на любое другое вложение, мы можем распознать лицо.
Узнайте, что такое OpenCV
В области искусственного интеллекта компьютерное зрение является одной из самых интересных и сложных задач. Компьютерное зрение действует как мост между компьютерным программным обеспечением и визуализацией. Компьютерное зрение позволяет компьютерному программному обеспечению понимать и понимать визуализацию окружающей среды.
Давайте рассмотрим пример: выбор фруктов на основе формы, цвета и размера. Эта задача проста для человеческого мозга, но в конвейере компьютерного зрения сначала нам нужно собрать данные, затем мы выполняем операции обработки данных, а затем мы обучаем и учим модель понимать, как различать размер, форму фруктов на основе по фруктам и цвету.
Сегодня существуют различные программные пакеты для решения задач машинного обучения, глубокого обучения и компьютерного зрения. Компьютерное зрение на сегодняшний день является лучшим модулем для решения таких сложных задач. OpenCV — это библиотека с открытым исходным кодом. Он поддерживается различными языками программирования, такими как R, Python и т. д. Вероятно, он работает на большинстве платформ, таких как Windows, Linux и macOS.
Преимущества OpenCV:
1. Open CV является бесплатной библиотекой с открытым исходным кодом.
2. Open CV работает быстро, потому что написан на языке C/C++ по сравнению с другими языками.
3. Чем меньше оперативной памяти, тем лучше эффект OpenCV.
4. Поддержка большинства операционных систем, таких как Windows, Linux, macOS.
воплощать в жизнь
В этом разделе мы реализуем распознавание лиц с помощью OpenCV и Python.
Для начала посмотрим, какие библиотеки нам нужны и как их установить:
1. Открыть резюме
2. Блиб
3. Распознавание лиц
OpenCV — это библиотека обработки видео и изображений для анализа изображений и видео, таких как обнаружение лиц, чтение номерных знаков, редактирование фотографий, расширенное зрение роботов и многое другое.
Библиотека dlib содержит нашу реализацию «глубокого метрического обучения» для создания вложений лиц для фактического процесса распознавания.
Библиотека face_recognition очень проста в использовании, и мы будем использовать ее в нашем коде.
Во-первых, не забудьте установить библиотеку dlib перед установкой face_recognition. Вывод любого приложения для распознавания лиц, использующего OpenCV, будет выглядеть так:
Чтобы установить OpenCV, dlib и распознавание лиц, введите следующий фрагмент в командной строке.
pip install opencv-pythonconda install -c conda-forge dlibpip install face_recognition
Теперь займемся кодом!
Извлечение черт лица
Сначала вам нужен набор данных или даже создать свой собственный. Просто убедитесь, что все ваши изображения расположены в папках, каждая из которых содержит изображения только одного человека.
Теперь сохраните набор данных в той же папке, что и файлы, которые вы хотите создать. Вот код, я добавил комментарии, где это необходимо:
from imutils import paths #imutils includes opencv functions
import face_recognition
import pickle
import cv2
import os
#get paths of each file in folder named Images
#Images here that contains data(folders of various people)
imagePath = list(paths.list_images('Images'))
kEncodings = []
kNames = []
# loop over the image paths
for (i, ip) in enumerate(imagePath):
# extract the person name from the image path
name = ip.split(os.path.sep)[-2]
# load the input image and convert it from BGR
image = cv2.imread(ip)
rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
boxes = face_recognition.face_locations(rgb,model='hog')
# compute the facial embedding for the any face
encodings = face_recognition.face_encodings(rgb, boxes)
# loop over the encodings
for encoding in encodings:
kEncodings.append(encoding)
kNames.append(name)
#save emcodings along with their names in dictionary data
data = {"encodings": kEncodings, "names": kNames}
#use pickle to save data into a file for later use
f = open("face_enc", "wb")
f.write(pickle.dumps(data))#to open file in write mode
f.close()#to close file
Теперь обратите внимание, что мы сохранили вложения в файле с именем «face_enc», поэтому мы можем использовать их для идентификации лиц на изображениях (фотографиях) или в видеопотоках в реальном времени. В следующей части мы увидим, как распознавать лица на изображениях.
Как распознавать лица на изображениях
Следующий сценарий используется для обнаружения и распознавания лиц на изображениях. Я помещаю комментарии рядом с кодом там, где это необходимо, чтобы помочь новичкам эффективно понять код.
import face_recognition
import imutils #imutils includes opencv functions
import pickle
import time
import cv2
import os
#to find path of xml file containing haarCascade file
cfp = os.path.dirname(cv2.__file__) + "/data/haarcascade_frontalface_alt2.xml"
# load the harcaascade in the cascade classifier
fc = cv2.CascadeClassifier(cfp)
# load the known faces and embeddings saved in last file
data = pickle.loads(open('face_enc', "rb").read())
#Find path to the image you want to detect face and pass it here
image = cv2.imread(Path-to-img)
rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
#convert image to Greyscale for HaarCascade
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
faces = fc.detectMultiScale(gray,
scaleFactor=1.1,
minNeighbors=6,
minSize=(60, 60),
flags=cv2.CASCADE_SCALE_IMAGE)
# the facial embeddings for face in input
encodings = face_recognition.face_encodings(rgb)
names = []
# loop over the facial embeddings incase
# we have multiple embeddings for multiple fcaes
for encoding in encodings:
#Compare encodings with encodings in data["encodings"]
#Matches contain array with boolean values True and False
matches = face_recognition.compare_faces(data["encodings"],
encoding)
#set name =unknown if no encoding matches
name = "Unknown"
# check to see if we have found a match
if True in matches:
#Find positions at which we get True and store them
matchedIdxs = [i for (i, b) in enumerate(matches) if b]
count = {}
# loop over the matched indexes and maintain a count for
# each recognized face face
for i in matchedIdxs:
#Check the names at respective indexes we stored in matchedIdxs
name = data["names"][i]
#increase count for the name we got
count[name] = count.get(name, 0) + 1
#set name which has highest count
name = max(count, key=count.get)
# will update the list of names
names.append(name)
# do loop over the recognized faces
for ((x, y, w, h), name) in zip(faces, names):
# rescale the face coordinates
# draw the predicted face name on the image
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.putText(image, name, (x, y), cv2.FONT_HERSHEY_SIMPLEX,
0.75, (0, 255, 0), 2)
cv2.imshow("Frame", image)
cv2.waitKey(0)
вывод
Эпилог
Теперь мы завершили процесс распознавания лиц.
Расширенное чтение
Технология распознавания лиц представляет собой высокоточную, простую в использовании, высокостабильную биометрическую технологию, которую трудно подделать, и имеет чрезвычайно широкую перспективу рыночного применения. Существует широкий спектр потребностей в отраслях и секторах, таких как общественная безопасность, национальная оборона, таможня, транспорт, финансы, социальное обеспечение, медицинское обслуживание и другие средства контроля гражданской безопасности.
Наш персонал отдела исследований и разработок TSINGSEE Qingxi Video также активно разрабатывает технологии искусственного интеллекта, такие как распознавание лиц, распознавание лиц, статистику движения людей, обнаружение шлемов и т. д., и активно интегрирует их в существующие видеоплатформы. Типичным примером является облачный сервис видеообъединения EasyCVR, обладающий возможностями ИИ-распознавания лиц, распознавания номерных знаков, голосовой внутренней связи, управления поворотными камерами, звуковой и световой сигнализацией, анализа видео наблюдения и агрегации данных и широко используемый в интеллектуальном контроле доступа. в жилых кварталах и зданиях, в таких сценариях, как обнаружение слоняющихся подозрительных лиц по периметру, статистика движения в живописных местах и т. д.