Это руководство является 10-й частью серии ML Kit для мобильных разработчиков. Если вы не совсем в курсе, можете начать здесь:



Пит-стопы серии

Представляем Firebase ML Kit Face Detection API

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

Но недавно, когда я начал работать над AfterShoot, я понял, что этот API можно использовать для эффективного обнаружения морганий на изображении, о чем и будет этот блог!



API распознавания лиц в основном принимает изображение и сканирует его на предмет присутствующих человеческих лиц, что отличается от распознавания лиц (при котором Большой Брат печально наблюдает за вами, пока вы спите). Это также API на устройстве, что означает, что все логические выводы машинного обучения происходят на вашем устройстве, и никакие личные данные не отправляются стороннему поставщику.

Для каждого обнаруженного лица API возвращает следующие параметры:

  1. Координаты прямоугольной рамки вокруг этой грани
  2. Координаты прямоугольной рамки вокруг глаз, носа и рта для этого лица.
  3. Вероятность того, что лицо на картинке улыбается
  4. Вероятность того, что глаза на этом лице открыты или закрыты
  5. Контур лица, очерчивающий лицо, глаза, нос и рот.

Вы можете узнать больше об API здесь:



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

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

Прежде чем мы продолжим, вот несколько скриншотов из приложения:

Шаг 1. Создайте новый проект Android Studio и добавьте необходимые зависимости.

Во-первых, нам нужно создать новый проект Android Studio и добавить к нему соответствующие зависимости.

Первый простой - настройте Firebase в своем проекте. Вы можете найти хороший учебник здесь. Чтобы использовать этот API, вам нужно добавить в приложение следующую зависимость:

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

Я рассказывал об этом в своем более раннем блоге, и настоятельно рекомендую вам прочитать его, прежде чем продолжить:



Шаг 2: Создание базового макета и добавление предварительного просмотра камеры

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

Вот как это может выглядеть:

Чтобы запустить предварительный просмотр автоматически, как только приложение запустится, вы можете снова прочитать мой блог на CameraX - я объясню, как это сделать на шаге 4.

Окончательный код должен выглядеть примерно так:

Шаг 3. Инициализируйте детектор лиц Firebase

Прежде чем мы продолжим и начнем обнаруживать лица, нам нужно инициализировать Firebase Face Detector.

Теперь, поскольку это API на устройстве, он работает без активного подключения к Интернету и доступен бесплатно!

Чтобы инициализировать детектор, нам сначала нужно создать объект опций, который обрисовывает в общих чертах:

  1. Тип детектора, который мы собираемся использовать (быстрый или точный)
  2. Нужно ли нам определять черты лица (нос, глаза и рот)
  3. Следует ли отслеживать контуры лица или нет.
  4. И многое другое…

Здесь вы можете найти все доступные варианты:



В рамках этого блога мы будем отслеживать черты лица (глаза) в ACCURATE режиме.

Код для этого будет выглядеть следующим образом:

Примечание. Выбор режима FAST приведет к более быстрому выводу при запуске приложения, но также может дать неверные результаты при работе с изображениями с несколькими лицами на них!

Шаг 4. Расширение анализатора изображений CameraX для обработки входящих кадров

Далее нам нужно создать анализатор изображений, который содержит логику для обработки входящих кадров камеры, код для Analyzer будет выглядеть примерно так:

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

Шаг 5. Добавление логики обработки машинного обучения в предварительный просмотр камеры

Чтобы предварительный просмотр камеры знал, что мы хотим выполнить логический вывод по захваченным кадрам, вы можете изменить метод startCamera() следующим образом:

В завершение нам нужно обновить метод CameraX.bindToLifecycle() следующим образом:

CameraX.bindToLifecycle(this, preview, blinkDetector)

После этого CameraX должен начать анализ изображения, когда вы указываете его на разные лица, и вы должны увидеть журналы, которые печатаются в вашем Android Studio Logcat Terminal.

Шаг 6. Изменение приложения для определения моргания.

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

Ради этого блога я предполагаю, что человек моргает, если вероятность открытия любого из глаз меньше 0,4.

Примечание: поскольку вероятность открытия глаза 0,5 означает, что модель на 50% уверена в том, что глаза человека открыты, я пошел дальше и предположил, что если модель менее чем на 40% уверена в том, что глаза открыты, то у рассматриваемого лица это есть. глаза закрыты.

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

Затем мы напишем внутри нашего цикла оператор if, который проверяет и проверяет это:

Вот и все! Благодаря появлению мобильного машинного обучения мы можем быстро добавлять сложные функции машинного обучения в наши приложения без написания какого-либо кода, специфичного для машинного обучения!

Если вас это заинтриговало, и вы хотите начать заниматься машинным обучением в качестве разработчика мобильных устройств, этот блог может быть хорошим чтением:



Или вот этот:



Исходный код приложения, описанного в этом сообщении блога, можно найти в моем репозитории GitHub здесь:



Спасибо за внимание! Если вам понравилась эта история, пожалуйста, нажмите 👏 кнопку и поделитесь ею, чтобы помочь другим найти ее! Не стесняйтесь оставлять комментарии 💬 ниже.

Есть отзывы? Подключим в Twitter.

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

Независимая редакция, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по обработке данных и группам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим участникам и не продаем рекламу.

Если вы хотите внести свой вклад, отправляйтесь на наш призыв к участникам. Вы также можете подписаться на наши еженедельные информационные бюллетени (Deep Learning Weekly и Comet Newsletter), присоединиться к нам в » «Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов, событий и гораздо больше, что поможет вам быстрее и лучше строить лучшие модели машинного обучения.