Программирование инструмента обнаружения лиц на Python
Вы когда-нибудь задумывались, как фильтры Snapchat и Messenger подходят вашему лицу? Ваш смартфон использует магию для разблокировки по лицу? Нет, вы просто наблюдаете за работой технологии распознавания лиц.
Что такое компьютерное зрение?
В настоящее время мы живем в эпоху революции искусственного интеллекта, отмеченную впечатляющими достижениями в области глубокого обучения. В течение этого года мы стали свидетелями удивительных достижений приложений искусственного интеллекта, которые удивили весь мир, когда они создавали реалистичные произведения искусства, сдавали экзамены и даже писали код Python для создания веб-сайтов.
Компьютерное зрение — это приложение глубокого обучения, которое лежит в основе этой революции. Это позволяет компьютерам лучше понимать входные визуальные данные, такие как изображения и видеофайлы. Типичные примеры компьютерного зрения включают распознавание лиц, распознавание лиц, оценку позы человека и обнаружение препятствий.
В этой статье давайте узнаем, как создать инструмент распознавания лиц Python с помощью TipsMake.com.com. Сегодня это один из самых популярных языков программирования. У него есть множество реальных приложений, и распознавание лиц — лишь наиболее типичный пример.
Распознавание лиц — это технология искусственного интеллекта, которая может идентифицировать человеческие лица на цифровых фотографиях или видео. В этой статье TipsMake.com вместе с вами научится, как создать инструмент распознавания лиц в реальном времени всего за 25 строк кода с использованием легендарного каскадного алгоритма Хаара.
Что такое Каскад Хаар?
Haar Cascade — это алгоритм обнаружения объектов, предложенный Полом Виолой и Майклом Джонсом для обнаружения лиц на фотографиях и видео. Функция стратификации обучается с использованием нескольких негативных и позитивных фотографий, которые впоследствии можно использовать для идентификации любого объекта или лица. Эти предварительно обученные файлы доступны в репозитории OpenCV GitHub.
При использовании подхода скользящего окна окно фиксированного размера повторяет изображение слева направо, сверху вниз. На каждом этапе окно останавливается и классифицирует, содержит ли область лицо или нет.
OpenCV, инструмент машинного зрения, работает с предварительно обученной каскадной моделью Хаара для классификации объектов. На каждом этапе тестируются пять объектов, два краевых объекта, два линейных объекта и один переплетенный объект из четырех ячеек.
При наблюдении область глаз кажется темнее области щек, а область носа ярче области глаз. Вы можете визуализировать объекты на изображении ниже:
Используя эти объекты и вычисляя пиксели, алгоритм идентифицирует более 100 000 точек данных. Затем вы можете использовать алгоритм Adaboost для повышения точности и удаления ненужных объектов. За множество итераций этот подход сводит к минимуму частоту ошибок и продолжает корректировать объект для достижения приемлемой точности.
Однако метод скользящего окна останавливается, если конкретный тестовый пример не пройден, и он требует больших вычислительных затрат. Для решения этой проблемы можно применить концепцию каскада классификаторов. Вместо применения всех объектов в одном окне этот метод группирует и применяет их поэтапно.
Если окно выходит из строя на первом этапе, процесс его отбрасывает, в противном случае он продолжится. Это приводит к значительному сокращению количества операций, которые необходимо выполнить, и позволяет использовать его для приложений реального времени.
Процесс обнаружения лиц
Вот процесс, которому вам нужно следовать, чтобы создать инструмент распознавания лиц:
- Загрузите каскадный фронтальный алгоритм Хаара
- Инициализация камеры
- Чтение кадров с камеры
- Преобразование изображений в оттенки серого
- Получить координаты лица
- Нарисуйте прямоугольник и поместите соответствующее сообщение
- Показать вывод
Что такое OpenCV?
OpenCV — это библиотека машинного зрения и машинного обучения с открытым исходным кодом. Он имеет более 2500 алгоритмов, оптимизированных для различных приложений. Сюда входит распознавание, обнаружение лиц/объектов, классификация.
Многие крупные компании, такие как Google, IBM и даже Yahoo, использовали OpenCV в своих приложениях. Однако прежде чем начать, вам также следует подумать об обеспечении безопасности ваших личных данных.
Чтобы установить OpenCV в Python, используйте следующую команду:
pip установить opencv-python
Программирование инструмента обнаружения лиц на Python
Чтобы запрограммировать детектор лиц на Python, вам необходимо выполнить следующие шаги:
- Загрузите XML-файл Haar Cascade Frontal Face Default по умолчанию и поместите его в то же место, где находится ваша программа Python.
- Импортируйте библиотеку OpenCV:
# импорт необходимых библиотек import cv2
- Сохраните файл алгоритма Haar Cascade Frontal Face для удобства использования.
# загружаем файл алгоритма случая хаара в переменную alg = “haarcascade_frontalface_default.xml”
- Используйте класс CascadeClassifier для загрузки XML-файла в OpenCV:
# передача алгоритма OpenCV haar_cascade = cv2.CascadeClassifier(alg)
- Получить видео с камеры. Передайте значение 0 функции VideoCapture(), чтобы использовать основную камеру. Если у вас больше камер, вы можете использовать следующие цифры, например 1, 2., для обозначения камер.
# захват видео с камеры cam = cv2.VideoCapture(0)
- Настройте бесконечный цикл для чтения каждого кадра ввода камеры. Функция read() возвращает два параметра. Первое значение является логическим, указывающим на второй успех операции. Второй параметр содержит фактическую структуру, с которой вы будете работать. Сохраните этот кадр в переменной img.
пока True: _, img = cam.read()
- По умолчанию для текста уведомления установлено значение «Лицо не обнаружено». Когда лицо обнаружено, обновите значение этой переменной.
text = “Лицо не обнаружено”
- Информация из реального мира красочна, но в формате BGR. BGR означает синий, зеленый и красный. Это приведет к тому, что приложению машинного зрения придется многое обрабатывать. Поэтому, чтобы уменьшить объем процесса, мы используем формат оттенков серого.
# конвертируем каждый кадр из BGR в оттенки серого GrayImg = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
Передайте код преобразования кадров и формата COLOR_BGR2GRAY в cvtColor(), чтобы изменить каждый кадр видео с цветного на оттенки серого.
- Используйте метод обнаруженияMultiScale() для обнаружения лиц. Этот метод использует три параметра в качестве входных данных. Во-первых, это источник изображения GrayImg. Второй параметр — ScaleFactor. Он определяет, насколько необходимо уменьшить размер изображения при каждом соотношении изображений. Используйте значение по умолчанию 1,3 в качестве коэффициента масштабирования. Чем выше коэффициент масштабирования, тем выше скорость выполнения, поскольку необходимо выполнить меньше шагов. Однако вероятность пропустить лица также выше. Третий параметр — minNeighbors. Этот параметр определяет количество соседских функций, которые должен иметь каждый прямоугольник, чтобы сохранить его. Более высокие значения имеют меньшую вероятность ошибочного обнаружения лиц, но также и более высокий уровень пропуска неоднозначных лиц.
# обнаруживаем лица с помощью Haar Cascade face = haar_cascade.detectMultiScale(grayImg, 1.3, 4)
- Когда вы обнаружите лицо, вы получите 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)
- Возможность печати текста на панели вывода. Отобразить текст на экране, используя захваченный кадр в качестве источника, текст, захваченный в тексте выше, стиль шрифта 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)
- Отображает окно с заголовком «Распознавание лиц» и изображением. Используйте метод waitkey(), чтобы отобразить окно на 10 миллисекунд и проверить нажатие клавиши. Если пользователь нажмет клавишу Esc (значение ASCII 27), выйдите из цикла.
# отобразите окно вывода и нажмите клавишу Escape, чтобы выйти из cv2.imshow(“Face Detection”, image) key = cv2.waitKey(10) if key == 27: Break
- Наконец, освободите объект камеры из программы Python и закройте все окна.
cam.release() cv2.destroyAllWindows()
Тестовый запуск программы распознавания лиц, написанной на Python.
Когда лицо окажется в кадре, вы увидите такой результат:
Когда лица нет, вы получите такое сообщение:
Обрезать и сохранять обнаруженные лица с помощью Python
Чтобы обрезать и сохранить обнаруженное лицо на фотографии, вы можете выполнить следующие действия:
- Импортируйте необходимую библиотеку. В большинстве случаев библиотеки Python обычно требуют OpenCV. Итак, убедитесь, что он у вас установлен.
- Прочитайте входное изображение, используя cv2.imread() . Укажите полный путь к изображению. Преобразуйте импортированные изображения в оттенки серого.
- Инициализируйте объект каскадного классификатора Хаара face_cascade = cv2.CascadeClassifier() для обнаружения лиц. Преобразуйте полный путь к файлу Haar Cascade. Вы можете использовать файл haarcascade_frontalface_alt.xml для обнаружения лиц на изображениях.
- Обнаруживайте лица на импортированных изображениях с помощью face_cascade.detectMultiScale(). Он возвращает координаты обнаруженного лица в формате (x,y,w,h).
- Перебрать все обнаруженные лица. Найдите изображение (y:y+h, x:x+w), которое является обрезанным лицом, и присвойте ему новую переменную, скажем, лицо. Сохраните обрезанное лицо с помощью cv2.imwrite().
- При необходимости покажите обрезанные грани для целей визуализации данных.
Ограничения распознавания лиц с использованием алгоритма Haar Cascade
Хотя этот алгоритм очень легкий, имеет небольшой размер выборки и работает быстро, он имеет следующие недостатки:
- В реальном видео лицо должно лежать прямо и в стандартном поле зрения камеры. Если они расположены слишком далеко, слишком близко или слишком наклонено, алгоритм не сможет идентифицировать объекты.
- Это алгоритм определения фронтальной стороны лица, поэтому он не может определить боковой угол лица.
- Уровень ложной идентификации очень высок. Он часто идентифицирует область как лицо, хотя лица там нет.
- Условия освещения необходимо оптимизировать. Точность алгоритма значительно снизится в условиях чрезмерного или слабого освещения.
Распознавание лиц применяется во многих областях.
В настоящее время технология распознавания лиц применяется во многих различных областях. Вы можете использовать его для разблокировки смартфона, аутентификации дома, автомобиля и аэропорта. Распознавание лиц теперь также используется в системах камер наблюдения, фильтрах социальных сетей и т. д. Технология автоматического отслеживания лиц в киноиндустрии.