AI Virtual Hairstyle Try-On System

We design and deploy artificial intelligence systems: from prototype to production-ready solutions. Our team combines expertise in machine learning, data engineering and MLOps to make AI work not in the lab, but in real business.
Showing 1 of 1 servicesAll 1566 services
AI Virtual Hairstyle Try-On System
Medium
~2-4 weeks
FAQ
AI Development Areas
AI Solution Development Stages
Latest works
  • image_website-b2b-advance_0.png
    B2B ADVANCE company website development
    1212
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Website development for BELFINGROUP
    852
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1041
  • image_logo-advance_0.png
    B2B Advance company logo design
    561
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    822

ИИ-примерка причёсок

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

Сегментация волос: специфика задачи

Точная маска волос — основа всего. Проблема: граница волосы/фон нечёткая, полупрозрачная, с отдельными прядями шириной 1–3 пикселя. Стандартный семантический сегментатор даёт грубые края, которые убивают реалистичность при наложении.

Специализированные модели:

  • Hair-SAM / Matting Anything — сегментация с alpha matte: не бинарная маска, а float32 значения 0..1 на каждый пиксель. На краях — дробные значения, отражающие прозрачность.
  • MODNet — lightweight matting model, 35fps на мобильных. Оптимизирован именно для портретов.
  • ViTMatte — transformer-based матирование, выше качество на сложных прядях.
from matting import load_model, estimate_foreground_ml

model = load_model('vitmate_vit_b_pretrained.pth')

def segment_hair(image, trimap):
    # trimap: 0=точно фон, 128=граничная зона, 255=точно волосы
    alpha, foreground = model(image, trimap)
    return alpha  # float32 маска, 0..1

Наложение новой причёски

Два подхода:

Texture transfer — берём 3D-модель или 2D-reference целевой причёски, деформируем под форму головы пользователя (face shape analysis через 3DMM), накладываем с blending. Работает для схожих длин и форм. Проблема: если у пользователя длинные прямые, а целевая — короткое каре — оригинальные волосы нужно убрать под новую причёску, это требует inpainting кожи головы.

Генеративный подход (диффузионные модели) — более мощный:

  1. Сегментируем волосы и кожу головы
  2. Описываем желаемую причёску текстом: «short bob, brown, with bangs»
  3. Запускаем inpainting через Stable Diffusion с ControlNet (conditioning на форму лица и положение головы)
  4. Сохраняем лицо (face preservation через IP-Adapter или InstantID)

Главная сложность: сохранить идентичность человека при смене причёски. Без face preservation модель может генерировать другого человека с нужной причёской.

Окрашивание волос

Проще примерки формы: меняем цвет в пределах сегментированной маски волос. Инструменты:

  • Selective color transfer в LAB color space: сохраняем L-канал (текстуру), меняем AB (цвет)
  • Neural color transfer через AdaIN для сложных эффектов (омбре, балаяж, мелирование)
  • Балаяж/омбре: gradient mask + отдельный color transfer по градиенту от корней к кончикам
import cv2
import numpy as np

def recolor_hair(image, hair_mask, target_color_lab):
    lab = cv2.cvtColor(image, cv2.COLOR_BGR2LAB).astype(float)
    # Вычисляем средний цвет волос
    hair_pixels = lab[hair_mask > 128]
    mean_ab = hair_pixels[:, 1:].mean(axis=0)
    # Сдвигаем AB-каналы к целевому цвету
    shift = target_color_lab[1:] - mean_ab
    lab[:, :, 1:] += hair_mask[..., None] / 255.0 * shift
    lab = np.clip(lab, 0, 255).astype(np.uint8)
    return cv2.cvtColor(lab, cv2.COLOR_LAB2BGR)

Real-time vs фото-режим

Real-time (видео): MODNet для сегментации + texture-based recoloring. Ограничение: сложные форм-изменения нереалистичны в реальном времени.

Фото-режим: полный pipeline с ViTMatte + диффузионной генерацией. Время: 3–15 секунд в зависимости от метода.

Сроки

Базовый модуль окрашивания (real-time, все типы цвета): 5–8 недель. Полная примерка с изменением формы + генеративный подход: 12–18 недель. Стоимость рассчитывается индивидуально.