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

Оглавление

  1. Что вообще такое распознавание лиц?

  2. Легенда про черно-белые изображения

  3. Обнаружение лица

  4. Получение геометрий лица

  5. Сам процесс распознавания

  6. Как устроен FaceID?

  7. Как работает TrueDeph?

Введение

Как я и обещал в своей первой статье я выпускаю новую статью. На Хабре уже есть две статьи на данную тему - тык, тык, которые тоже неплохо оценивают данную статью, но они используют много формул научных терминов и т.д. В своей статье я хотел рассказать про систему распознавания лиц от лица обычного разработчика в наипростой для рядового человека форме, отсюда и название. Но не пугайтесь названия, тут будут описываться не такие уж и простые вещи. Да я и не думаю, что чайники будут интересоваться такими темами ????. Само название было вдохновлено названием книги Стефана Дэвиса: C++ для чайников.

Сама книга
Сама книга

Так как данная тема слишком большая, она будет разделена на 3 части.

  1. Основа систем распознавания лиц и как устроен FaceID.

  2. Роль нейросетей в системах распознавания лиц.

  3. Проблемы и перспективы развития систем распознавания лиц.

Для чего же вообще нужно распознавание лиц?

Конечно же, перед объяснением всего стоит понять, а зачем оно нам надо?

Распознавание лиц нужно для того, чтобы узнать, кто перед нами. Это может быть полезно в разных ситуациях, например:

  • Когда мы хотим наложить какую-нибудь маску на себя в Snapchat или Instagram.

  • Когда мы хотим открыть свой телефон или компьютер с помощью лица, а не пароля.

  • Когда мы хотим найти своих друзей или знаменитостей на фотографиях или видео.

  • Когда мы хотим проверить, что человек, который показывает нам свой паспорт или водительское удостоверение, действительно тот, за кого себя выдаёт.

  • Когда мы хотим следить за безопасностью и преступностью, определяя лица подозреваемых или преступников.

И ещё во многих других специфических областях и нуждах.

Что вообще такое распознавание лиц?

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

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

Как компьютер распознает лица?

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

Легенда про черно-белые изображения

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

Мораль сей басни такова: быть эмо всегда переводите свои изображения в черно-белый цвет перед распознаванием.

Конечно, назревает вопрос: зачем?

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

Кто есть кто?
Кто есть кто?

Обнаружения лица

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

Хаар-признаки - были разработаны в 2001 году Полом Виолой. Эти признаки помогают узнать, как выглядит лицо, по его частям, например, по глазам, носу, рту и т.д. Они делают это с помощью прямоугольников разных цветов, которые кладут на картинку с лицом. С помощью этих признаков можно понять, как светло или темно внутри этих прямоугольников и сравнивают их между собой. Так они могут понять, где на лице есть переходы от светлого к темному или наоборот. Хаар-признаки бывают разных видов, в зависимости от количества и расположения прямоугольных областей. Самые простые — это 2-прямоугольные признаки, которые состоят из двух общих областей. Также есть 3-прямоугольные и 4-прямоугольные признаки, которые состоят из трех или четырех областей соответственно. Кроме того, есть наклонные признаки Хаара, которые имеют угол 45 градусов. Это позволяет увеличить покрытость пространства признаков и улучшить качество распознавания. Эти признаки имеют ряд преимуществ, таких как высокая скорость вычисления, низкая чувствительность к изменению освещения и возможность определения объектов разных масштабов. Однако они также имеют недостатки, такие как низкая точность при повороте или деформации объектов, сложность выбора оптимального набора признаков и необходимость большого объема данных для обучения.

Хаaр фильтры
Хаaр фильтры
Как фильтры накладываются на лицо
Как фильтры накладываются на лицо

Данные признаки хранятся в файлах, как правило это haar-cascade.xml файлы, в которых описана геометрия лица.

Пример haar-cascade.xml файла

<?xml version="1.0"?>
<opencv_storage>
<cascade type_id="opencv-cascade-classifier"><stageType>BOOST</stageType>
  <featureType>HAAR</featureType>
  <height>20</height>
  <width>20</width>
  <stageParams>
    <maxWeakCount>93</maxWeakCount></stageParams>
  <featureParams>
    <maxCatCount>0</maxCatCount></featureParams>
  <stageNum>24</stageNum>
  <stages>
    <_>
      <maxWeakCount>6</maxWeakCount>
      <stageThreshold>-1.4562760591506958e+00</stageThreshold>
      <weakClassifiers>
        <_>
          <internalNodes>
            0 -1 0 1.2963959574699402e-01</internalNodes>
          <leafValues>
            -7.7304208278656006e-01 6.8350148200988770e-01</leafValues></_>
        <_>
          <internalNodes>
            0 -1 1 -4.6326808631420135e-02</internalNodes>
          <leafValues>
            5.7352751493453979e-01 -4.9097689986228943e-01</leafValues></_>
        <_>
          <internalNodes>
            0 -1 2 -1.6173090785741806e-02</internalNodes>
          <leafValues>
            6.0254341363906860e-01 -3.1610709428787231e-01</leafValues></_>
        <_>
          <internalNodes>
            0 -1 3 -4.5828841626644135e-02</internalNodes>
          <leafValues>
            6.4177548885345459e-01 -1.5545040369033813e-01</leafValues></_>
        <_>
          <internalNodes>
            0 -1 4 -5.3759619593620300e-02</internalNodes>
          <leafValues>
            5.4219317436218262e-01 -2.0480829477310181e-01</leafValues></_>
        <_>
          <internalNodes>
            0 -1 5 3.4171190112829208e-02</internalNodes>
          <leafValues>
            -2.3388190567493439e-01 4.8410901427268982e-01</leafValues></_></weakClassifiers></_>
    <_>
</stages>

Тут только малая часть данных. Сами файлы очень большие и состоят приблизительно из 12-100 тысяч строк.

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

Вариант по лучше - это нейросети, но про них мы подробно будем говорить во второй части статьи.

Получение геометрий лица

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

Визуализация данных, которые мы берем
Визуализация данных, которые мы берем

На данной картинке мы видим точки интереса(Interest points) слева и линии опоры(Landmarks) справа.

Поговорим про них подробно:

Точки интереса(Interest points) — это части лица, которые легко увидеть и запомнить, например, уголки глаз, кончик носа, края губ и т.д. Для каждого лица можно выбрать от 68 до 194 таких точек. Эти точки помогают сделать уникальный код (вектор признаков) для каждого лица, который, условно говоря, служит его паспортом в системе распознавания лиц.

Линии опоры(Landmarks) — это линии на лице, которые связывают точки и показывают его форму и расположение. Они могут быть, например, уголками глаз, носа, рта и т.д. Landmarks помогают измерять лицо, то есть сколько сантиметров от одной части лица до другой. Линии опоры также помогают повернуть и увеличить лицо, чтобы оно было в одинаковом положении и размере. Линии опоры можно находить разными способами, например, с помощью нейросетей или алгоритмов (например, Хаар-признаки).

Вектор признаков(Vector feature) — это координаты векторов, которые описывают, как выглядит лицо. Данные координаты могут описывать разные части лица, например, глаза, уши, нос, рот и т.д. Координаты помогают узнать при сравнении, какие лица похожи или разные.

Еще один пример с точками интереса
Еще один пример с точками интереса

Сохранение полученных данных

После того, как мы нашли лицо, распознали его и получили вектор признаков, мы должы, конечно же, сохранить полученные данные. Вы можете сохранять как изображения в формате (PNG, JPG, JPEG) так и векторы признаков в JSON либо других файлов, в зависимости от логики вашего кода.

Пример сохранения векторов признаков в JSON

{
  "faces": [
    {
      "name": "Alice",
      "vector": [-0.096, 0.123, 0.045, ..., 0.067]
    },
    {
      "name": "Bob",
      "vector": [0.087, -0.134, -0.056, ..., -0.078]
    },
    {
      "name": "Charlie",
      "vector": [-0.034, 0.098, 0.012, ..., 0.055]
    }
  ]
}

Сам процесс распознавания

Итак, наконец, после того, как мы перевели картинку в черно-белый цвет, определили, где находится лицо на изображении, получили саму геометрию лица, сохранили нужные нам лица, мы можем начинать сам процесс распознавания. Когда мы «сканируем» новое лицо, получаем его геометрию, мы сравниваем полученную геометрию с тем, что имеем мы. Сам процесс сравнения зависит уже от вашего алгоритма и логики приложения.

Визуализация процесса сравнения. Источник NetchLab
Визуализация процесса сравнения. Источник NetchLab

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

Как устроен FaceID?

Конечно же при упоминании распознавании лиц многие упомянут FaceID. И вправду, яблочная компания хорошо постаралась делая свою систему распознавания лиц. Но как же все таки работает FaceID. Заранее хотелось бы сказать, что вся дальнейшая информация является всего лишь предположениями, так как исходный код самого FaceID закрыт и мы можем лишь предполагать как он работает. Но как бы то ни было, нам стоит разобраться в нем по подробнее, как хороший пример распознавания лиц.

Face ID использует инфракрасную камеру TrueDeph, которая видит лицо в трехмерном виде и сравнивает его с тем, что он регистрировал ранее. Face ID работает даже в темноте, потому что камера использует инфракрасный свет. Face ID может распознавать лицо, даже если оно меняется со временем, например, растет борода или меняется прическа

Как работает TrueDeph?

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

Пример работы TrueDeph
Пример работы TrueDeph
Как строится 3D модель лица
Как строится 3D модель лица

В данном случае используется нейросеть Apple для обучения и распознавания лиц, и все данные лица хранятся в защищенном модуле Secure Enclave внутри процессора iPhone.

Заключение

Статья получилась достаточно большой, но даже так в ней подробно не описаны методы обучения, использование ложных изображений для обучения, datasets и многое другое, что будет описано во 2-ой части статьи.

Комментарии (2)


  1. MonteDegro
    04.07.2023 07:15
    +2

    Распознавание лиц для чайников

    Дожили, уже в чайники системы слежки устанавливают(


    1. Or1onn Автор
      04.07.2023 07:15

      :)