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

Мы узнаем, как построить систему обнаружения лиц, которая использует предварительно записанное видео в качестве входных данных и идентифицирует в нем лица. Этот проект похож на проект распознавания лиц в реальном времени (ссылка здесь) — разница в том, что последний принимает на вход прямой эфир с веб-камеры. Вы можете найти некоторое совпадение в содержании.

Библиотеки для установки в pip (Windows + macOS)

  1. Библиотека OpenCV (компьютерное зрение с открытым исходным кодом). Она создана, чтобы помочь разработчикам выполнять задачи, связанные с компьютерным зрением.
install opencv-python

Далее нам нужно установить API распознавания лиц.

2. Библиотека dlib:dlib построена на основе предварительно обученных моделей для определения ориентиров лица.

pip install dlib

3. библиотека face_recognition: face_recognition — это проект с открытым исходным кодом, который также известен как самый простой API для распознавания лиц.

pip install face_recognition

Давайте приступим к действию в Python

Теперь у нас установлены необходимые библиотеки. Мы начнем внедрять коды, как показано ниже. Я объяснил каждый блок кода, чтобы помочь вам понять, что происходит в фоновом режиме.

Не стесняйтесь перейти к концу этой страницы, чтобы получить ссылку на полный код.

Шаг 1.Откройте Spyder

Шаг 2.Импортируйте библиотеки

import cv2
import face_recognition

Шаг 3. Сделайте ссылку на видеофайл, сохраненный на жестком диске (в формате mp4).

cap= cv2.VideoCapture(<enter file path.mp4>)

Шаг 4. Инициализируйте необходимые переменные. Эти переменные будут заполнены позже в коде.

face_locations = []

Шаг 5.Это работает следующим образом: видео делится на кадры, а код считывает кадр за раз. В каждом кадре мы определяем местоположение лица с помощью API, которые мы импортировали выше. Для каждого обнаруженного лица мы находим координаты, рисуем вокруг него прямоугольник и передаем видео зрителю.

Полный код показан ниже — пояснения следуют под кодом

while True:
    # Grab a single frame of video
    ret, frame = cap.read()
    # Convert the image from BGR color (which OpenCV uses) to RGB   
    # color (which face_recognition uses)
    rgb_frame = frame[:, :, ::-1]
    # Find all the faces in the current frame of video
    face_locations = face_recognition.face_locations(rgb_frame)
    for top, right, bottom, left in face_locations:
        # Draw a box around the face
        cv2.rectangle(frame, (left, top), (right, bottom), (0, 0,  
        255), 2)
    # Display the resulting image
    cv2.imshow('Video', frame)
    

    # Wait for Enter key to stop
    if cv2.waitKey(25) == 13:
        break

Блок 1:

# Grab a single frame of video
 ret, frame = cap.read()
# Convert the image from BGR color (which OpenCV uses) to RGB color #(which face_recognition uses)
 rgb_frame = frame[:, :, ::-1]

Здесь мы обрабатываем один кадр за раз. Кадр извлекается с помощью библиотеки cv2, которая захватывает кадр в цветах BGR (синий-зеленый-красный), а библиотека распознавания лиц использует формат RGB (красный-зеленый-синий). Следовательно, мы меняем цветовой код кадра.

Блок 2:

face_locations = face_recognition.face_locations(rgb_frame)

Здесь мы находим координаты лиц, присутствующих в кадре. Список face_locations заполняется координатами x, y, а также шириной и высотой обнаруженных лиц.

Блок 3:

for top, right, bottom, left in face_locations:
 # Draw a box around the face
 cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)

Здесь мы рисуем прямоугольник вокруг каждого захваченного лица. Прямоугольник начинается с координат x и y (в данном случае слева и сверху) и простирается до ширины и высоты обнаруженного лица (в данном случае справа и снизу).

Блок 4:

cv2.imshow(‘Video’, frame)
if cv2.waitKey(25) == 13:
        break

Полученное изображение (кадр) передается зрителю, и цикл продолжается до тех пор, пока пользователь не нажмет клавишу Enter на клавиатуре.

Шаг 6.Все отснятые видео должны быть опубликованы.

video_capture.release()
cv2.destroyAllWindows()

Запустите программу в командной строке

Следующий шаг — сохранить файл в формате .py и запустить его в командной строке/приглашении Anaconda.

Я запустил его в приглашении Anaconda, сначала перейдя в папку с помощью команды cd.

Я запустил его в приглашении Anaconda, сначала перейдя в папку с помощью команды cd.

cd <folder path>

Запустите файл Python

python filename.py

Вы увидите всплывающее окно с воспроизведением видео. Видео может быть медленным, и это связано с тем, что количество кадров в OpenCV обычно велико. Однако, если вы сохраните видео на жесткий диск, записанное видео не будет медленным и будет соответствовать частоте кадров (кадров в секунду) входного видео.

Вы можете скачать больше видео без лицензионных отчислений здесь.

И да! Вы успешно написали код, который распознает человеческие лица в видео.

Попробуйте поэкспериментировать с видео с включенными фильтрами Snapchat и дайте мне знать, как получилось, в разделе комментариев ниже.

Если у вас возникнут какие-либо проблемы, дайте мне знать в разделе комментариев.

Коды



Ссылки по теме

Система распознавания лиц в режиме реального времени на Python — Windows и macOS

Обнаружение транспортных средств в Python с использованием OpenCV — Windows и macOS

Обнаружение пешеходов в Python с использованием OpenCV — Windows и macOS

Сохранение результатов распознавания объектов в macOS

Где меня найти 🤓

  1. Свяжитесь со мной на LinkedIn/ GitHub/ Мой сайт
  2. Чувствуете щедрость? Купи мне кофе здесь☕️