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

Чтобы представить пользовательский случай этого обнаружения движения лица, мы будем использовать вариант использования под названием Обнаружение живости, это функциональная функция для обнаружения и проверки того, действительно ли пользователь является настоящим пользователем или нет, чтобы Чтобы проверить это, есть несколько способов сделать это, например:

  1. Загрузить записанное видео на сервер
  2. Видеозвонок между пользователем и администратором
  3. Используйте ИИ для проверки и автоматизации обнаружения жизнеспособности

Итак, чтобы решить эту проблему, здесь мы будем использовать ML Kit от Firebase.

Технологии, которые мы будем использовать

ML Vision - ML Kit от Firebase

Модель ИИ, которую мы будем использовать

ML Vision - Модель лица

Настройка Firebase

Чтобы получить одну из этих моделей ИИ, нам нужно создать проект Firebase здесь https://firebase.google.com/.
После входа в систему вам необходимо создать проект Firebase как показано ниже.

Затем щелкните раздел «Машинное обучение» слева, так как здесь мы будем выполнять обнаружение живого, поэтому мы будем использовать модель под названием Распознавание лиц.

После того, как мы выбрали модели, вводим некоторую информацию о нашем проекте и загружаем наш google-services.json. мы можем перейти к созданию нашего приложения в Android Studio.

Итак, прежде чем мы продолжим, давайте сначала разберемся с базовыми знаниями MLKit Firebase - обнаружением лиц.

Базовые знания

  1. Интегрируйте SDK
    Импортируйте зависимости MLKit в проект
  2. Предоставление входных данных
    Входными данными будет кадр изображения, снятый с камеры, который будет обрабатываться на устройстве локально и независимо. (Обработка на устройстве)
  3. Применение машинного обучения к данным
    Данные, полученные с камеры устройства, будут обрабатываться моделью машинного обучения ИИ, которая была встроена в приложение при его создании.

Внутри этого MLKit (Machine Learning Kit) есть и другие функции, а именно:

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

Ориентация лица

Следующие термины описывают угол, под которым лицо ориентировано по отношению к камере:

  • Эйлера X: грань с положительным углом Эйлера X обращена вверх.
  • Эйлера Y: лицо с положительным углом Эйлера Y смотрит вправо от камеры или влево, если оно отрицательное.
  • Эйлера Z: лицо с положительным углом Эйлера Z вращается против часовой стрелки относительно камеры.

ML Kit не сообщает об углах Эйлера X, Эйлера Y или Эйлера Z обнаруженного лица в следующих случаях:

LANDMARK_MODE_NONE

CONTOUR_MODE_ALL

CLASSIFICATION_MODE_NONE

PERFORMANCE_MODE_FAST

установлены вместе.

Итак, давайте приступим к Android Studio, поэтому убедитесь, что вы уже создали свой проект Android Studio и поместили свой google-services.json в корень своего проекта, прежде чем продолжить.

Предварительная настройка

MLKit требует minSdk 16, который действителен для:

  • ML Kit Общая версия 19.0.0
  • ML Kit Vision версии 20.0.0
  • Модель обнаружения и отслеживания объектов ML Kit версия 16.0.0
  • ML Kit Natural Language версии 19.0.0
  • Модель идентификации языка ML Kit версия 19.0.0
  • ML Kit Модель Smart Reply версии 19.0.0
  • ML Kit Translate Model версии 19.0.0
  • ML Kit Model Interpreter, версия 19.0.0
  • ML Kit Vision AutoML версии 16.0.0

Сначала импортируйте библиотеку MLKit внутри проекта и добавьте модель лица в качестве зависимостей.

1. Настройте детектор лиц.

Прежде чем применять обнаружение лиц к изображению или сканеру, если мы хотим изменить какие-либо настройки детектора лиц по умолчанию, укажите эти параметры с помощью объекта FirebaseVisionFaceDetectorOptions. Мы можем изменить следующие настройки:

Итак, здесь мы настроим его, как показано ниже:

  • Режим производительности должен быть БЫСТРЫМ
    Мы используем режим производительности, чтобы он был быстрым, а не точным, поскольку Устройство пользователя на самом деле не является высокопроизводительным устройством, поэтому способность обрабатывать и запускать модель ИИ не очень хороша или недостаточно быстра.
  • Режим ориентира должен быть ВСЕ МАРКИ
    С помощью этого параметра мы получим все ориентиры на лицах, которые были обнаружены моделью ИИ, такие как нос, правое ухо, левое ухо и т. д.

2. Подготовьте источник данных.

Чтобы обнаружить лица на изображении, мы можем создать объект InputImage из изображения, видео или рендеринга камеры в реальном времени. Затем передайте объект InputImage методу процесса FaceDetector.

  • Входное изображение на основе захваченного изображения

Объект Bitmap создается из Camera Intent, и указанный объект передается в функцию обнаружения лиц для дальнейшей обработки.

  • Входное видео на основе рендеринга в реальном времени

Вместо создания объекта Image мы создаем объект FaceDetectionProcessor, который будет прикреплен к источнику камеры. Таким образом, мы сможем обрабатывать визуализированные данные немедленно и определять жизнеспособность указанного объекта почти в реальном времени (производительность зависит от характеристик используемого устройства).

3. Запустить детектор из экземпляра FaceDetector.

Детектор используется для запуска любого обнаружения, которое мы получим от экземпляра Firebase Vision.

4. Обработка источника данных.

После запуска детектора мы передадим изображение в функцию detectInImage, чтобы детектор смог извлечь объект FireBaseVisionFaces из переданного изображения. Сама обработка будет выполняться библиотекой FireBase и автоматически передавать свой вывод в функцию прослушивателя.

5. Получите информацию из результата обнаружения.

Как только мы получим результат обнаружения из встроенной AI-модели MLKit, Listener будет запущен с помощью объекта FirebaseVisionFaces, где он будет состоять из результата обнаружения для каждого обнаруженного лица, на данный момент прототип правильно работает только с 1 лицом. , будет неожиданный результат, если будет обнаружено более двух лиц.

addOnSuccessListener будет запускать лямбда-функцию внутри своего параметра, когда объект FireBaseVisionFaces обнаружен в переданном изображении. В этом случае извлеченный объект лица будет передан объекту FaceDetection для дальнейшей обработки. Например, здесь объект лица будет передан в функцию isLookingRightSide.

После того, как объект FireBaseVisionFaces будет передан в функцию isLookingRightSide, указанная функция извлечет положение ориентира, которое было настроено на этапе настройки.

Здесь мы будем извлекать ориентиры от середины до правой стороны лица. То есть:

  • Правая щека
  • Рот правый
  • Носовая база
  • Рот снизу

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

6. Обработайте информацию с помощью нашего расчета на основе потребностей.

Из извлеченной позиции мы можем вычислить разницу в 2 точки, чтобы решить «близость» или сравнение позиции Y между двумя точками, используя функции isNearby и isHigher. Эта функция будет использоваться как параметр для классификации результата.

7. Классифицируйте результат процесса в зависимости от потребностей.

После расчета результат будет классифицирован по 4 различным классам, а именно:

  • Глядя вверх

  • Глядя вниз

  • Глядя влево

  • Глядя прямо

В случае использования функции isLookingRight указанное лицо будет классифицировано как смотрящее вправо, если rightCheekPosition находится рядом с nosePosition, а mouthRightPosition находится рядом с mouthBottomPosition. , это также применимо к другому типу обнаружения, поэтому в основном для каждого обнаружения мы будем использовать другой алгоритм и математические вычисления на основе данных, которые модель ИИ была предоставлена ​​в реальном времени.

Допуск к ошибкам

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

Итак, как только все будет правильно настроено, вуаля вот результат!

Надеюсь, это поможет! Не стесняйтесь спрашивать меня, есть ли у вас какие-либо вопросы, и не забывайте хлопать в ладоши, если вам это нравится! : D