Введение

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

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

Демистификация распознавания лиц

Бьюсь об заклад, у кого-то могут возникнуть вопросы после прочтения вступления выше, один из них, вероятно, скажет: «Отлично! Теперь, как это реализовать?». Прежде всего, давайте рассмотрим некоторые шаги для достижения таких целей. Чтобы реализовать полное распознавание лиц, нам нужно разделить это на 3 основных этапа:

  • Распознавание лиц (о чем эта статья)
  • Глубокая нейронная сеть
  • Метод классификации результатов

Диаграмма ниже, мы надеемся, поможет вам понять, как каждый шаг соответствует чему:

Как сказано выше, распознавание лиц стоит на первом месте. Это может быть довольно очевидным, однако вы можете сбить с толку в отношении «В чем разница между Распознаванием лици Распознаванием лиц ?».

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

Ссылаясь на диаграмму 1, распознавание лиц состоит из двух этапов: Глубокая нейронная сеть и Классификация. С другой стороны, объем этой статьи касается только части обнаружения лиц.

С человеческой точки зрения различие между одним лицом и другим довольно очевидно, но не для компьютеров. Если бы компьютерам было предоставлено изображение, все, что они увидят, — это набор 0 и 1 (двоичный); они не понимают, почему этот массив из 0 и 1 является лицом, а остальные — нет. Следовательно, мы должны обучать процесс распознавания лиц изображениям с лицами на них, чтобы они переводили двоичный код, который они видят, как распознавание.

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

Вот тут и приходит на помощь Google MLKit. В пакете Google MLKit есть функция Библиотека распознавания лиц. Этот инструмент помогает нам упростить процесс распознавания лиц, просто делая это за нас. Нам нужно снабдить его изображением (или изображениями) и попросить библиотеку предоставить нам, где лицо/лица расположены на изображении. Затем он позволяет нам обрезать эту конкретную область и дает нам старые добрые данные о лицах, которые мы можем использовать для следующего шага.

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

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

Наша реализация для распознавания лиц использует библиотеку MLKit от Google. Эта библиотека позволяет нам обнаруживать лица на изображении, а также определять несколько параметров, таких как:

  • Ключевая черта лица
  • Контур лица
  • См. Выражения, такие как улыбка и открытые глаза
  • Угол поворота лица
  • Ограничивающая рамка, в которой находится лицо на изображении

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

Нашей целью является только обнаружение любого лица в кадре видео / на одном изображении и извлечение требуемого изображения лица в отдельное обработанное изображение, которое можно использовать для работы реализации Deep Neural Network. Каждая реализация DNN будет иметь разные требования, и мы должны учитывать, какой алгоритм мы используем для извлечения изображения.

По умолчанию библиотека распознавания лиц позволяет нам устанавливать различные параметры распознавания лиц. Поскольку нам нужны только данные Bitmap Face размером n x n, мы будем использовать минимальные настройки, которые не обнаруживают ничего, кроме ограничивающей рамки.

Чтобы добавить поддержку MLKit Face Detection в проект Android, вы должны добавить эту зависимость в файл build.gradle на уровне приложения:

implementation 'com.google.mlkit:face-detection:16.1.2'

Большой! после этого нам нужно настроить и запустить клиент FaceDetector.

В приведенном ниже коде показано, как мы реализуем клиент faceDetector для распознавания лиц:

Этот клиент faceDetector является основным компонентом нашего процесса. Вы можете сохранить эту переменную как инъекционный синглтон или новый экземпляр в своем фрагменте/активности. Ваш звонок.

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

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

Этот код ниже показывает, как мы реализуем преобразование нашего Bitmap в NV21 ByteArray, который затем мы конвертируем в InputImage, который мы использовали для предоставления клиента faceDetector, который мы настроили ранее:

Что касается того, как работает расширение, вы можете увидеть код ниже:

Весь процесс распознавания лиц можно увидеть на блок-схеме ниже:

Пошаговое объяснение графика выше:

  1. Во-первых, нам нужно подготовить источник изображения. это можно получить с камеры или локального изображения. В Android для этого шага требуется получить любое изображение в формате Bitmap.
  2. Затем мы переходим к предварительной обработке изображения. Это необязательный шаг. По умолчанию большинство растровых изображений используют формат ARGB-8888. Этот формат подходит для использования с функцией обнаружения лиц MLKit, но мы можем сэкономить дополнительное время обработки, преобразовав его в формат NV21 ByteArray, что значительно повысит скорость обнаружения. Затем этот Bitmap или ByteArray должен быть преобразован в переменную InputImage, которую можно вставить в faceDetector.
  3. Шаг MLKit Face Detector состоит из вставки InputImage в faceDetector. Мы также должны подключить addOnSuccessListener.
  4. Если изображения содержат какое-либо лицо, будет вызван метод onSuccessListener, который вернет объект Face, содержащий упомянутую выше информацию, такую ​​как BoundingBox, Landmark и т. д., но фактическое содержание будет соответствовать установленным нами настройкам. ранее, если мы установили детектор на LANDMARK_MODE_NONE, ориентир не будет получен.
  5. Следующий шаг, если мы предполагаем, что любое лицо обнаружено на исходном изображении, состоит в том, чтобы извлечь только лицо в определенное растровое изображение размера n x n, которое мы используем для модели DNN. Этого можно добиться с помощью BoundingBox, который находится внутри объекта Face, который мы получили ранее. Этот BoundingBox будет содержать координату, по которой каждая точка прямоугольника, содержащего лицо, размещается на исходном изображении. На изображении ниже показано, что такое BoundingBox и где оно находится на изображении, а также как мы разрезаем изображение лица, которое будет передано в модель DNN.

Урок выучен

Вот следующие моменты, которые вам необходимо знать о процессе распознавания лиц:

  • Мы можем разбить процесс распознавания лиц на 3 основных этапа: распознавание лиц, глубокая нейронная сеть и классификация.
  • Мы видели, что Google MLKit помогает нам легко выполнять распознавание лиц для извлечения данных о лицах. Вы можете использовать извлеченные данные о лицах для подачи в Deep Neural Network.

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