- Распознавание и обнаружение лиц с использованием Python OpenCV
- Как работает распознавание лиц?
- Шаги по вычислению дескрипторов HOG для распознавания и обнаружения лиц
- Использование библиотеки face_recognition для обнаружения лиц
- Использование Python OpenCV для обнаружения лиц
- Полный код для распознавания лиц на Python
- 1. Первая реализация с использованием библиотеки face_recognition
- 2. Вторая реализация с использованием OpenCV
- Создание модели распознавания лиц с использованием глубокого обучения на языке Python
- Распознавание лиц: потенциальные сферы применения
- Настройка системы: требования к аппаратному и программному обеспечению
- Шаг 1. Настройка аппаратного обеспечения
- Шаг 2. Настройка программного обеспечения
- Внедрение
- Пошаговое руководство
- DEEP LEARNING 🦾
- Пример применения технологии распознавания лиц
- Не смотри в камеру! Пишем свою систему распознавания лиц на Python
- Содержание статьи
- Зачем нужна аутентификация по лицу
- Камера
- Установка SDK
- Запуск в macOS
- Подключаем Python
- Продолжение доступно только участникам
- Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Распознавание и обнаружение лиц с использованием Python OpenCV
Распознавание лиц — это современная технология. И сегодня мы собираемся изучить распознавание и обнаружение лиц с помощью библиотеки Python OpenCV.
Лица на фотографиях и в фильмах. Наш мозг, конечно, быстро распознает человека на фотографиях и видео.
Однако мы хотим, чтобы компьютеры или сотовые телефоны сами определяли эти элементы. Итак, давайте поговорим о двух способах обнаружения лиц на фотографиях.
Как работает распознавание лиц?
Самый популярный способ обнаружения лиц и объектов — использование классификаторов HOG.
HOG — это гистограмма ориентированных градиентов. Суть вопроса заключается в поиске подходящих дескрипторов признаков для изображения, будь то лица или другие объекты.
В 2005 году функции гистограммы ориентированных градиентов (HOG) были реализованы Навнитом Далалом и Биллом Триггсом.
Гистограмма ориентированных градиентов (HOG) — это дескриптор функции, используемый в основном для распознавания объектов при обработке изображений. Дескриптор функции — это представление изображения или фрагмента изображения, которое, извлекая из него ценную информацию, упрощает изображение.
Теория, лежащая в основе дескрипторной гистограммы направленных градиентов, заключается в том, что распределение градиентов интенсивности или направления краев будет определять внешний вид и форму локальных объектов в изображении.
Производные изображения по x и y (градиенты) полезны, потому что из-за внезапного изменения амплитуды величина градиентов высока по краям и углам, и мы знаем, что края и углы содержат намного больше деталей формы объекта, чем плоские области.
Поэтому гистограммы градиентных путей используются как свойства этого дескриптора:
Шаги по вычислению дескрипторов HOG для распознавания и обнаружения лиц
- Изображение делится на блоки 8х8 ячеек, и для каждого блока 8х8 ячеек измеряется гистограмма градиентов.
- Вектор из 9 сегментов (чисел), соответствующих углам от 0 до 180 градусов, в основном представляет собой гистограмму (с шагом 20 градусов).
- Значения этих 64 ячеек (8X8) объединяются в эти 9 сегментов и вставляются кумулятивно.
- Это в принципе ограничивает 64 значения 9 значениями.
Использование библиотеки face_recognition для обнаружения лиц
Существует библиотека face_recognition, в которой есть оптимизированный код для распознавания лиц.
Затем я загрузил изображение из Интернета, на котором было много лиц:
Итак, теперь мы можем загрузить указанный выше файл:
Когда мы запускаем приведенный выше код, мы получаем такой вывод:
Любое цветное изображение состоит из 3-х каналов: синего, зеленого и красного. Это три матрицы, представленные в приведенном выше массиве. Таким образом, цветное изображение 50 × 50 станет матрицей 50x50x3.
Мы можем получить количество лиц на фотографии, которое дает нам 10:
Итак, у нас на фото 10 лиц. Нарисуем на этих гранях прямоугольники, а затем выведем в файл:
Так что это довольно точно. Теперь поговорим о другом методе.
Использование Python OpenCV для обнаружения лиц
Python OpenCV, с другой стороны, использует каскады HAAR для обнаружения своих функций. Это немного медленнее, но очень точно!
Я сделал еще один снимок из интернета:
Затем мы вводим каскадный классификатор для лица, который присутствует в OpenCV:
и это дает нам точно 8.
Итак, теперь давайте нарисуем вокруг лиц прямоугольник:
И вуаля! На этом пока все.
Полный код для распознавания лиц на Python
Полный код вместе со всеми необходимыми файлами изображений и XML можно найти по адресу https://github.com/arkaprabha-majumdar/face_recog
1. Первая реализация с использованием библиотеки face_recognition
2. Вторая реализация с использованием OpenCV
Убедитесь, что пути к файлам верны, чтобы вы могли получить точные результаты, как в наших примерах выше. Если вам нужна помощь, вы всегда можете обратиться к репозиторию Github, упомянутому выше.
Создание модели распознавания лиц с использованием глубокого обучения на языке Python
Адаптировали статью Файзана Шайха о том, как создать модель распознавания лиц и в каких сферах её можно применять.
За последние годы компьютерное зрение набрало популярность и выделилось в отдельное направление. Разработчики создают новые приложения, которыми пользуются по всему миру.
В этом направлении привлекает концепция открытого исходного кода. Даже технологические гиганты готовы делиться новыми открытиями и инновациями со всеми, чтобы технологии не оставались привилегией богатых.
Одна из таких технологий — распознавание лиц. При правильном и этичном использовании эта технология может применяться во многих сферах жизни.
В этой статье покажем, как создать эффективный алгоритм распознавания лиц, используя инструменты с открытым исходным кодом. Прежде чем перейти к этой информации, хотим, чтобы вы подготовились и испытали вдохновение, посмотрев это видео:
Распознавание лиц: потенциальные сферы применения
Приведу несколько потенциальных сфер применения технологии распознавания лиц.
Распознавание лиц в соцсетях. Facebook заменил присвоение тегов изображениям вручную на автоматически генерируемые предложения тегов для каждого изображения, загружаемого на платформу. Facebook использует простой алгоритм распознавания лиц для анализа пикселей на изображении и сравнения его с соответствующими пользователями.
Распознавание лиц в сфере безопасности. Простой пример использования технологии распознавания лиц для защиты личных данных — разблокировка смартфона «по лицу». Такую технологию можно внедрить и в пропускную систему: человек смотрит в камеру, а она определяет, разрешить ему войти или нет.
Распознавание лиц для подсчёта количества людей . Технологию распознавания лиц можно использовать при подсчёте количества людей, посещающих какое-либо мероприятие (например, конференцию или концерт). Вместо того чтобы вручную подсчитывать участников, устанавливаем камеру, которая может захватывать изображения лиц участников и выдавать общее количество посетителей. Это поможет автоматизировать процесс и сэкономить время.
Настройка системы: требования к аппаратному и программному обеспечению
Рассмотрим, как можно использовать технологию распознавания лиц, обратившись к доступным инструментам с открытым исходным кодом.
Я использовал следующие инструменты, которые рекомендую вам:
- Веб-камера (Logitech C920) для построения модели распознавания лиц в реальном времени на ноутбуке Lenovo E470 ThinkPad (Core i5 7th Gen). Вы также можете использовать встроенную камеру своего ноутбука или видеокамеру с любой подходящей системой для анализа видео в режиме реального времени вместо тех, которые использовал я.
- Предпочтительно использовать графический процессор для более быстрой обработки видео.
- Мы использовали операционную систему Ubuntu 18.04 с необходимым ПО.
Прежде чем приступить к построению нашей модели распознавания лиц, разберём эти пункты более подробно.
Шаг 1. Настройка аппаратного обеспечения
Проверьте, правильно ли настроена камера. С Ubuntu это сделать просто: посмотрите, опознано ли устройство операционной системой. Для этого выполните следующие шаги:
1. Прежде чем подключить веб-камеру к ноутбуку, проверьте подключенные видеоустройства, напечатав в командной строке ls /dev/video*. В результате выйдет список всех устройств, подключенных к системе.
2. Подключите веб-камеру и задайте команду снова. Если веб-камера подключена правильно, новое устройство будет отражено в результате выполнения команды.
3. Также можете использовать ПО веб-камеры для проверки её корректной работы. В Ubuntu для этого можно использовать программу «Сheese».
Шаг 2. Настройка программного обеспечения
Шаг 2.1. Установка Python
Код, указанный в этой статье, написан с использованием Python (версия 3.5). Для установки Python рекомендую использовать Anaconda – популярный дистрибутив Python для обработки и анализа данных.
Шаг 2.2. Установка OpenCV
OpenCV – библиотека с открытым кодом, которая предназначена для создания приложений компьютерного зрения. Установка OpenCV производится с помощью pip:
pip3 install opencv-python
Шаг 2.3. Установите face_recognition API
Мы будем использовать face_recognition API, который считается самым простым API для распознавания лиц на Python во всём мире. Для установки используйте:
pip install dlib
pip install face_recognition
Внедрение
После настройки системы переходим к внедрению. Для начала создадим программу, а затем объясним, что сделали.
Пошаговое руководство
Создайте файл face_detector.py и затем скопируйте приведённый ниже код:
Затем запустите этот файл Python, напечатав:
Если всё работает правильно, откроется новое окно с запущенным режимом распознавания лиц в реальном времени.
Подведём итоги и объясним, что сделал наш код:
- Сначала мы указали аппаратное обеспечение, на котором будет производиться анализ видео.
- Далее сделали захват видео в реальном времени – кадр за кадром.
- Затем обработали каждый кадр и извлекли местонахождение всех лиц на изображении.
- В итоге, воспроизвели эти кадры в форме видео вместе с указанием на то, где расположены лица.
DEEP
LEARNING 🦾
- От персептрона до GAN’ов: только практические кейсы
- Добавите более 20 рабочих проектов в портфолио
- Гибкая учебная траектория, поддержка сообщества экспертов, консультации с ментором
Пример применения технологии распознавания лиц
На этом всё самое интересное не заканчивается 😉 Мы сделаем еще одну классную вещь: создадим полноценный пример применения на основе кода, приведённого выше. Внесём небольшие изменения в код, и всё будет готово.
Предположим, что вы хотите создать автоматизированную систему с использованием видеокамеры для отслеживания, где спикер находится в данный момент времени. В зависимости от его положения, система поворачивает камеру так, что спикер всегда остаётся в центре кадра.
Первый шаг — создайте систему, которая идентифицирует человека или людей на видео и фокусируется на местонахождении спикера.
Разберём, как это сделать. В качестве примера я выбрал видео на YouTube с выступлением спикеров конференции «DataHack Summit 2017».
Сначала импортируем необходимые библиотеки:
Затем считываем видео и устанавливаем длину:
После этого создаём файл вывода с необходимым разрешением и скоростью передачи кадров, аналогичной той, что была в файле ввода.
Загружаем изображение спикера в качестве образца для распознания его на видео:
Закончив, запускаем цикл, который будет:
- извлекать кадр из видео;
- находить и идентифицировать все лица;
- создавать новое видео, которое будет сочетать в себе оригинал кадра с указанием местонахождения лица спикера с подписью.
Посмотрим на код, который будет это выполнять:
Код даст вот такой результат:
Не смотри в камеру! Пишем свою систему распознавания лиц на Python
Содержание статьи
Зачем нужна аутентификация по лицу
Существует несколько вариантов аутентификации с помощью биометрии, и каждый из них имеет свои недостатки.
- Идентификация по отпечатку пальца. Об этом способе я писал в статье «Волшебные «пальчики». Как работают механизмы биометрической авторизации по отпечатку пальца». Главный недостаток идентификации по отпечатку пальца — сравнительно небольшая точность. Отпечаток пальца легко подделать, особенно если сканер слабый.
- Отпечаток голоса. Наш голос можно разбить на множество уникальных характеристик. Подробнее об этом ты можешь узнать в статье «Машинный слух. Как работает идентификация человека по его голосу». Но и этот метод весьма неточен: из-за болезни или курения уникальные характеристики голоса могут измениться, и твой девайс тебя уже не узнает.
- Сканеры сетчатки и радужки глаза. Они используют сложные алгоритмы и дорогостоящие громоздкие приборы для сканирования. В среднем надежность таких аппаратов выше, чем у более простых в реализации устройств. Но и стоимость таких сканеров соответствующая: базовые модели продаются по цене от пятнадцати тысяч рублей.
- Идентификация по трехмерному изображению лица. Этот метод становится все популярнее из-за выгодного соотношения цены и качества. 3D-камеры работают в разном диапазоне дальности, поэтому системы распознавания и идентификации лица могут быть незаметными и не требовать никаких действий от человека. Точность анализа поверхности лица высока, так что все зависит только от разрешения камеры.
Камера
Я выбрал недорогую, но при этом функциональную камеру Intel RealSense SR305, которая может снимать и цветное изображение, и глубинное изображение в разрешении 640 на 480 пикселей с частотой до 60 кадров в секунду.
Чтобы получать трехмерное изображение, камера использует маленький инфракрасный излучатель, который проецирует равномерные линии на предметы перед ней. По искривлению этих линий камера понимает, насколько далеко или близко находятся эти объекты.
Так выглядит камера, установленная на треногу
Рабочее расстояние камеры небольшое: излучатель расположен так, что объекты, которые находятся ближе двадцати сантиметров, не будут освещены и, соответственно, не будут просканированы. Слишком далеко расположенные предметы — дальше двух метров — тоже окажутся не видны, поскольку мощность лазера не позволит спроецировать на них инфракрасную сетку.
В комплекте с камерой идет провод USB и инструкция со ссылкой на официальный SDK в репозитории на GitHub.
Установка SDK
В первую очередь нужно установить программное обеспечение, чтобы камера заработала. Пользователи Windows могут просто скачать и установить программу. Если же у тебя Linux, но не Ubuntu 16 или 18, то придется собирать проект самостоятельно.
Для начала скачаем исходный код и подготовим площадку для сборки.
Теперь можно собрать проект, чтобы посмотреть, как работает камера.
Запуск в macOS
Если ты пользователь macOS, для запуска графических программ тебе придется использовать Xcode и соответствующий флаг при конфигурации. Так ты сможешь сгенерировать проект Xcode, чтобы запустить каждую утилиту по отдельности.
Откроется окно Xcode. Выбери необходимую программу, собери проект комбинацией клавиш Command + B и нажми кнопку Build and run.
Окно Xcode с файлами сборки для macOS
Для пробного запуска нам понадобится утилита RealSense Viewer, которая показывает на экране, что видит камера.
Таким будет окно RealSense Viewer, если подключить камеру
Примерно так выглядит трансляция глубины
На GitHub ты можешь найти подробную инструкцию по сборке для Linux и для macOS.
Подключаем Python
Мы попробуем написать свою программу для идентификации по трехмерному изображению лица. И для начала нам нужно подключить библиотеку RealSense, например к Python 3. Пользователям Windows и некоторых дистрибутивов Linux не придется напрягаться — можно взять официальный пакет pyrealsense2 в PyPI.
Остальных же ждет еще одно приключение: необходимо пересобрать весь проект, добавив во флаги враппер для Python.
В папке wrappers/python/ появятся два файла и четыре символические ссылки. Чтобы использовать эти файлы как библиотеку для Python, их необходимо скопировать в папку, из которой ты будешь запускать скрипты.
Так выглядят файлы модуля для Python 3.7
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее