Всем привет! Этот пост является продолжением моей предыдущей серии: Машинное обучение на Android с использованием Firebase ML Kit.

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

Существует множество руководств по обнаружению объектов в реальном времени, так что вам может быть интересно, Чем отличается этот от других? Одно из ключевых отличий заключается в том, что вместо того, чтобы просто обнаруживать объекты, мы также будем подсчитывать объекты в заданном кадре, открывая гораздо более широкий спектр возможных приложений.

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

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

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

Лучшая часть подсчета объектов с использованием обнаружения объектов в реальном времени заключается в том, что вывод происходит на устройстве без активного подключения к Интернету (благодаря API обнаружения объектов, предоставленному Fritz AI ^). И хорошая новость для нас, разработчиков: это не займет у нас много времени! Мы постараемся завершить приложение менее чем за 5 минут написания кода!

Вот видео, показывающее, как будет выглядеть готовое приложение:

Некоторые скриншоты:

Если это вас взволновало, давайте начнем с части реализации приложения!

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

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

  1. Обнаружение объектов Fritz:


P.S. Вам нужно будет создать учетную запись на https://app.fritz.ai/login и сначала зарегистрировать там свое приложение.

2. CameraView для предварительного просмотра камеры:



Хотите дополнить свое мобильное приложение функцией обнаружения объектов? Начните строить сегодня с учетной записью Fritz AI.

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

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

Шаг 3. Запустите предварительный просмотр камеры

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

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

Далее мы добавим метод, который дает нам эти кадры предварительного просмотра, чтобы мы могли применить к ним некоторую магию машинного обучения!

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

Шаг 4. Добавьте FrameProcessor в CameraView, чтобы получать живые кадры из предварительного просмотра

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

Код для этого довольно прост:

Шаг 5: преобразовать кадр в растровое изображение

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

Fritz SDK читает только растровые изображения, поэтому нам нужно преобразовать этот массив ByteArray в формат для чтения Bitmap.

Следующий код делает это, но если вы хотите узнать больше о процессе, проверьте следующую ветку обсуждения переполнения стека.

Шаг 6. Выполните логический вывод на преобразованном растровом изображении.

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

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

Наконец, нам нужно запустить этот FritzVisionImage через FritzVisionObjectPredictor, который мы создали ранее:

Вот и все!

Если вы запустите приложение сейчас, вы увидите, что ваше приложение способно обнаруживать и идентифицировать объекты в кадре предварительного просмотра почти в реальном времени. Разве это не круто ?!

Предоставляемый здесь API обнаружения объектов может обнаруживать более 90+ элементов повседневного использования из изображения, а также работает без подключения к Интернету, так что это идеальный инструмент для тех, кто хочет добавить немного интеллектуальности в свои приложения 😉

Полный код Kotlin для Activity можно найти ниже:

Приложение, показанное на видео выше, можно найти в моем репозитории GitHub:



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

Есть отзывы? Давайте подключимся в Твиттере.

Вы хотите начать создавать похожие удивительные приложения для Android? Посмотрите мой курс Coding Bocks.

^ Раскрытие информации: Heartbeat спонсируется Fritz AI

Обсудите этот пост в Hacker News

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

Являясь независимой редакцией, Heartbeat спонсируется и публикуется Fritz AI, платформой машинного обучения, которая помогает разработчикам учить устройства видеть, слышать, ощущать и думать. Мы платим участникам и не продаем рекламу.

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