В этой статье мы расскажем вам, как использовать Python для распознавания лиц.Обнаружение и идентификация человека в режиме реального времени в прямом эфире.
В этом проекте глубокого обучения мы узнаем, как распознавать лица в живом видео с помощью Python. Мы создадим этот проект, используя сеть распознавания лиц python dlib. Dlib — это программная библиотека общего назначения. Используя набор инструментов dlib, мы можем создавать реальные приложения для машинного обучения.
В этом проекте мы сначала поймете, как устройство распознавания лица, а затем мы будем использовать Python для создания распознавания.
Распознавание лиц с помощью Python, OpenCV и глубокого обучения
О распознавании лиц в dlib:
Python предоставляет API-интерфейс face_recognition, созданный на основе алгоритма распознавания лиц dlib. API-интерфейс face_recognition позволяет нам реализовывать приложения для распознавания лиц, отслеживания лиц в реальном времени и распознавания лиц.
Подготовка проекта:
Во-первых, вам нужно установить библиотеку dlib и API face_recognition от PyPI:
pip3 install dlib
pip3 install face_recognition
Скачать исходный код:
исходный код распознавания лиц
Шаги для реализации распознавания лиц с помощью Python:
Мы построим этот проект Python в двух частях. Сначала создайте два разных файла Python для двух частей:
- **embedding.py:** На этом шаге мы возьмем изображение человека в качестве входных данных. Мы будем делать встраивания лиц на этих изображениях.
- recognition.py: Теперь мы опознаем этого конкретного человека по кадру камеры.
1. embedding.py:
Сначала создайте файл embedding.py в своем рабочем каталоге. В этом файле мы создадим встраивание лица для определенного лица. Используйте метод face_recognition.face_encodings для встраивания лиц. Эти вложения граней представляют собой 128-мерный вектор. В этом векторном пространстве разные векторы одного и того же изображения человека близки друг к другу. После встраивания лиц мы сохраняем их в файле pickle.
Вставьте следующий код в этот файл embedding.py.
-
Импортируйте соответствующие библиотеки:
import sys import cv2 import face_recognition import pickle
-
Чтобы идентифицировать человека в файле рассола, используйте его имя и уникальный идентификатор в качестве входных данных:
name=input("enter name") ref_id=input("enter id")
-
Создайте файл pickle и словарь для хранения кодировок лиц:
try: f=open("ref_name.pkl","rb")
ref_dictt=pickle.load(f) f.close()
except: ref_dictt={} ref_dictt[ref_id]=name
f=open("ref_name.pkl","wb") pickle.dump(ref_dictt,f) f.close()
try: f=open("ref_embed.pkl","rb")
embed_dictt=pickle.load(f) f.close()
except: embed_dictt={}
-
Откройте веб-камеру и 5 фотографий человека в качестве входных данных и создайте их вставку:
Здесь мы храним вложения для конкретных людей в словаре embed_dictt. Мы создали embed_dictt в предыдущем состоянии. В этом словаре мы будем использовать ref_id этого человека в качестве ключа.
Чтобы сделать снимок, нажмите «s» пять раз. Если вы хотите остановить камеру, нажмите «q»:
for i in range(5):
key = cv2. waitKey(1)
webcam = cv2.VideoCapture(0)
while True:
check, frame = webcam.read()
cv2.imshow("Capturing", frame)
small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25)
rgb_small_frame = small_frame[:, :, ::-1]
key = cv2.waitKey(1)
if key == ord('s') :
face_locations = face_recognition.face_locations(rgb_small_frame)
if face_locations != []:
face_encoding = face_recognition.face_encodings(frame)[0]
if ref_id in embed_dictt:
embed_dictt[ref_id]+=[face_encoding]
else:
embed_dictt[ref_id]=[face_encoding]
webcam.release()
cv2.waitKey(1)
cv2.destroyAllWindows()
break
elif key == ord('q'):
print("Turning off camera.")
webcam.release()
print("Camera off.")
print("Program ended.")
cv2.destroyAllWindows()
break
- Обновите файл pickle с встраиванием лица.
Здесь мы сохраняем embed_dictt в файле pickle. Итак, чтобы идентифицировать этого человека, мы можем загрузить его вставку прямо из этого файла:
f=open("ref_embed.pkl","wb")
pickle.dump(embed_dictt,f)
f.close()
- Теперь пришло время выполнить первую часть проекта Python.
Запустите файл python и получите пять входных изображений, используя имя человека и его ref_id:
python3 embedding.py
2.признание.друзей:
Здесь мы снова создадим встраивание человека из кадра камеры. Затем мы сопоставляем новые вложения с теми, которые хранятся в файле рассола. Новое вложение для того же человека будет близко к его вложению в векторное пространство. Таким образом, мы сможем идентифицировать человека.
Теперь создайте новый файл python identity.py и вставьте следующий код:
-
Импортируйте библиотеку:
import face_recognition import cv2 import numpy as np import glob import pickle
-
Загрузите сохраненный файл рассола:
f=open("ref_name.pkl","rb") ref_dictt=pickle.load(f)
f.close()f=open("ref_embed.pkl","rb") embed_dictt=pickle.load(f)
f.close() -
Создайте два списка, один для хранения ref_id и один для соответствующих вложений:
known_face_encodings = []
known_face_names = []for ref_id , embed_list in embed_dictt.items(): for my_embed in embed_list: known_face_encodings +=[my_embed] known_face_names += [ref_id]
-
Запустите веб-камеру, чтобы идентифицировать этого человека:
video_capture = cv2.VideoCapture(0)
face_locations = [] face_encodings = [] face_names = [] process_this_frame = True
while True :
ret, frame = video_capture.read() small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25) rgb_small_frame = small_frame[:, :, ::-1] if process_this_frame: face_locations = face_recognition.face_locations(rgb_small_frame) face_encodings = face_recognition.face_encodings(rgb_small_frame, face_locations) face_names = [] for face_encoding in face_encodings: matches = face_recognition.compare_faces(known_face_encodings, face_encoding) name = "Unknown" face_distances = face_recognition.face_distance(known_face_encodings, face_encoding) best_match_index = np.argmin(face_distances) if matches[best_match_index]: name = known_face_names[best_match_index] face_names.append(name) process_this_frame = not process_this_frame for (top_s, right, bottom, left), name in zip(face_locations, face_names): top_s *= 4 right *= 4 bottom *= 4 left *= 4 cv2.rectangle(frame, (left, top_s), (right, bottom), (0, 0, 255), 2) cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 0, 255), cv2.FILLED) font = cv2.FONT_HERSHEY_DUPLEX cv2.putText(frame, ref_dictt[name], (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1) font = cv2.FONT_HERSHEY_DUPLEX cv2.imshow('Video', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break
video_capture.release() cv2.destroyAllWindows()
Теперь запустите вторую часть проекта, чтобы идентифицировать человека:
python3 recognise.py
Обобщить:
Этот проект глубокого обучения, опубликованный сегодня, научит вас разрабатывать проекты распознавания лиц с использованием библиотеки dlib библиотеки python и API-интерфейсов face_recognition (OpenCV). Он представляет API распознавания лиц. Мы реализовали этот проект Python в двух частях:
- В первой части мы увидели, как хранить информацию о структуре лица, то есть встраиваниях лиц. Затем мы научимся хранить эти вложения.
- Во второй части мы увидели, как распознавать людей, сравнивая новые встраивания лиц с сохраненными встраиваниями лиц.
Применение технологии распознавания лиц
В настоящее время, с точки зрения применения технологии распознавания лиц в моей стране, она в основном сосредоточена в трех областях: посещаемость и контроль доступа, безопасность и финансы. В частности, такие как: мониторинг безопасности, детекция лиц на видео, распознавание лиц, статистика трафика и т. д., широко используется в интеллектуальном управлении доступом жилых помещений и зданий, обнаружении подозрительных лиц, блуждающих по периметру, статистике трафика в живописных местах. , и т.д.
Основываясь на многолетнем техническом опыте в области видео, TSINGSEE интегрирует технологию обнаружения и интеллектуального распознавания ИИ в различные сценарии приложений.Типичным примером является облачный сервис слияния видео EasyCVR, в котором есть распознавание лиц ИИ, распознавание номерных знаков, голосовая связь, управление PTZ, звуковая и световая сигнализация, возможности анализа видео наблюдения и агрегации данных.