Вы когда-нибудь задумывались, как точно Snapchat применяет различные фильтры к вашему лицу? Совершает ли ваш смартфон волшебство, когда он разблокируется с помощью ваших черт лица? Нет, вы просто наблюдаете за распознаванием лиц в действии.

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

Что такое Хаарский каскад?

Haar Cascade — это алгоритм обнаружения объектов, представленный Полом Виолой и Майклом Джонсом для обнаружения лиц на изображениях или видео. Каскадная функция обучается с использованием множества положительных и отрицательных изображений, которые впоследствии можно использовать для идентификации любого объекта или лица на других носителях. Эти обученные файлы доступны в Репозиторий OpenCV GitHub.

Используя метод скользящего окна, окно фиксированного размера перебирает изображение слева направо и сверху вниз. На каждом этапе окно останавливается и классифицирует, содержит ли область лицо или нет.

instagram viewer

OpenCV, инструмент компьютерного зрения, работает с предварительно обученной моделью каскада Хаара для классификации функций. На каждом этапе проверяются пять объектов: два краевых объекта, два линейных объекта и один четырехпрямоугольный объект.

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

Используя эти функции и вычисление пикселей, алгоритм идентифицирует более 100 000 точек данных. Затем вы можете использовать алгоритм Adaboost для повышения точности и отбрасывания ненужных функций. В течение многих итераций этот подход сводит к минимуму частоту ошибок и увеличивает вес признака до тех пор, пока не будет достигнута приемлемая точность.

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

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

Рабочий процесс распознавания лиц

Следуйте этому алгоритму, чтобы создать программу распознавания лиц:

  1. Загрузите алгоритм фронтальной поверхности каскада Хаара.
  2. Инициализируйте камеру.
  3. Чтение кадров с камеры.
  4. Преобразование цветных изображений в оттенки серого.
  5. Получите координаты лица.
  6. Нарисуйте прямоугольник и поместите соответствующее сообщение.
  7. Отобразите вывод.

Что такое OpenCV?

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

Конфиденциальность ваших лицевых данных это отдельная забота. Сотни известных компаний, таких как Google, IBM и Yahoo, используют OpenCV в своих приложениях. Некоторые люди, стремящиеся сохранить конфиденциальность своих данных, продемонстрировали есть способы избежать распознавания лиц.

Чтобы установить OpenCV в Python, используйте команду:

точка установить opencv-python

Как создать программу распознавания лиц с помощью Python

Выполните следующие шаги, чтобы построить детектор лиц:

Этот пример кода вместе с файлом алгоритма каскада Хаара доступен в Репозиторий GitHub и вы можете использовать его бесплатно по лицензии MIT.

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

    если ключ == 27:
    перерыв

  13. Наконец, освободите объект камеры из программы python и закройте все окна.
    камера.выпускать()
    cv2.destroyAllWindows()

Распознавание лиц с использованием Python в действии

Когда лицо находится в поле зрения, вы должны увидеть такой вывод:

Когда лицо отсутствует, вы увидите сообщение, подобное этому:

Ограничения обнаружения лиц с использованием каскадного алгоритма Хаара

Хотя этот алгоритм легкий, с небольшим размером модели и работает быстро, есть несколько ограничений:

  • В видео в реальном времени лицо должно находиться в поле зрения камеры. Если лицо находится слишком далеко, слишком близко или слишком наклонено, алгоритм не сможет уловить черты.
  • Это алгоритм фронтального лица, поэтому вы не можете обнаружить вид сбоку.
  • Высокие ложноположительные результаты. Он часто определяет области как лица, даже если лица нет.
  • Нужны оптимальные условия освещения. Чрезмерное или тусклое освещение снижает точность алгоритма.

Множество применений распознавания лиц

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

Это только начало этой замечательной технологии. Благодаря достижениям мы могли бы идентифицировать пропавших детей, ловить преступников и предотвращать такие преступления, как кража личных данных.