Внутри ИИ

Реализация алгоритма обнаружения лиц в реальном времени с использованием OpenCV.

Реализация алгоритма обнаружения лиц в видеопотоках в реальном времени с использованием Python и OpenCV.

В этой статье мы реализуем детектор лиц с использованием библиотеки OpenCV. К концу этой статьи вы будете хорошо вооружены знаниями, чтобы создавать свои собственные системы распознавания лиц и опробовать другие классные модели, например, детектор улыбки, детектор глаз и т. Д. С использованием OpenCV.

OpenCV предоставляет предварительно обученную модель для таких задач. Вам не нужно писать целые алгоритмы и тренировать их. OpenCV сделает все это за вас. Фактически, вы можете использовать модели, даже не зная, что происходит за капотом. Но знание того, как что-то работает, перед использованием всегда дает вам преимущество. Это черта хорошего инженера машинного обучения.

Примечание. Перед чтением этой статьи я настоятельно рекомендую вам прочитать первую часть этой статьи, в которой основное внимание уделяется теории, лежащей в основе работы этих алгоритмов обнаружения лиц; что происходит под капотом.



Создание детектора лиц в OpenCV

Во-первых, мы должны установить библиотеку OpenCV с помощью пакета pip.

Импорт библиотеки OpenCV и чтение образа.

Как я сказал ранее, при обнаружении лиц цветовые каналы RGB не нужны. Итак, чтобы ускорить вычисления, мы конвертируем цветное изображение в изображение в оттенках серого.

Библиотека OpenCV поставляется с множеством предварительно обученных классификаторов, например, распознавание лиц, обнаружение глаз, обнаружение улыбки и т. Д. Функции haar для обнаружения лица (или любого другого объекта) хранятся в виде файлов XML в каталоге OpenCV/data/haarcascades/, а также могут быть доступны из их репозитория GitHub. Эти XML-файлы содержат информацию о функциях haar для обнаружения определенных объектов на изображении. Мы можем читать эти XML-файлы с помощью класса OpenCV CascadeClassifier. Класс CascadeClassifier считывает данные, хранящиеся в XML-файле, а затем предоставляет нам различные функции для обнаружения лиц и выполнения различных операций с изображением с помощью классификатора.

Одним из примеров такой функции из класса CascadeClassifier является detectMultiScale, который используется для обнаружения нескольких объектов одного типа на изображении, то есть нескольких лиц на изображении.

Теперь мы можем использовать этот face_cascade объект для обнаружения лиц на изображении.

Метод detectMultiScale возвращает список [прямоугольников] всех обнаруженных лиц. Каждый элемент в списке представляет собой уникальное лицо. Элементы списка имеют форму кортежа, например (x,y,w,h). Координаты x,y представляют верхний левый угол прямоугольника, а координаты w,h представляют ширину и высоту прямоугольника вокруг обнаруженного лица.

Теперь мы воспользуемся возвращенным списком [прямоугольников] и переберем каждый элемент списка, чтобы нарисовать прямоугольники на изображении, на котором обнаружено любое лицо.

Теперь объедините все части в одну функцию detect:

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

Обнаружение лица в реальном времени с помощью веб-камеры

Видеопотоки в реальном времени - это не что иное, как высокоскоростные движущиеся кадры неподвижных изображений. Итак, чтобы обнаружить лица в видеопотоке, мы сделаем следующее:

  1. Захватите видеопоток с помощью класса cv2.VideoCapture(0).
  2. Извлеките каждый кадр из этого видеопотока, используя метод read() класса cv2.VideoCapture(0).
  3. Преобразуйте каждый кадр (или изображение) в оттенки серого и передайте это функции detect().
  4. Получите обновленный фрейм из функции detect()
  5. Показывать обновленные данные на экране с помощью cv2.imshow(“Video”,frame)

Все это происходит так быстро, что дает ощущение распознавания лиц в реальном времени. Все это возможно благодаря скорости и простоте алгоритма Виолы-Джонса.

Вывод

К настоящему времени вы должны иметь возможность разрабатывать свои собственные алгоритмы обнаружения с использованием OpenCV в Python. В качестве упражнения вы можете попробовать собрать детектор улыбки или детектор глаза, используя ту же процедуру, которая описана выше. Вам просто нужно заменить имя haarcascade_frontalface_default.xml на имя наиболее подходящей модели. Все предварительно обученные модели вы можете найти здесь.

Спасибо, что прочитали статью. Если у вас есть какие-либо вопросы или предложения, подумайте о том, чтобы оставить ответ.

С уважением,
М.Махьяр Али