Вы когда-нибудь задумывались, как точно Snapchat применяет различные фильтры к вашему лицу? Совершает ли ваш смартфон волшебство, когда он разблокируется с помощью ваших черт лица? Нет, вы просто наблюдаете за распознаванием лиц в действии.
Обнаружение лиц — это технология искусственного интеллекта, которая может идентифицировать человеческие лица на цифровом изображении или видео. Узнайте, как создать программу распознавания лиц в режиме реального времени, написав менее 25 строк кода с помощью легендарного алгоритма Haar Cascade.
Что такое Хаарский каскад?
Haar Cascade — это алгоритм обнаружения объектов, представленный Полом Виолой и Майклом Джонсом для обнаружения лиц на изображениях или видео. Каскадная функция обучается с использованием множества положительных и отрицательных изображений, которые впоследствии можно использовать для идентификации любого объекта или лица на других носителях. Эти обученные файлы доступны в Репозиторий OpenCV GitHub.
Используя метод скользящего окна, окно фиксированного размера перебирает изображение слева направо и сверху вниз. На каждом этапе окно останавливается и классифицирует, содержит ли область лицо или нет.
OpenCV, инструмент компьютерного зрения, работает с предварительно обученной моделью каскада Хаара для классификации функций. На каждом этапе проверяются пять объектов: два краевых объекта, два линейных объекта и один четырехпрямоугольный объект.
При наблюдении область глаз кажется темнее, чем область щек, а область носа выглядит ярче, чем область глаз. Вы можете визуализировать эти функции следующим образом.
Используя эти функции и вычисление пикселей, алгоритм идентифицирует более 100 000 точек данных. Затем вы можете использовать алгоритм Adaboost для повышения точности и отбрасывания ненужных функций. В течение многих итераций этот подход сводит к минимуму частоту ошибок и увеличивает вес признака до тех пор, пока не будет достигнута приемлемая точность.
Однако метод скользящего окна останавливается, если конкретный тестовый пример терпит неудачу, и это требует больших вычислительных ресурсов. Для решения этой проблемы можно применить концепцию каскада классификаторов. Вместо того, чтобы применять все функции в одном окне, этот подход группирует и применяет их поэтапно.
Если окно не проходит первый этап, процесс отбрасывает его, в противном случае он продолжается. Это приводит к резкому сокращению количества выполняемых операций и делает его пригодным для использования в приложениях реального времени.
Рабочий процесс распознавания лиц
Следуйте этому алгоритму, чтобы создать программу распознавания лиц:
- Загрузите алгоритм фронтальной поверхности каскада Хаара.
- Инициализируйте камеру.
- Чтение кадров с камеры.
- Преобразование цветных изображений в оттенки серого.
- Получите координаты лица.
- Нарисуйте прямоугольник и поместите соответствующее сообщение.
- Отобразите вывод.
Что такое OpenCV?
OpenCV — это библиотека компьютерного зрения и машинного обучения с открытым исходным кодом. Он имеет более 2500 оптимизированных алгоритмов для различных приложений. К ним относятся обнаружение лиц/объектов, распознавание, классификация и многое другое.
Конфиденциальность ваших лицевых данных это отдельная забота. Сотни известных компаний, таких как Google, IBM и Yahoo, используют OpenCV в своих приложениях. Некоторые люди, стремящиеся сохранить конфиденциальность своих данных, продемонстрировали есть способы избежать распознавания лиц.
Чтобы установить OpenCV в Python, используйте команду:
точка установить opencv-python
Как создать программу распознавания лиц с помощью Python
Выполните следующие шаги, чтобы построить детектор лиц:
Этот пример кода вместе с файлом алгоритма каскада Хаара доступен в Репозиторий GitHub и вы можете использовать его бесплатно по лицензии MIT.
- Загрузите Haar Cascade Front Face XML по умолчанию файл и поместите его в то же место, что и ваша программа Python.
- Импортируйте библиотеку OpenCV.
# импорт необходимых библиотек
Импортировать cv2 - Сохраните файл алгоритма Haar Cascade Frontal Face для быстрого доступа к нему.
# загружаем файл алгоритма случая Хаара в переменную alg
Алг = "haarcascade_frontalface_default.xml" - Используйте класс CascadeClassifier для загрузки файла XML в OpenCV.
# передача алгоритма в OpenCV
haar_cascade = cv2.CascadeClassifier (алгоритм) - Захватите видео с камеры. Передайте 0 в Видеозахват() для использования вашей основной камеры. Если вы подключили внешнюю камеру, вы можете использовать последовательные номера 1, 2 и т. д., чтобы использовать ее вместо нее.
# захват видеопотока с камеры
камера = cv2.VideoCapture (0) - Настройте бесконечный цикл для покадрового чтения входных данных с камеры. читать() функция возвращает два параметра. Первое значение имеет логический тип, указывающий, успешна операция или нет. Второй параметр содержит фактический кадр, с которым вы собираетесь работать. Сохраните этот кадр в изображение переменная.
покаИстинный:
_, img = cam.read() - Установите текст по умолчанию, чтобы он отображался как Лицо не обнаружено. При обнаружении обновите значение этой переменной.
текст = "Лицо не обнаружено"
- Ввод, полученный из реального мира, красочный, в формате BGR. BGR означает синий, зеленый и красный. Это создает много обработки для приложений компьютерного зрения. Чтобы уменьшить это, используйте формат оттенков серого.
Передайте формат кадра и кода преобразования, COLOR_BGR2GRAY, к cvtColor() чтобы изменить каждый кадр видео с цветного на оттенки серого.# конвертировать каждый кадр из BGR в оттенки серого
grayImg = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY) - Использовать обнаружитьМногомасштабный() для обнаружения лиц. Этот метод принимает три параметра в качестве входных данных. Сначала исходное изображение, серыйImg. Второй параметр — масштабный коэффициент. Это указывает, насколько вы должны уменьшить размер изображения в каждом масштабе изображения. Используйте значение по умолчанию 1,3 в качестве коэффициента масштабирования. Чем выше коэффициент масштабирования, тем меньше шагов и тем быстрее выполнение. Однако существует также большая вероятность пропуска лиц. Третий параметр — minNeighbors. Это указывает, сколько соседей должен иметь каждый прямоугольник-кандидат, чтобы сохранить его. Чем выше значение, тем меньше вероятность ложного срабатывания, но это также означает пропуск нечетких следов лица.
# детектировать лица с помощью Haar Cascade
лицо = haar_cascade.detectMultiScale (grayImg, 1.3, 4) - Когда вы обнаруживаете лицо, вы получаете четыре координаты. x представляет координату x, y представляет координату y, w представляет ширину, а h представляет высоту. Обновите текст на Обнаружено лицо и нарисуйте прямоугольник, используя эти координаты. Цвет прямоугольника зеленый (BGR) формата толщиной два пикселя.
# нарисуйте прямоугольник вокруг лица и обновите текст до Face Detected
для (x, y, w, h) по лицу:
текст = "Обнаружено лицо"
cv2.прямоугольник(изображение, (Икс, у), (Икс + ж, у + час), (0, 255, 0), 2) - При желании напечатайте текст на выходной консоли. Отобразить текст на экране, используя захваченный кадр в качестве источника, текст, полученный в приведенном выше тексте, шрифт стиль FONT_HERSHEY_SIMPLEX, коэффициент масштабирования шрифта 1, синий цвет, толщина в два пикселя и тип линии AA.
# отображаем текст на картинке
Распечатать(текст)
image = cv2.putText (img, текст, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2, cv2.LINE_AA) - Показать окно с заголовком Распознавание лиц и изображение. Использовать ключ ожидания () метод для отображения окна в течение 10 миллисекунд и проверки нажатия клавиши. Если пользователь нажимает кнопку Esc ключ (значение ASCII 27), выйти из цикла.
# отображаем окно вывода и нажимаем клавишу выхода для выхода
cv2.imshow ("Распознавание лиц", изображение)
ключ = cv2.waitKey (10)если ключ == 27:
перерыв - Наконец, освободите объект камеры из программы python и закройте все окна.
камера.выпускать()
cv2.destroyAllWindows()
Распознавание лиц с использованием Python в действии
Когда лицо находится в поле зрения, вы должны увидеть такой вывод:
Когда лицо отсутствует, вы увидите сообщение, подобное этому:
Ограничения обнаружения лиц с использованием каскадного алгоритма Хаара
Хотя этот алгоритм легкий, с небольшим размером модели и работает быстро, есть несколько ограничений:
- В видео в реальном времени лицо должно находиться в поле зрения камеры. Если лицо находится слишком далеко, слишком близко или слишком наклонено, алгоритм не сможет уловить черты.
- Это алгоритм фронтального лица, поэтому вы не можете обнаружить вид сбоку.
- Высокие ложноположительные результаты. Он часто определяет области как лица, даже если лица нет.
- Нужны оптимальные условия освещения. Чрезмерное или тусклое освещение снижает точность алгоритма.
Множество применений распознавания лиц
Распознавание лиц имеет широкий спектр применений в современном мире. Вы можете использовать его для распознавания лиц в смартфонах, домах, транспортных средствах и контрольно-пропускных пунктах. Обнаружение лиц уже широко распространено в системах видеонаблюдения, фильтрах социальных сетей и автоматическом отслеживании лиц в кинематографе.
Это только начало этой замечательной технологии. Благодаря достижениям мы могли бы идентифицировать пропавших детей, ловить преступников и предотвращать такие преступления, как кража личных данных.