Сегодня мы рады запустить Fritz Hair Segmentation, дающий разработчикам и пользователям возможность изменять свои волосы с помощью разных цветов, рисунков или изображений.

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

Что такое сегментация волос?

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

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

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

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

Настройте свою учетную запись Fritz AI и инициализируйте SDK

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

Если у вас нет приложения, но вы хотите быстро начать работу, я бы порекомендовал клонировать наше приложение-шаблон камеры.

git clone https://github.com/fritzlabs/fritz-examples.git

Чтобы продолжить, импортируйте CameraBoilerplateApp как новый проект в Android Studio, а затем добавьте соответствующий код по всему этому руководству в MainActivity.

Добавьте модель сегментации волос через Gradle

В свой файл app / build.gradle вы можете включить зависимость следующим образом:

dependencies {
    implementation 'ai.fritz:core:4.+'
    implementation 'ai.fritz:vision:4.+'
    implementation 'ai.fritz:vision-hair-segmentation-model:4.+'
}

Сюда входит модель сегментации волос в приложении. Под капотом мы используем TensorFlow Lite в качестве нашей среды мобильного машинного обучения. Чтобы убедиться, что модель не сжимается при сборке APK, вам необходимо добавить следующее в тот же файл сборки в разделе android.

android {
  aaptOptions {
    noCompress "tflite"
  }
}

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

Создание предиктора сегментации с помощью модели сегментации волос

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

Прогнозирование изображения для обнаружения волос

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

В приведенном ниже коде мы конвертируем объект android.media.Image (YUV_420_888 формат ) в объект FritzVisionImage, чтобы подготовить его к прогнозированию. Обычно это происходит при чтении из сеанса захвата камеры в реальном времени.

Вы также можете преобразовать Bitmap в FritzVisionImage.

FritzVisionImage visionImage = FritzVisionImage.fromBitmap(bitmap);

После создания объекта FritzVisionImage вызовите predictor.predict.

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

Наложите маску на исходное изображение

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

Сначала выберите один из 3 различных режимов наложения:

Затем давайте извлечем маску, для которой мы обнаружили волосы на изображении. В предикторе сегментации есть метод buildSingleClassMask, который возвращает альфа-маску классифицированных пикселей.

Bitmap hairMask = segmentResult.buildSingleClassMask(MaskClass.HAIR);

Наконец, давайте совместим maskBitmap с исходным изображением.

Bitmap blendedHair = visionImage.blend(hairMask, blendMode);

Вот окончательный результат blendedBitmap:

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

С помощью сегментации волос разработчики могут создавать новые «примерочные» возможности без каких-либо хлопот (или окрашивания волос). Просто добавьте пару строк кода, чтобы создать привлекательные функции, которые помогут выделить ваше Android-приложение среди остальных.

Создайте учетную запись Fritz AI, чтобы начать. Для получения дополнительных ресурсов погрузитесь в документацию или посмотрите полную демонстрацию в приложении Fritz AI Studio с открытым исходным кодом.

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

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

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

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