Внутри ИИ
Реализация алгоритма обнаружения лиц в реальном времени с использованием 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
:
Вы можете вызвать эту функцию, и она сначала обнаружит лица и вернет измененное изображение с прямоугольниками вокруг обнаруженных лиц.
Обнаружение лица в реальном времени с помощью веб-камеры
Видеопотоки в реальном времени - это не что иное, как высокоскоростные движущиеся кадры неподвижных изображений. Итак, чтобы обнаружить лица в видеопотоке, мы сделаем следующее:
- Захватите видеопоток с помощью класса
cv2.VideoCapture(0)
. - Извлеките каждый кадр из этого видеопотока, используя метод
read()
классаcv2.VideoCapture(0)
. - Преобразуйте каждый кадр (или изображение) в оттенки серого и передайте это функции
detect()
. - Получите обновленный фрейм из функции
detect()
- Показывать обновленные данные на экране с помощью
cv2.imshow(“Video”,frame)
Все это происходит так быстро, что дает ощущение распознавания лиц в реальном времени. Все это возможно благодаря скорости и простоте алгоритма Виолы-Джонса.
Вывод
К настоящему времени вы должны иметь возможность разрабатывать свои собственные алгоритмы обнаружения с использованием OpenCV в Python. В качестве упражнения вы можете попробовать собрать детектор улыбки или детектор глаза, используя ту же процедуру, которая описана выше. Вам просто нужно заменить имя haarcascade_frontalface_default.xml на имя наиболее подходящей модели. Все предварительно обученные модели вы можете найти здесь.
Спасибо, что прочитали статью. Если у вас есть какие-либо вопросы или предложения, подумайте о том, чтобы оставить ответ.
С уважением,
М.Махьяр Али