0 просмотров

Распознавание лиц с помощью Python, менее 25 строк кода

Распознавание лиц Python и обнаружение лиц

Бесплатный бонус: Нажмите здесь, чтобы получить мини-руководство по Python Face Detection и OpenCV Examples, в котором показаны практические примеры кода реальных методов компьютерного зрения Python.

OpenCV

OpenCV — самая популярная библиотека для компьютерного зрения. Первоначально написанный на C/C++, теперь он предоставляет привязки для Python.

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

Для чего-то вроде лица у вас может быть 6000 или более классификаторов, и все они должны совпадать, чтобы лицо было обнаружено (конечно, в пределах погрешности). Но в этом и заключается проблема: для распознавания лиц алгоритм начинает с верхнего левого угла изображения и перемещается вниз по небольшим блокам данных, просматривая каждый блок, постоянно спрашивая: «Это лицо? … Это лицо? … Это лицо?» Поскольку в каждом блоке содержится 6000 или более тестов, вам могут потребоваться миллионы вычислений, которые остановят ваш компьютер.

Статья в тему:  Что нужно знать об искусственном интеллекте

Чтобы обойти это, OpenCV использует каскады. Что такое каскад? Лучший ответ можно найти в словаре: «водопад или ряд водопадов».

Подобно серии водопадов, каскад OpenCV разбивает проблему обнаружения лиц на несколько этапов. Для каждого блока выполняется очень грубый и быстрый тест. Если это проходит, он выполняет немного более подробный тест и так далее. Алгоритм может иметь от 30 до 50 таких этапов или каскадов, и он обнаружит лицо только в том случае, если все этапы пройдены.

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

Каскады на практике

Хотя теория может показаться сложной, на практике все довольно просто. Сами каскады — это просто набор файлов XML, содержащих данные OpenCV, используемые для обнаружения объектов.Вы инициализируете свой код желаемым каскадом, а затем он выполняет всю работу за вас.

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

Статья в тему:  Какие зарплаты у программистов искусственного интеллекта

Установка OpenCV

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

Я обнаружил, что установка OpenCV была самой сложной частью задачи. Если вы получаете странные необъяснимые ошибки, это может быть связано с конфликтами библиотек, различиями в 32/64 битах и ​​так далее. Мне было проще просто использовать виртуальную машину Linux и установить OpenCV с нуля.

После завершения установки вы можете проверить, работает ли она, запустив сеанс Python и набрав:

>>> импорт cv2 >>> 

Если вы не получили никаких ошибок, вы можете перейти к следующей части.

Понимание кода

Давайте разберем фактический код, который вы можете скачать из репозитория. Возьмите face_detect.py сценарий, абба.png рис, и haarcascade_frontalface_default.xml.

# Получить предоставленные пользователем значения путь к изображению = система.argv[1] cascPath = система.argv[2] 

Сначала вы передаете образ и каскадные имена в качестве аргументов командной строки. Мы будем использовать изображение ABBA, а также каскад по умолчанию для обнаружения лиц, предоставленный OpenCV.

# Создаем каскад хаара лицоКаскад = cv2.КаскадКлассификатор(cascPath) 

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

# Читаем изображение изображение = cv2.прочитывать(путь к изображению) серый = cv2.cvtColor(изображение, cv2.COLOR_BGR2GRAY) 

Здесь мы читаем изображение и преобразуем его в оттенки серого. Многие операции в OpenCV выполняются в оттенках серого.

# Обнаружение лиц на изображении лица = лицоКаскад.обнаружитьMultiScale( серый, масштаб=1.1, minNeighbours=5, минимальный размер=(30, 30), флаги = cv2.резюме.CV_HAAR_SCALE_IMAGE ) 

Эта функция определяет фактическое лицо и является ключевой частью нашего кода, поэтому давайте пройдемся по параметрам:

  1. Функция detectMultiScale — это общая функция, обнаруживающая объекты. Поскольку мы вызываем его на каскаде лица, это то, что он обнаруживает.
  2. Первый вариант — изображение в градациях серого.
  3. Второй — масштабный фактор. Поскольку некоторые лица могут быть ближе к камере, они будут казаться больше, чем лица сзади. Масштабный коэффициент компенсирует это.
  4. Алгоритм обнаружения использует движущееся окно для обнаружения объектов. minNeighbors определяет, сколько объектов будет обнаружено рядом с текущим, прежде чем он объявит найденное лицо. minSize, тем временем, дает размер каждого окна.
Статья в тему:  Кто отвечает за искусственный интеллект

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

Функция возвращает список прямоугольников, в которых, по ее мнению, она нашла лицо. Далее мы пройдемся по тому месту, где, по его мнению, он что-то нашел.

Распечатать "Найденный  лица!".формат(Лен(лица)) # Нарисуйте прямоугольник вокруг лиц за (Икс, у, ж, час) в лица: cv2.прямоугольник(изображение, (Икс, у), (Икс+ж, у+час), (, 255, ), 2) 

Эта функция возвращает 4 значения: расположение прямоугольника по осям x и y, а также ширину и высоту прямоугольника (w, h).

Мы используем эти значения для рисования прямоугольника с помощью встроенной функции прямоугольника().

cv2.им-шоу(«Найдены лица», изображение) cv2.ключ ожидания() 

В конце мы отображаем изображение и ждем, пока пользователь нажмет клавишу.

Проверка результатов

Давайте проверим на фотографии ABBA:

$ python face_detect.py abba.png haarcascade_frontalface_default.xml 

Пример 1 распознавания лиц Python: Abba

Это сработало. Как насчет еще одного фото:

Пример обнаружения лица Python 2: неправильно

Это… не лицо. Давай попробуем снова. Я изменил параметры и обнаружил, что установка масштабного коэффициента на 1,2 избавляет от неправильного лица.

Пример 2 распознавания лиц Python: исправлено

Что случилось?

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

Статья в тему:  Как мы используем искусственный интеллект для заполнения рабочих мест

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

Окончательный код можно найти здесь.

Расширение до веб-камеры

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

Обновлять: Следующая статья в прямом эфире. Проверьте распознавание лиц в Python с помощью веб-камеры!

Хочу узнать больше?

Бесплатный бонус: Нажмите здесь, чтобы получить мини-руководство по Python Face Detection и OpenCV Examples, в котором показаны практические примеры кода реальных методов компьютерного зрения Python.

Я расскажу об этом и многом другом в моей будущей книге Python для науки и техники, которая в настоящее время находится на Kickstarter. Я также расскажу о машинном обучении для тех, кому это интересно.

Отметить как выполненное

Получите короткий и сладкий Уловка Питона доставляется на ваш почтовый ящик каждые пару дней. Никакого спама никогда. Отписаться в любое время. Куратор: команда Real Python.

Слияние словаря Python Tricks

О Шантну Тивари

Шантну десять лет работал в низкоуровневой/встроенной области. Шантну несколько лет страдал от C/C++, прежде чем открыл для себя Python, и это было похоже на глоток свежего воздуха.

Статья в тему:  Что, если искусственный интеллект возьмет верх

Каждое руководство в Real Python создается командой разработчиков, чтобы оно соответствовало нашим высоким стандартам качества. Члены команды, которые работали над этим учебным пособием:

Олдрен Сантос

Мастер Реальные навыки Python С неограниченным доступом к настоящему Python

Присоединяйтесь к нам и получите доступ к тысячам руководств, практических видеокурсов и сообществу опытных питонистов:

Мастер Реальные навыки Python
С неограниченным доступом к настоящему Python

Присоединяйтесь к нам и получите доступ к тысячам руководств, практических видеокурсов и сообществу опытных питонистов:

Что ты думаешь?

Оцените эту статью:

Какой ваш главный вывод или самая любимая вещь, которую вы узнали? Как вы собираетесь использовать свои новообретенные навыки? Оставьте комментарий ниже и дайте нам знать.

Советы по комментированию: Самые полезные комментарии — это те, которые написаны с целью чему-то научиться у других студентов или помочь им. Получите советы о том, как задавать правильные вопросы, и получите ответы на распространенные вопросы на нашем портале поддержки. Ищете разговор в реальном времени? Посетите чат сообщества Real Python или присоединитесь к следующей интерактивной сессии вопросов и ответов «Часы работы». Удачного питона!

голоса
Рейтинг статьи
Ссылка на основную публикацию
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
Adblock
detector