Программирование инструмента обнаружения лиц на Python

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

Что такое компьютерное зрение?

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

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

В этой статье давайте узнаем, как создать инструмент распознавания лиц Python с помощью TipsMake.com.com. Сегодня это один из самых популярных языков программирования. У него есть множество реальных приложений, и распознавание лиц — лишь наиболее типичный пример.

Распознавание лиц — это технология искусственного интеллекта, которая может идентифицировать человеческие лица на цифровых фотографиях или видео. В этой статье TipsMake.com вместе с вами научится, как создать инструмент распознавания лиц в реальном времени всего за 25 строк кода с использованием легендарного каскадного алгоритма Хаара.

Что такое Каскад Хаар?

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

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

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

Программирование инструмента обнаружения лиц на Python. Рисунок 1.

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

Программирование инструмента обнаружения лиц на Python. Рисунок 2.

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

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

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

Процесс обнаружения лиц

Вот процесс, которому вам нужно следовать, чтобы создать инструмент распознавания лиц:

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

Что такое OpenCV?

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

Многие крупные компании, такие как Google, IBM и даже Yahoo, использовали OpenCV в своих приложениях. Однако прежде чем начать, вам также следует подумать об обеспечении безопасности ваших личных данных.

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

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

Программирование инструмента обнаружения лиц на Python

Чтобы запрограммировать детектор лиц на Python, вам необходимо выполнить следующие шаги:

  1. Загрузите XML-файл Haar Cascade Frontal Face Default по умолчанию и поместите его в то же место, где находится ваша программа Python.
  2. Импортируйте библиотеку OpenCV:

# импорт необходимых библиотек import cv2

  1. Сохраните файл алгоритма Haar Cascade Frontal Face для удобства использования.

# загружаем файл алгоритма случая хаара в переменную alg = “haarcascade_frontalface_default.xml”

  1. Используйте класс CascadeClassifier для загрузки XML-файла в OpenCV:

# передача алгоритма OpenCV haar_cascade = cv2.CascadeClassifier(alg)

  1. Получить видео с камеры. Передайте значение 0 функции VideoCapture(), чтобы использовать основную камеру. Если у вас больше камер, вы можете использовать следующие цифры, например 1, 2., для обозначения камер.

# захват видео с камеры cam = cv2.VideoCapture(0)

  1. Настройте бесконечный цикл для чтения каждого кадра ввода камеры. Функция read() возвращает два параметра. Первое значение является логическим, указывающим на второй успех операции. Второй параметр содержит фактическую структуру, с которой вы будете работать. Сохраните этот кадр в переменной img.

пока True: _, img = cam.read()

  1. По умолчанию для текста уведомления установлено значение «Лицо не обнаружено». Когда лицо обнаружено, обновите значение этой переменной.

text = “Лицо не обнаружено”

  1. Информация из реального мира красочна, но в формате BGR. BGR означает синий, зеленый и красный. Это приведет к тому, что приложению машинного зрения придется многое обрабатывать. Поэтому, чтобы уменьшить объем процесса, мы используем формат оттенков серого.

# конвертируем каждый кадр из BGR в оттенки серого GrayImg = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

Передайте код преобразования кадров и формата COLOR_BGR2GRAY в cvtColor(), чтобы изменить каждый кадр видео с цветного на оттенки серого.

  1. Используйте метод обнаруженияMultiScale() для обнаружения лиц. Этот метод использует три параметра в качестве входных данных. Во-первых, это источник изображения GrayImg. Второй параметр — ScaleFactor. Он определяет, насколько необходимо уменьшить размер изображения при каждом соотношении изображений. Используйте значение по умолчанию 1,3 в качестве коэффициента масштабирования. Чем выше коэффициент масштабирования, тем выше скорость выполнения, поскольку необходимо выполнить меньше шагов. Однако вероятность пропустить лица также выше. Третий параметр — minNeighbors. Этот параметр определяет количество соседских функций, которые должен иметь каждый прямоугольник, чтобы сохранить его. Более высокие значения имеют меньшую вероятность ошибочного обнаружения лиц, но также и более высокий уровень пропуска неоднозначных лиц.

# обнаруживаем лица с помощью Haar Cascade face = haar_cascade.detectMultiScale(grayImg, 1.3, 4)

  1. Когда вы обнаружите лицо, вы получите 4 координаты. x представляет координату x, y представляет координату y, w представляет ширину, а h представляет высоту. Обновите текстовое сообщение как «Обнаружено лицо» и нарисуйте прямоугольник на основе этих координат. Цвет прямоугольника — зеленый (в формате BGR), толщина границы прямоугольника — 2 пикселя.

# нарисуйте прямоугольник вокруг лица и обновите текст на Face Detected for (x, y, w, h) в face: text = “Face Detected” cv2.rectangle(img, (x, y), (x + w, у + ч), (0, 255, 0), 2)

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

# отображаем текст на изображении print(text) image = cv2.putText(img, text, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2, cv2.LINE_AA)

  1. Отображает окно с заголовком «Распознавание лиц» и изображением. Используйте метод waitkey(), чтобы отобразить окно на 10 миллисекунд и проверить нажатие клавиши. Если пользователь нажмет клавишу Esc (значение ASCII 27), выйдите из цикла.

# отобразите окно вывода и нажмите клавишу Escape, чтобы выйти из cv2.imshow(“Face Detection”, image) key = cv2.waitKey(10) if key == 27: Break

  1. Наконец, освободите объект камеры из программы Python и закройте все окна.

cam.release() cv2.destroyAllWindows()

Тестовый запуск программы распознавания лиц, написанной на Python.

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

Программирование инструмента обнаружения лиц на Python. Рисунок 3.

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

Программирование инструмента обнаружения лиц на Python. Рисунок 4.

Обрезать и сохранять обнаруженные лица с помощью Python

Чтобы обрезать и сохранить обнаруженное лицо на фотографии, вы можете выполнить следующие действия:

  1. Импортируйте необходимую библиотеку. В большинстве случаев библиотеки Python обычно требуют OpenCV. Итак, убедитесь, что он у вас установлен.
  2. Прочитайте входное изображение, используя cv2.imread() . Укажите полный путь к изображению. Преобразуйте импортированные изображения в оттенки серого.
  3. Инициализируйте объект каскадного классификатора Хаара face_cascade = cv2.CascadeClassifier() для обнаружения лиц. Преобразуйте полный путь к файлу Haar Cascade. Вы можете использовать файл haarcascade_frontalface_alt.xml для обнаружения лиц на изображениях.
  4. Обнаруживайте лица на импортированных изображениях с помощью face_cascade.detectMultiScale(). Он возвращает координаты обнаруженного лица в формате (x,y,w,h).
  5. Перебрать все обнаруженные лица. Найдите изображение (y:y+h, x:x+w), которое является обрезанным лицом, и присвойте ему новую переменную, скажем, лицо. Сохраните обрезанное лицо с помощью cv2.imwrite().
  6. При необходимости покажите обрезанные грани для целей визуализации данных.

Ограничения распознавания лиц с использованием алгоритма Haar Cascade

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

  1. В реальном видео лицо должно лежать прямо и в стандартном поле зрения камеры. Если они расположены слишком далеко, слишком близко или слишком наклонено, алгоритм не сможет идентифицировать объекты.
  2. Это алгоритм определения фронтальной стороны лица, поэтому он не может определить боковой угол лица.
  3. Уровень ложной идентификации очень высок. Он часто идентифицирует область как лицо, хотя лица там нет.
  4. Условия освещения необходимо оптимизировать. Точность алгоритма значительно снизится в условиях чрезмерного или слабого освещения.

Распознавание лиц применяется во многих областях.

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

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *