Уявіть: клієнт заходить у салон, показує фото стрижки з 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 для складних ефектів (ombre, balayage, мелірування)
- Балаяж/омбре: 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 волосся — наша експертиза. Збереження ідентичності — обов'язковий етап. Замовте розрахунок строків під ваш проєкт — це займе не більше дня.







