Создание системы распознавания лиц на Python: шаг за шагом 🧑‍💻📸



Распознавание лиц — одна из наиболее популярных и полезных задач в области машинного обучения и искусственного интеллекта. В этом посте мы рассмотрим, как создать простую систему распознавания лиц на Python с использованием библиотеки OpenCV и dlib. Эти инструменты позволяют эффективно обнаруживать и распознавать лица на изображениях.



Шаг 1: Установка необходимых библиотек

Для начала установите библиотеки OpenCV и dlib. Это можно сделать с помощью pip:



bash

pip install opencv-python dlib



Шаг 2: Импортируем необходимые модули

Импортируем необходимые библиотеки и модули для работы.



python

import cv2

import dlib

import numpy as np



Шаг 3: Загрузка моделей и настройка детектора лиц

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



python

# Загрузка предобученной модели детектора лиц

detector = dlib.get_frontal_face_detector()



# Загрузка модели предсказания координат ключевых точек лица

predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")



# Загрузка модели распознавания лиц

face_rec_model = dlib.face_recognition_model_v1("dlib_face_recognition_resnet_model_v1.dat")



Шаг 4: Функция для вычисления эмбеддингов лиц

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



python

def get_face_embeddings(image):

faces = detector(image, 1)

face_descriptors = []



for face in faces:

shape = predictor(image, face)

face_descriptor = face_rec_model.compute_face_descriptor(image, shape)

face_descriptors.append(np.array(face_descriptor))



return face_descriptors



Шаг 5: Обучение модели на известных лицах

Соберем данные для известных лиц и создадим базу данных эмбеддингов.



python

known_faces = {

"person1": get_face_embeddings(cv2.imread("person1.jpg"))[0],

"person2": get_face_embeddings(cv2.imread("person2.jpg"))[0]

}



Шаг 6: Распознавание лиц на новых изображениях

Теперь создадим функцию для распознавания лиц на новых изображениях.



python

def recognize_faces(image, known_faces, threshold=0.6):

face_descriptors = get_face_embeddings(image)

recognized_faces = []



for descriptor in face_descriptors:

distances = {name: np.linalg.norm(descriptor - emb) for name, emb in known_faces.items()}

min_distance = min(distances.values())



if min_distance < threshold:

recognized_faces.append(min(distances, key=distances.get))

else:

recognized_faces.append("Unknown")



return recognized_faces



Шаг 7: Применение модели к новому изображению

Применим нашу модель к новому изображению и выведем результаты.



python

test_image = cv2.imread("test_image.jpg")

recognized_faces = recognize_faces(test_image, known_faces)



for name in recognized_faces:

print(f"Распознанное лицо: {name}")



Заключение

Поздравляем! Вы создали простую систему распознавания лиц на Python. Этот проект можно расширять и улучшать, добавляя новые лица, улучшая качество предсказаний и интегрируя его в более сложные приложения.



Экспериментируйте с различными параметрами и изображениями, чтобы достичь лучших результатов. 🚀📸



TechVibe