Представьте: клиент заходит в салон, показывает фото стрижки с Pinterest — и за 10 секунд видит себя с этой причёской на экране. Никаких «а может попробуем?», никакой краски на пробниках. Виртуальная примерка причёски — одна из сложнейших задач computer vision. Волосы имеют полупрозрачные края, тонкие пряди до 1 пикселя, и любая неточность маски даёт «пластиковый» эффект. Мы за 15+ проектов для beauty-tech отточили пайплайн, который сочетает alpha matte сегментацию, диффузионную генерацию и сохранение идентичности. Результат — реалистичная примерка любой причёски, будь то смена цвета или кардинальное изменение формы. Свяжитесь с нами, чтобы обсудить ваш проект — мы поможем подобрать оптимальное решение.
Как работает сегментация волос?
Точная маска волос — основа всего. Проблема: граница волосы/фон нечёткая, полупрозрачная, с отдельными прядями шириной 1–3 пикселя. Стандартный семантический сегментатор даёт грубые края, которые убивают реалистичность при наложении.
Специализированные модели:
-
Hair-SAM/Matting Anything— сегментация с alpha matte: не бинарная маска, а float32 значения 0..1 на каждый пиксель. На краях — дробные значения, отражающие прозрачность. - MODNet — lightweight matting model, 35fps на мобильных. Оптимизирован именно для портретов. В 3 раза быстрее классических методов (например, DIM).
- ViTMatte — transformer-based матирование, выше качество на сложных прядях. Согласно статье ViTMatte, он превосходит предшественников по Intersection over Union.
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
Почему alpha matte критичен?
Бинарные маски не передают полупрозрачность — на краях получаются резкие ступеньки. Alpha matte даёт попиксельную прозрачность, что критически важно для наложения причёски: результат выглядит натурально, а не как наклейка.
Наложение новой причёски
Два подхода:
Texture transfer — берём 3D-модель или 2D-reference целевой причёски, деформируем под форму головы пользователя (face shape analysis через 3DMM), накладываем с blending. Работает для схожих длин и форм. Проблема: если у пользователя длинные прямые, а целевая — короткое каре — оригинальные волосы нужно убрать под новую причёску, это требует inpainting кожи головы.
Генеративный подход (диффузионные модели) — более мощный:
- Сегментируем волосы и кожу головы
- Описываем желаемую причёску текстом: «short bob, brown, with bangs»
- Запускаем inpainting через Stable Diffusion с ControlNet (conditioning на форму лица и положение головы)
- Сохраняем лицо (face preservation через IP-Adapter или InstantID)
Главная сложность: сохранить идентичность человека при смене причёски. Без face preservation модель может генерировать другого человека с нужной причёской.
Почему генеративный подход лучше?
Генеративный подход даёт кардинальное изменение формы, в отличие от texture transfer, который ограничен исходной длиной. Мы используем ViTMatte для матирования и Stable Diffusion для inpainting — это позволяет создавать причёски, которых у человека никогда не было, с сохранением идентичности.
Окрашивание волос
Проще примерки формы: меняем цвет в пределах сегментированной маски волос. Инструменты:
- 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 секунд в зависимости от метода.
Что входит в работу
| Компонент | Описание | Срок, недель |
|---|---|---|
| Модуль сегментации | alpha matte, поддержка 3+ моделей (hair-SAM, MODNet, ViTMatte) | 2–3 |
| Модуль окрашивания | real-time, все типы цвета, омбре, балаяж | 3–5 |
| Модуль смены формы | texture transfer + диффузионный inpainting | 6–10 |
| Face preservation | IP-Adapter / InstantID | 2–3 |
| Интеграция и тесты | API, Web, мобильные устройства | 2–4 |
Ориентировочные сроки под ключ: 5–18 недель в зависимости от сложности. Стоимость рассчитывается индивидуально. Экономия времени по сравнению с разработкой с нуля — 2–3 месяца, что позволяет быстрее запустить продукт. Получите консультацию: свяжитесь с нами для оценки вашего проекта.
| Метод | Скорость | Качество | Изменение формы |
|---|---|---|---|
| Texture transfer | 0.1–0.3 с | Среднее | Ограниченное |
| Диффузионный inpainting | 3–15 с | Высокое | Любое |
Мы гарантируем точность матирования, сохранение идентичности и быструю интеграцию. Опыт — 15+ проектов в beauty-tech. Для real-time примерки волос мы адаптируем модель под ваши требования. Alpha matte волосы — наша экспертиза. Сохранение идентичности — обязательный этап. Закажите расчёт сроков под ваш проект — это займёт не больше дня.







