Проект глубокого обучения: как использовать Python и OpenCV для распознавания лиц

OpenCV
Проект глубокого обучения: как использовать Python и OpenCV для распознавания лиц

В этой статье мы расскажем вам, как использовать 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, звуковая и световая сигнализация, возможности анализа видео наблюдения и агрегации данных.