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

Попробуй сам. Вы можете скачать наше демонстрационное приложение в App Store и поиграть с окрашиванием волос.

Не нужно быть экспертом в области машинного обучения, чтобы раскрыть его потенциал. Оставьте этот опыт нам. Легко создавайте мобильные приложения, которые видят, слышат, ощущают и думают с помощью Fritz AI.

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

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

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

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

Настройте свою учетную запись Fritz и проект Xcode

Создайте новый проект в Xcode. Выберите свой идентификатор пакета и убедитесь, что проект строится.

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

Чтобы получить готовую демонстрацию, загрузите iOS demo Xcode project.

Настройка камеры и отображение видео в реальном времени

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

Перво-наперво, нам нужно добавить разрешения камеры в Info.plist файл. В качестве ключа добавьте «Конфиденциальность - Описание использования камеры» с описанием:

Для отображения кадров с камеры нам необходимо настроить объектAVCaptureVideoDataOutput.

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

Во-первых, мы должны установить формат pixelBuffer на kCVPixelFormatType_32BGRA для модели сегментации.

В этой демонстрации мы будем использовать переднюю камеру, чтобы можно было сегментировать собственные волосы. Мы установим videoOrientation на .portrait, чтобы изображение передавалось в captureOutput функцию-делегат в правильной ориентации.

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

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

Запустите это, и вы увидите живое видео в своем приложении!

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

Создайте предсказатель волос

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

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

Инициализируйте модель сегментации волос как переменную в контроллере представления и запустите модель в функции captureOutput:

Результатом модели является FritzVisionSegmentationResult объект. Более подробно о различных методах доступа читайте в официальной документации. Нам нужна маска, содержащая пиксели волос. Самый простой способ работать с результатом - вызвать его функцию buildSingleClassMask.

На выходе получается UIImage, который может накладывать входное изображение на модель. Цвет каждого пикселя представляет класс, предсказываемый моделью. В нашей модели волос красные пиксели представляют волосы.

Смешайте маску с исходным изображением

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

Смешать изображение так же просто, как вызвать fritzImage.blend(mask). Затем мы можем показать смешанное изображение - и вуаля, у нас есть маска сегментации волос.

Вот окончательный результат смешанной маски:

Измените режим наложения

При объединении маски с исходным изображением режим наложения определяет, как объединяются значения пикселей. Вы можете выбрать любое смешивание CGBlendMode.

.softLight - режим по умолчанию, но .color и .hue также дают интересные результаты.

Настроить чувствительность маски

Наконец, мы взглянем на маску сегментации. По результату прогноза вы можете создавать маски различной чувствительности. Двумя важными параметрами являются clippingScoresAbove и zeroingScoresBelow. Результаты модели составляют от 0 до 1. Все оценки достоверности выше clippingScoresAbove будут равны 1. Все оценки достоверности ниже zeroingScoresBelow будут обнулены. Вы можете изменить эти параметры, чтобы создать мягкую кромку.

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

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

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

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

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

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

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