Как работает распознавание лиц

Как работает распознавание лиц

Чёрно-белые прямоугольники и простая математика

У вас в телефоне наверняка уже есть технология распознавания лиц. Ещё она есть в городских камерах наблюдения, на заводах и военных объектах, в лабораториях и даже в автомобилях. Посмотрим, как они устроены. 

Из чего состоит распознавание лиц

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

  1. Оптическая камера или лидар, чтобы получить изображение или объёмную карту лица.
  2. База данных с заранее проанализированными лицами.
  3. Алгоритм, который находит в кадре лицо.
  4. Алгоритм приведения лица к какому-то набору векторов.
  5. Алгоритм сравнения векторов с эталонами.

Теперь посмотрим детали.

Получаем изображение с камеры

Это самая простая часть, которая может даже не зависеть от алгоритма распознавания лиц. Задача компьютера — взять видеопоток с камеры, в реальном времени нарезать его на несколько кадров и эти кадры отправить в алгоритм. 

Некоторые алгоритмы используют плоское изображение с камеры. Другие используют лидары — это когда лазерная пушка быстро-быстро стреляет лазером во все стороны и измеряет скорость возвращения лучей. Получается не слишком точная, но в некоторой степени объёмная картинка. Часто её совмещают с изображением основной камеры, чтобы убедиться, что перед нами действительно человек, а не его фотография. 

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

Некоторые алгоритмы вычисляют трёхмерную модель на основании поворота головы. Прямо говорят: посмотрите налево, посмотрите направо, приблизьтесь, отдалитесь. Так они пытаются построить более точную объёмную модель лица. Всё это — для безопасности.

Как работает распознавание лиц
Пример работы LIDAR-сканера на Айфоне. Это не система распознавания лиц, просто для понимания степени точности скана

Находим лицо в кадре

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

Как работает распознавание лиц

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

Как работает распознавание лиц

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

Как работает распознавание лиц

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

Как работает распознавание лиц
Когда есть алгоритм и достаточно быстрый процессор, находить лица — дело техники. Такие алгоритмы известны, их много, они работают даже на маломощных Raspberry Pi

Строим модель по ключевым точкам

После того как алгоритм нашёл лицо, он строит его цифровую модель. Для этого он:

  • Расставляет точки в ключевых местах: нос, рот, глаза, брови и так далее.
  • Считает расстояние между точками.
  • По этим расстояниям строит цифровую карту или вектор. Про векторы поговорим ниже.

Как работает распознавание лиц
Ключевые точки, которые расставил алгоритм

От того, как будут расставлены эти точки, зависит точность распознавания, поэтому каждая коммерческая компания держит свой метод в секрете. Чем больше точек — тем выше точность, но минимально нужно проставить 68 точек. Если точек будет меньше, алгоритм может не сработать.

Считаем вектор и сравниваем с базой

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

Если алгоритм работает в режиме «выучить новое лицо», то он записывает полученный вектор в базу данных с каким-то именем или идентификатором. Условно говоря, в базе это выглядит так: 

«Вот здоровенный вектор из 900 чисел — я назову его Мишей»

Как работает распознавание лиц
Распознанные точки на лице и векторы, которые будет считать алгоритм

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

На картинке видно, что синий неизвестный вектор, который мы хотим распознать, ближе всех находится к Мише. Если расстояние между векторами будет достаточно маленьким, алгоритм скажет, что человек в кадре — это Миша.

Как работает распознавание лиц

У каждого алгоритма свои коэффициенты совпадения: где-то допустимо совпадение только на 98% и выше — тогда алгоритм не будет вас узнавать, если вы в маске или вокруг плохое освещение. Есть алгоритмы, где совпадение может быть меньше — тогда это менее безопасно, но лучше работает. Есть алгоритмы, которые в одном месте требуют точного совпадения, а в других — менее точного (например, глаза должны совпасть точно, а рот может двигаться). Это уже нюансы настройки и подкрутки конкретного алгоритма. 

Уточнение векторов и самообучение

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

Что дальше

Теперь, когда мы знаем, как работает эта технология, попробуем повторить это сами — сделаем систему распознавания лиц на Python.

Код и описание проекта:

LeAnne Chan

Текст:

Михаил Полянин

Редактор:

Максим Ильяхов

Художник:

Алексей Сухов

Корректор:

Ирина Михеева

Вёрстка:

Кирилл Климентьев

Соцсети:

Виталий Вебер

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
Сжатие без потерь: как это работает
Сжатие без потерь: как это работает

Когда копия не отличается от оригинала.

easy
Собираем сайт-портфолио для фотографа

Используем CSS Grid.

easy
Если вы программист, возьмите денег
Если вы программист, возьмите денег

Обзор зарплат разработчиков весной 2022 года

easy
«Никому не нужны высокомерные гении»
«Никому не нужны высокомерные гении»

ИТ-рекрутер об ошибках программистов на собеседовании.

easy
Что такое классы в объектно-ориентированном программировании

Глубокое погружение в самую сложную и неинтуитивную область программирования.

medium
Зачем нужна командная строка в современных компьютерах

Разбираемся на Маках и Винде.

medium
Зачем нужен нормализатор CSS
Зачем нужен нормализатор CSS

Хорошая практика веб-разработчиков.

medium
NFT — новые модные токены. Зачем они нужны и не развод ли это?
NFT — новые модные токены. Зачем они нужны и не развод ли это?

Объясняем на Аллегровой.

easy
Магический квадрат, который знает о вас больше, чем нужно
Магический квадрат, который знает о вас больше, чем нужно

Даже числа, которые вы выбираете сами

medium
Как устроены электронные чернила
Как устроены электронные чернила

Разбираем технологию e-ink

easy
medium