Распознавание лиц на Python — это популярная задача компьютерного зрения, которая позволяет идентифицировать или верифицировать личность человека на основе изображения или видео. Python предоставляет несколько мощных библиотек для решения этой задачи.
Наиболее популярные библиотеки:
Face_recognition: Одна из самых простых в использовании библиотек для распознавания лиц. Она основана на библиотеке dlib и использует глубокое обучение для достижения высокой точности. OpenCV (cv2): Мощная библиотека компьютерного зрения, предоставляющая широкий спектр функций, включая обнаружение лиц. Для распознавания лиц OpenCV обычно используется вместе с другими алгоритмами, такими как Eigenfaces, Fisherfaces или Local Binary Patterns Histograms (LBPH). Dlib: C++ библиотека, предоставляющая инструменты машинного обучения и анализа данных. Библиотека face_recognition построена на основе dlib. dlib предоставляет алгоритмы для обнаружения лиц и определения ключевых точек лица.
Основные этапы распознавания лиц:
Обнаружение лиц (Face Detection): Нахождение лиц на изображении или видео. Определение ключевых точек лица (Facial Landmark Detection): Определение координат ключевых точек на лице (например, углы глаз, кончик носа, уголки рта). Вычисление “отпечатков” лиц (Face Encoding): Генерация уникального числового представления (вектора) для каждого лица, которое позволяет сравнивать лица и определять, принадлежат ли они одному и тому же человеку. Сравнение лиц (Face Comparison): Сравнение “отпечатков” лиц для определения степени сходства.
Пример с использованием библиотеки Face_recognition (самый простой способ):
Import face_recognition
Import cv2
# 1. Загрузка Изображений
Image_of_bill = face_recognition. load_image_file("bill_gates. jpg")
Image_of_steve = face_recognition. load_image_file("steve_jobs. jpg")
Image_to_test = face_recognition. load_image_file("bill_steve. jpg")
# 2. Получение "Отпечатков" Лиц
Bill_face_encoding = face_recognition. face_encodings(image_of_bill)[0]
Steve_face_encoding = face_recognition. face_encodings(image_of_steve)[0]
Face_locations = face_recognition. face_locations(image_to_test)
Unknown_face_encodings = face_recognition. face_encodings(image_to_test, face_locations)
# 3. Сравнение Лиц
Known_faces = [
bill_face_encoding,
steve_face_encoding
]
Face_names = [
"Bill Gates",
"Steve Jobs"
]
# Convert the image to a NumPy array
Image_to_test_np = cv2.imread("bill_steve. jpg")
# Loop through each face found in the unknown image
For face_encoding, face_location in zip(unknown_face_encodings, face_locations):
results = face_recognition. compare_faces(known_faces, face_encoding)
top, right, bottom, left = face_location
# See if the face is a match for the known face(s)
matchIndex = results. index(True) if True in results else -1 # Find the index of the match, or -1 if no match
if matchIndex!= -1: # If there’s a match
name = face_names[matchIndex] # Get the name of the person
cv2.rectangle(image_to_test_np, (left, top), (right, bottom), (0, 0, 255), 2)
font = cv2.FONT_HERSHEY_DUPLEX
cv2.putText(image_to_test_np, name, (left + 6, bottom — 6), font, 0.5, (255, 255, 255), 1)
else:
cv2.rectangle(image_to_test_np, (left, top), (right, bottom), (0, 0, 255), 2)
font = cv2.FONT_HERSHEY_DUPLEX
cv2.putText(image_to_test_np, "Unknown", (left + 6, bottom — 6), font, 0.5, (255, 255, 255), 1)
# Display the image with the faces labeled
Cv2.imshow("Face Recognition", image_to_test_np)
Cv2.waitKey(0)
Cv2.destroyAllWindows()
# Вывод Результатов
# print(results)
Разъяснение кода:
Импорт библиотек: Импортируются face_recognition и cv2 (OpenCV). Загрузка изображений: Загружаются изображения известных лиц (Bill Gates, Steve Jobs) и изображение для тестирования (где могут быть эти лица или другие). Замените "bill_gates. jpg", "steve_jobs. jpg" и "bill_steve. jpg" на пути к вашим файлам. Получение “отпечатков” лиц:
face_recognition. face_encodings() используется для получения “отпечатков” лиц на каждом изображении. Возвращает список “отпечатков” (по одному на каждое лицо на изображении). [0] используется для извлечения первого (и единственного) “отпечатка” из изображений с известными лицами. face_recognition. face_locations() находит координаты лиц на тестовом изображении.
Сравнение лиц:
Создается список known_faces с “отпечатками” известных лиц. face_recognition. compare_faces() сравнивает “отпечаток” каждого лица на тестовом изображении с “отпечатками” известных лиц. Возвращает список булевых значений, указывающих, совпадает ли лицо с каждым из известных лиц. Код далее обрабатывает результаты сравнения, определяет имя соответствующего лица (если есть совпадение) и рисует прямоугольник вокруг лица с именем, используя OpenCV.
Пример с использованием OpenCV (более сложный, но предоставляет больше контроля):
Import cv2
# Загрузка каскада Хаара для обнаружения лиц
Face_cascade = cv2.CascadeClassifier(cv2.data. haarcascades + ‘haarcascade_frontalface_default. xml’)
# Загрузка изображения
Img = cv2.imread(‘test. jpg’) # Замените ‘test. jpg’ на путь к вашему файлу
# Преобразование в оттенки серого
Gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Обнаружение Лиц
Faces = face_cascade. detectMultiScale(gray, 1.1, 4)
# Отрисовка прямоугольников вокруг лиц
For (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
# Отображение Изображения
Cv2.imshow(‘Detected Faces’, img)
Cv2.waitKey()
Разъяснение кода OpenCV:
Загружается классификатор Хаара из OpenCV. Этот классификатор используется для обнаружения лиц. Изображение преобразуется в оттенки серого, так как классификатор Хаара работает с черно-белыми изображениями. face_cascade. detectMultiScale() обнаруживает лица на изображении. Возвращает список прямоугольников, определяющих положение каждого лица. Вокруг каждого лица рисуется прямоугольник.
Ключевые моменты и рекомендации:
Установка библиотек:
· pip install face_recognition opencv-python
Для OpenCV:
Pip install opencv-contrib-python
В некоторых случаях может потребоваться установка dlib отдельно:
Pip install dlib
Но обычно face_recognition сама устанавливает dlib как зависимость.
Качество изображений: Точность распознавания лиц сильно зависит от качества изображений. Используйте изображения с хорошим разрешением и четким отображением лиц. Обучение модели: Для повышения точности распознавания можно обучить собственную модель на наборе изображений известных лиц. Библиотека face_recognition предоставляет инструменты для этого. Ресурсоемкость: Распознавание лиц — это ресурсоемкая задача, особенно при обработке видео. Оптимизируйте код для повышения производительности (например, уменьшайте размер изображений, используйте многопоточность). Угол поворота лица и освещение: Алгоритмы распознавания лиц могут быть чувствительны к углу поворота лица и условиям освещения. Альтернативные алгоритмы: Помимо указанных выше, существуют и другие алгоритмы распознавания лиц, такие как deepface, insightface, которые могут предоставлять лучшую точность в определенных сценариях. Этические соображения: При использовании технологии распознавания лиц необходимо учитывать этические соображения, такие как конфиденциальность и предвзятость.
Дополнительные возможности Face_recognition:
Определение возраста и пола: Можно использовать дополнительные модели для определения возраста и пола человека на изображении. Распознавание эмоций: Можно использовать другие библиотеки (например, OpenCV с моделями машинного обучения) для распознавания эмоций на лице. Отслеживание лиц в видео: Можно отслеживать перемещение лиц в видеопотоке.
Распознавание лиц — это активно развивающаяся область компьютерного зрения. Выбор подходящей библиотеки и алгоритма зависит от конкретной задачи и требований к точности и производительности.