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



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

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

Ранее в этом месяце на Google I / O команда Firebase ML Kit объявила о добавлении в свой арсенал двух новых API: обнаружение объектов и API перевода на устройстве.

В этой статье основное внимание уделяется API обнаружения объектов, и мы рассмотрим, как мы можем обнаруживать и отслеживать объекты в режиме реального времени с помощью этого API без использования какого-либо сетевого подключения! Да, этот API использует машинное обучение на устройстве для обнаружения объектов.

Чтобы вы могли быстро понять, что может быть возможно с этим API, представьте себе приложение для покупок, которое отслеживает элементы в потоке камеры в режиме реального времени и показывает элементы пользователя, аналогичные тем, что на экране, - возможно, даже предлагая рецепты. вместе с определенными ингредиентами!

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

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

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

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

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



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

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

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

Это очень просто: перейдите к своей деятельности внутри метода onCreate, просто установите владельца жизненного цикла для cameraView, а остальную работу библиотека сделает за вас.

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

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

Шаг 4: добавляем FrameProcessor в наш CameraView

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

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

Шаг 5. Преобразуйте кадр в FirebaseVisionImage

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

Затем эти точки данных можно использовать для построения FirebaseVisionImage, который затем можно передать в детектор объектов, который мы создадим следующим.

Шаги по созданию FirebaseVisionImage описаны в функции ниже:

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

Эта часть очень похожа на реализации других API-интерфейсов Firebase ML Kit; вы получаете доступ к детектору в соответствии с вашими потребностями, передаете FirebaseVisionImage детектору, а затем присоединяете обратные вызовы успеха / неудачи, чтобы получить результат.

Функцию детектора объектов, предоставляемую API обнаружения объектов, можно в первую очередь классифицировать как:

  1. STREAM_MODE:
    Может обнаруживать и отслеживать объекты во входном потоке (например, видео). Имеет низкую задержку, но меньшую точность.
  2. SINGLE_IMAGE_MODE:
    Может обнаруживать и отслеживать объекты на неподвижном изображении. Имеет большую задержку, но более высокую точность.

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

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

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

Когда у нас есть детектор, мы можем просто передать FirebaseVisionImage, который мы получаем от getVisionImageFromFrame, который мы определили выше.

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

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

Вот и все!

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



Кроме того, если вы хотите, вы можете пойти дальше и использовать Google Knowledge Graph API, чтобы получить релевантные результаты, используя идентификатор Knowledge Graph ID, который возвращает API обнаружения объектов.

Примечание. В настоящее время существует проблема, связанная с тем, что API сети знаний не распознает каждый элемент, обнаруженный API обнаружения объектов Firebase, поэтому вам, возможно, придется полагаться на категорию, предоставленную API. Соответствующая проблема: https://github.com/firebase/mlkit-material-android/issues/3

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

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



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

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

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

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

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