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

Люди выполняют распознавание лиц автоматически и делают это практически без усилий.

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

Обратите внимание, что распознавание лиц отличается от распознавания лиц:

  • Распознавание лиц. Его цель — найти лицо на изображении, что означает местоположение и размер лица. Он извлекает лицо и используется алгоритмом распознавания лиц. У него есть единственная задача найти лицо на изображении.
  • Распознавание лиц. Это технология, позволяющая идентифицировать или подтвердить человека по изображению или видео с цифровой камеры. Это делается с уже извлеченными изображениями лиц, обрезанными, измененными по размеру и обычно преобразованными в оттенки серого. Алгоритм распознавания лиц отвечает за поиск характеристик, которые лучше всего описывают изображение.

Цель:

Цель этого поста — найти лицо и распознать человека на этом изображении.

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

  1. Создайте набор данных
  2. Выполнить распознавание лиц
  3. Извлечь встраивание лица
  4. Выполнить обучение
  5. распознавание лица

Распознавание лиц

Обнаружение лиц является важным этапом при выполнении распознавания лиц. Каскад Хаара — это подход, основанный на машинном обучении, для обнаружения объектов. Здесь для обучения каскадной функции используется множество изображений. Он был предложен Полом Виолой и Майклом Джонсом в 2001 году и считается самым мощным методом обнаружения объектов.

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

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

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

Давайте рассмотрим блок-схему каскада Хаара:

Во-первых, нам нужно загрузить необходимые классификаторы XML. Затем загрузите наше входное изображение (или видео) в оттенках серого.

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

Теперь находим лица на изображении. Если лица найдены, он возвращает позиции обнаруженных лиц в виде Rect(x,y,w,h). Как только мы получим эти местоположения, мы можем создать область интереса для лица и применить обнаружение глаз к этой области интереса.

faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
    img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
    roi_gray = gray[y:y+h, x:x+w]
    roi_color = img[y:y+h, x:x+w]
    eyes = eye_cascade.detectMultiScale(roi_gray)
    for (ex,ey,ew,eh) in eyes:
        cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)

Результат будет

Распознавание лиц

Следующий шаг — распознавание лиц. Существует несколько алгоритмов распознавания лиц, но сейчас мы делаем это с помощью OpenFace.

Хотя OpenFace существует всего пару лет, он получил широкое распространение, поскольку предлагает уровень точности, аналогичный моделям распознавания лиц, используемым в современных частных системах, таких как FaceNet от Google или DeepFace от Facebook.

С точки зрения высокого уровня, OpenFace использует Torch, научную вычислительную среду для обучения в автономном режиме, что означает, что OpenFace делает это только один раз, и пользователю не нужно пачкать руки, обучая сотни тысяч изображений самостоятельно. Затем эти изображения отправляются в нейронную сеть для извлечения признаков с использованием модели FaceNet от Google.

Смысл обучения нейронной сети на всех этих изображениях заранее заключается в том, что на мобильных устройствах или в любом другом сценарии реального времени невозможно обучить 500 000 изображений для извлечения необходимых вложений лиц. Теперь помните, что эта часть конвейера выполняется только один раз, потому что OpenFace обучает эти изображения для создания 128 вложений лиц, которые представляют общее лицо, которое будет позже использоваться в части конвейера Python для обучения на лету. Затем вместо сопоставления изображения в многомерном пространстве вы используете только низкоразмерные данные, что помогает сделать эту модель быстрой.

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

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

Плюсы:

Повышенная безопасность

Быстро и точно

Нет связи

Требуется разовое обучение

Минусы:

Высокие затраты на внедрение

Хранилище данных

Изменения внешнего вида и ракурса камеры

Ссылка:

https://blog.algorithmia.com/understanding-facial-recognition-openface/

https://cmusatyalab.github.io/openface/

https://www.cv-foundation.org/openaccess/content_cvpr_2015/app/1A_089.pdf