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