Проект распознавания лиц на Python [за 5 простых шагов]
Опубликовано: 2020-09-01Идентификация объектов и распознавание лиц, вероятно, являются самыми популярными приложениями компьютерного зрения. Эта технология находит применение в различных отраслях, таких как безопасность и социальные сети. Итак, мы создаем проект распознавания лиц с помощью Python.
Обратите внимание, что вы должны быть знакомы с программированием на Python, OpenCV и NumPy. Это гарантирует, что вы не запутаетесь во время работы над этим проектом. Давайте начнем.
Мы поделились двумя методами распознавания лиц. В первом используется библиотека распознавания лиц Python, а в другом — OpenCV и NumPy. Ознакомьтесь с нашими программами по науке о данных, чтобы узнать больше.
Оглавление
Распознавание лиц с помощью «Распознавания лиц» Python
Вероятно, самый простой способ обнаружения лиц — это использование библиотеки распознавания лиц в Python . Он имел точность 99,38% в базе данных LFW. Использование довольно простое и не требует особых усилий. Более того, в библиотеке есть специальная команда «face_recognition» для идентификации лиц на изображениях.
Как использовать распознавание лиц
Вы можете различать лица на изображениях с помощью команды «face_locations»:
импортировать face_recognition

image = face_recognition.load_image_file("your_file.jpg")
face_locations = face_recognition.face_locations(изображение)
Он также может распознавать лица и связывать их с их именами:
импортировать face_recognition
known_image = face_recognition.load_image_file("modi.jpg")
unknown_image = face_recognition.load_image_file("unknown.jpg")
modi_encoding = face_recognition.face_encodings(известное_изображение)[0]
unknown_encoding = face_recognition.face_encodings(unknown_image)[0]
результаты = face_recognition.compare_faces([modi_encoding], unknown_encoding)
Изображение содержит «Нарендра Моди»
Есть много других вещей, которые вы можете выполнять с этой библиотекой, комбинируя ее с другими. Теперь мы обсудим выполнение распознавания лиц с помощью других известных библиотек Python, в частности OpenCV и NumPy.
Подробнее: Учебное пособие по Python NumPy: изучение Python Numpy на примерах
Проект распознавания лиц на Python
В этом проекте мы выполнили обнаружение и распознавание лиц с помощью OpenCV и NumPy. Мы использовали Raspberry Pi, но вы также можете использовать его с другими системами. Вам нужно будет только немного изменить код, чтобы использовать его на каком-либо другом устройстве (например, Mac или ПК с Windows).
Некоторая заслуга в этом проекте принадлежит Марсело Роваи .
Шаг № 1: Установите библиотеки
Во-первых, вы должны установить необходимые библиотеки, OpenCV и NumPy. Вы можете легко установить его через:
pip установить opencv-python
pip установить opencv-contrib-python
Для установки NumPy в вашей системе используйте ту же команду, что и выше, и замените «opencv-python» на «numpy»:
пип установить numpy
Шаг № 2: Обнаружение лиц
Теперь вы должны настроить камеру и подключить ее к вашей системе. Камера должна работать правильно, чтобы избежать проблем с распознаванием лиц.
Прежде чем наша камера распознает нас, она сначала должна обнаружить лица. Мы будем использовать классификатор Haar Cascade для распознавания лиц. В первую очередь это метод обнаружения объектов, при котором вы тренируете каскадную функцию с помощью негативных и позитивных изображений, после чего она становится способной обнаруживать объекты на других фотографиях.
В нашем случае мы хотим, чтобы наша модель обнаруживала лица. OpenCV поставляется с тренером и детектором, поэтому использовать классификатор Haar Cascade с этой библиотекой относительно удобнее. Вы также можете создать свой классификатор для обнаружения других изображений.
Вот код:
импортировать numpy как np
импорт cv2
faceCascade = cv2.CascadeClassifier('Cascades/haarcascade_frontalface_default.xml')
крышка = cv2.VideoCapture (0)
cap.set(3,640) # установить ширину
cap.set(4,480) # установить высоту
пока верно:
рет, img = cap.read()
изображение = cv2.flip (изображение, -1)
серый = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
лица = faceCascade.detectMultiScale(
серый,
масштабный коэффициент = 1,2,
минСоседи=5,
минимальный размер = (20, 20)
)
для (x,y,w,h) в гранях:
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
roi_gray = серый[y:y+h, x:x+w]
roi_color = изображение[у:у+ч, х:х+ш]
cv2.imshow('видео',изображение)
k = cv2.waitKey(30) и 0xff
if k == 27: # нажмите 'ESC' для выхода
перерыв
крышка.релиз()
cv2.destroyAllWindows()
Шаг № 3: Соберите данные
Теперь, когда ваша модель умеет распознавать лица, вы можете обучить ее, чтобы она начала распознавать чье лицо изображено на картинке. Для этого вы должны предоставить ему несколько фотографий лиц, которые вы хотите, чтобы он запомнил.
Вот почему мы начнем с создания нашего набора данных, собрав фотографии. Собрав необходимые изображения, добавьте идентификаторы для каждого человека, чтобы модель знала, какое лицо с каким идентификатором ассоциировать. Начните с изображений одного человека и добавьте не менее 10-20. Используйте различные выражения, чтобы получить наиболее эффективные результаты.
Создайте скрипт для добавления идентификаторов пользователей к изображениям, чтобы вам не приходилось делать это каждый раз вручную. Скрипт жизненно важен, если вы хотите использовать свою модель для нескольких лиц.
Изучите курсы по машинному обучению от лучших университетов мира. Заработайте программы Masters, Executive PGP или Advanced Certificate Programs, чтобы ускорить свою карьеру.
Шаг № 4: Тренируйтесь
После создания набора данных изображений человека вам нужно будет обучить модель. Вы должны передать изображения своему распознавателю OpenCV, и в конце он создаст файл с именем «trainer.yml».
На этом этапе вам нужно только предоставить модели изображения и их идентификаторы, чтобы модель могла ознакомиться с идентификатором каждого изображения. После того, как мы закончим обучение модели, мы можем протестировать ее.
Вот код:
импорт cv2
импортировать numpy как np
из изображения импорта PIL
импорт ОС
# Путь к базе данных изображений лиц

путь = 'набор данных'
распознаватель = cv2.face.LBPHFaceRecognizer_create()
Детектор = cv2.CascadeClassifier («haarcascade_frontalface_default.xml»);
# функция для получения изображений и данных этикетки
деф getImagesAndLabels (путь):
imagePaths = [os.path.join(путь,f) для f в os.listdir(путь)]
лицоОбразцы=[]
идентификаторы = []
для imagePath в imagePaths:
PIL_img = Image.open(imagePath).convert('L') # оттенки серого
img_numpy = np.array (PIL_img, 'uint8')
id = int(os.path.split(imagePath)[-1].split(“.”)[1])
лица = детектор.detectMultiScale(img_numpy)
для (x,y,w,h) в гранях:
faceSamples.append(img_numpy[y:y+h,x:x+w])
ids.append(идентификатор)
вернуть лицоОбразцы,идентификаторы
print("\n[INFO] Тренировка лиц. Это займет несколько секунд. Подождите...")
лица, идентификаторы = getImagesAndLabels (путь)
распознаватель.поезд (лица, np.array (идентификаторы))
# Сохраните модель в файл train/trainer.yml
распознаватель.запись('тренер/тренер.yml')
# Распечатать количество обученных лиц и завершить программу
print("\n [INFO] {0} лиц, обученных. Выход из программы".format(len(np.unique(ids))))
Узнайте: приложение MATLAB для распознавания лиц: код, описание и синтаксис
Шаг № 5: Запустите распознавание
Теперь, когда вы обучили модель, мы можем начать тестирование модели. В этом разделе мы добавили имена к идентификаторам, чтобы модель могла отображать имена соответствующих пользователей, которых она распознает.
Модель не узнает человека. Он предсказывает, совпадает ли лицо, которое он обнаруживает, с лицом, присутствующим в его базе данных. Наша модель отображает процент того, насколько лицо совпадает с лицом, представленным в ее базе данных. Его точность будет сильно зависеть от изображения, которое вы тестируете, и изображений, которые вы добавили в свою базу данных (изображения, с которыми вы обучали модель).
Вот код:
импорт cv2
импортировать numpy как np
импорт ОС
распознаватель = cv2.face.LBPHFaceRecognizer_create()
распознаватель.чтение('тренер/тренер.yml')
cascadePath = «haarcascade_frontalface_default.xml»
faceCascade = cv2.CascadeClassifier(cascadePath);
шрифт = cv2.FONT_HERSHEY_SIMPLEX
# инициировать счетчик идентификаторов
идентификатор = 0
# имена, связанные с идентификаторами: пример ==> upGrad: id=1 и т. д.
имена = ['Нет', upGrad', Me', 'Друг', 'Y', 'X']
# Инициализировать и начать захват видео в реальном времени
камера = cv2.VideoCapture(0)
cam.set(3, 640) # установить ширину видео
cam.set(4, 480) # установить высоту видео
# Определяем минимальный размер окна, которое будет распознаваться как лицо
минВт = 0,1*cam.get(3)
minH = 0,1*cam.get(4)
пока верно:
рет, img =cam.read()
img = cv2.flip(img, -1) # Отразить по вертикали
серый = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
лица = faceCascade.detectMultiScale(
серый,
масштабный коэффициент = 1,2,
минСоседи = 5,
minSize = (целое (минВт), целое (минВ)),
)
for(x,y,w,h) в гранях:
cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)
id, достоверность = распознаватель.predict(grey[y:y+h,x:x+w])
# Если достоверность меньше 100 ==> «0»: идеальное совпадение
если (достоверность < 100):
идентификатор = имена [идентификатор]
доверие = "{0}%". формат (раунд (100 - достоверность))
еще:
идентификатор = «неизвестно»
доверие = "{0}%". формат (раунд (100 - достоверность))
cv2.putText(
изображение,
ул (идентификатор),
(х+5,у-5),
шрифт,
1,
(255 255 255),
2
)
cv2.putText(
изображение,
ул (уверенность),
(х+5,у+ч-5),
шрифт,
1,
(255,255,0),
1
)
cv2.imshow («камера», изображение)
k = cv2.waitKey(10) & 0xff # Нажмите 'ESC' для выхода из видео
если к == 27:
перерыв
# Сделать очистку
print("\n [INFO] Выход из программы и выполнение очистки")
cam.релиз()

cv2.destroyAllWindows()
Мы подошли к концу нашего проекта по распознаванию лиц на Python. Теперь вы знаете, как создать модель машинного обучения, которая обнаруживает и распознает лица. Обязательно поделитесь с нами своими результатами!
Изучите: Учебное пособие по обнаружению объектов TensorFlow для начинающих
Узнайте больше о машинном обучении
Надеемся, вам понравился этот проект по распознаванию лиц. Если вы хотите усложнить задачу, вы можете добавить несколько лиц в свой набор данных и соответствующим образом обучить свою модель. Вы также можете комбинировать его с другими библиотеками и расширять проект во что-то еще, например, в систему безопасности распознавания лиц для программы!
Если вам интересно узнать больше о машинном обучении, ознакомьтесь с программой Executive PG IIIT-B и upGrad по машинному обучению и искусственному интеллекту, которая предназначена для работающих профессионалов и предлагает более 450 часов интенсивного обучения, более 30 тематических исследований и заданий, IIIT -B статус выпускника, 5+ практических практических проектов и помощь в трудоустройстве в ведущих фирмах.
Какой математический подход используется для распознавания лиц?
Распознавание лиц требует больших вычислительных ресурсов и часто используется для проверки точности алгоритмов машинного обучения и методов обнаружения объектов. Как правило, в большинстве случаев используется классический математический подход — евклидово расстояние. Геометрическое преобразование применяется для нахождения ближайшего евклидова расстояния между двумя множествами. Евклидово расстояние требует сложения квадрата разницы между двумя векторами точек, представляющих два изображения. Более подробную информацию об алгоритме евклидова расстояния можно найти в этой исследовательской статье.
Как работает распознавание лиц?
Обнаружение лиц — это процесс обнаружения человеческого лица или нескольких человеческих лиц на цифровом изображении или видео. Обнаружение лиц — это подпроцесс распознавания лиц, но этот термин обычно относится к распознаванию лиц на основе изображений, при котором для идентификации или проверки человека используются только местоположения лиц на изображении, а распознавание лиц также создает модель их уникального образа. лицо, которое затем сопоставляется с целевым лицом. Распознавание лиц отличается от распознавания лиц тем, что распознавание лиц — это автоматизированный процесс идентификации или подтверждения личности по цифровому изображению или источнику видео.
Каковы проблемы распознавания лиц?
Здесь обсуждаются некоторые проблемы распознавания лиц. Алгоритмы, задействованные в системах распознавания лиц, довольно сложны, что делает их весьма противоречивыми. Системы распознавания лиц легко обмануть изменениями окружающей среды и освещения, разными позами и даже похожими людьми. Системы распознавания лиц требуют очень высокой вычислительной мощности, поэтому системы распознавания лиц в основном используются с высокопроизводительными смартфонами и ноутбуками. Система распознавания лиц может обнаруживать несколько ложных совпадений в одном кадре. Программное обеспечение должно определить, что пользователь намеревался сделать, что не является легкой задачей для программного обеспечения.