Сегодня мы рады запустить 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 , чтобы узнавать обо всех последних новостях в области мобильного машинного обучения.