иллюстрация к статье распознавание лиц с помощью Python и OpenCV

 

В настоящее время технология распознавания лиц становится все более широко используемой. Всем известны примеры использования этой технологии в качестве средства аутентификации или для поиска определенных людей (преступников, например). Но мы сталкиваемся с ней и в повседневной жизни. Когда вы загружаете фотографии, Facebook находит на них ваших друзей и предлагает отметить их. Или Google в своем фотосервисе находит людей на ваших фотографиях и может показать коллекцию с конкретным человеком.

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

Процесс можно разделить на следующие шаги:

  1. Обнаружение лица на изображении (классификатор Хаара, гистограмма ориентированных градиентов, сверточная нейронная сеть и т.д.);
  2. Определение ключевых точек на лице (landmarks);
  3. Поиск уникальных черт лица и запись их в простой и понятной для системы форме (например, построение вектора с 128 измерениями (embedding));
  4. Сравнение полученной информации с базой данных.

Самые популярные библиотеки Python, которые позволяют выполнять эти шаги, это OpenCV и Dlib.

Если говорить о точности систем распознавания лиц, то можно ссылаться на данные Национального института стандартов и технологий (NIST) при Министерстве торговли США. Тестирование систем проводится квалифицированными специалистами на закрытых наборах данных. При оценке алгоритмов распознавания лиц выделяют два типа ошибок:

  • Ошибки первого рода (FAR или FMR) - вероятность того, что система пропустит человека, которого нет в базе данных («неправильно принятый»);
  • Ошибки второго рода (FRR или FNMR) - вероятность того, что система откажет в доступе человеку, который есть в базе данных («неправильно отклоненный»).

На момент написания минимальное количество ошибок второго рода (FNMR) в категории «Дикие фото» (съемка с почти любой стороны, углы поворота лица к камере до 90 градусов, разное освещение) составляет около 3% при вероятности ошибки первого рода (FMR) - 0,001%. При съемке в нормальных условиях («Виза-Граница» в отчетах NIST, аналог съемки в аэропорту, разное освещение, немного разные углы, возможны люди разных национальностей, наиболее близкие к условиям при аутентификации) - 0,42% и 0,0001% соответственно.

Алгоритмы предполагают возможность настройки, позволяющей уменьшить количество ошибок одного вида при росте ошибок другого вида в зависимости от бизнес-модели (что более критично - дать доступ неавторизованному человеку или не дать доступ авторизованному).

Есть вопрос о надежности этого метода аутентификации. Всем известны случаи, когда алгоритм можно было обмануть фотографией или записанным видео пользователя (spoofing). Технологии развиваются в этом направлении стремительно и на данный момент есть множество методов, позволяющих определить, что перед камерой живой человек (liveness detection): анализ мельчайших деталей структуры человеческого лица, отслеживание микродвижений мышц, использование дополнительной инфракрасной камеры, построение 3D-модели лица и т.д.

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

  1. Без участия пользователя. Когда камера (возможно вместе с другими камерами и датчиками) считывает всю необходимую информацию;
  2. С участием пользователя. В этом случае для подтверждения аутентификации пользователю необходимо следовать определенным инструкциям (улыбнуться, повернуть голову).

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

Для этой цели можно использовать класс correlation_tracker() из библиотеки Dlib. В этом случае программа разбивает видео на отдельные кадры для анализа. Если на одном из кадров есть лицо человека, то местоположение передается обработчику, который при анализе следующих кадров будет отслеживать положение объекта. Следует отметить, что распознавание лица будет проводиться на каждом из кадров. Учитывая частоту кадров видео, возможность манипулирования данными сводится к нулю.

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

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