Реалізація AI-віртуальної примірки макіяжу
Beauty-бренди стикаються з дилемою: як дати покупцеві приміряти косметику, не контактуючи з продуктом фізично? Наївне накладання 2D-зображень виглядає неприродньо — не враховуються відблиски, текстура шкіри та міміка. Ми вирішуємо це за допомогою гібридної архітектури: landmark-based детекція для real-time та AI-генеративні моделі для фото високої якості. Наш досвід у Computer Vision (5+ років, 20+ проєктів для beauty-сегменту) показує, що такий підхід знижує повернення косметики на 30% завдяки точнішому підбору відтінків. У результаті клієнти отримують не просто примірку, а інструмент, який збільшує конверсію в кошик на 25% та скорочує кількість повернень.
Для real-time сцен використовуємо MediaPipe Face Mesh [^1] — рішення від Google, що забезпечує детекцію 468 ключових точок обличчя із затримкою менше 5 мс. Для фото з високою якістю застосовуємо Stable Diffusion Inpainting з маскою зон нанесення.
Порівняння підходів: landmark-based vs AI-генеративний
| Характеристика | Landmark-based (MediaPipe) | AI-генеративний (Stable Diffusion) |
|---|---|---|
| Швидкість | < 5 мс (real-time) | 5–15 сек (офлайн) |
| Точність накладання | Висока по контурах | Висока по текстурі |
| Вимоги до GPU | Немає (WebGL у браузері) | Так (GPU класу T4+) |
| Реалізм | Середній (згладжений) | Високий (враховує освітлення) |
| Сфера застосування | Live-трансляції, AR-фільтри | Фото-примірка в застосунку |
Чому гібридний підхід ефективніший за чистий AI?
Для real-time сцен критична затримка: MediaPipe дає 100-кратну перевагу за швидкістю перед генеративними моделями. При цьому точність позиціонування губ, повік та вилиць достатньо висока, щоб згладити різкі межі за допомогою білінійної фільтрації. Ми гарантуємо стабільний фреймрейт 30 FPS навіть на мобільних пристроях середнього сегменту. Для фото, де якість важливіша за швидкість, використовуємо Stable Diffusion XL Inpainting з попередньою сегментацією обличчя — модель отримує маску зон нанесення та генерує текстуру, враховуючи рельєф шкіри та падаюче світло. Це дає ефект живого макіяжу, а не плоского накладання. Час обробки — 5–15 секунд на картинку, що прийнятно для користувацьких фото в застосунку.
Як ми забезпечуємо real-time при 30 FPS?
Ключове — використання WebGL для рендерингу та оптимізований WASM-білд MediaPipe. Ми уникаємо копіювання даних між CPU та GPU завдяки прямому доступу до текстур через WebGL2. У результаті на середньому смартфоні (Snapdragon 865+) отримуємо стабільні 30 FPS із затримкою менше 5 мс. Додатково застосовуємо білінійну фільтрацію для згладжування меж та адаптивний бітрейт для відеопотоку.
MediaPipe підхід (real-time)
import mediapipe as mp
import cv2
import numpy as np
from PIL import Image
class RealTimeMakeupAR:
def __init__(self):
self.face_mesh = mp.solutions.face_mesh.FaceMesh(
static_image_mode=False,
max_num_faces=1,
min_detection_confidence=0.5,
min_tracking_confidence=0.5
)
LIPS_INDICES = [61, 185, 40, 39, 37, 0, 267, 269, 270, 409, 291, 375, 321, 405, 314, 17, 84, 181, 91, 146]
UPPER_LID_L = [362, 382, 381, 380, 374, 373, 390, 249, 263, 466, 388, 387, 386, 385, 384, 398]
CHEEKS_L = [36, 31, 228, 229, 230, 231, 232, 233, 244, 245, 188, 174, 177, 215, 213, 192]
def apply_lipstick(self, frame, color, opacity=0.6):
rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
results = self.face_mesh.process(rgb)
if not results.multi_face_landmarks:
return frame
landmarks = results.multi_face_landmarks[0]
h, w = frame.shape[:2]
lip_points = np.array([
[int(landmarks.landmark[i].x * w),
int(landmarks.landmark[i].y * h)]
for i in self.LIPS_INDICES
], dtype=np.int32)
overlay = frame.copy()
cv2.fillPoly(overlay, [lip_points], color[::-1])
return cv2.addWeighted(frame, 1 - opacity, overlay, opacity, 0)
Як працює AI-генеративна примірка?
Для фото, де якість важливіша за швидкість, ми використовуємо Stable Diffusion XL Inpainting з попередньою сегментацією обличчя. Модель отримує маску зон нанесення (губи, повіки, вилиці) та генерує текстуру, враховуючи рельєф шкіри та падаюче світло. Це дає ефект живого макіяжу, а не плоского накладання. Час обробки — 5–15 секунд на картинку, що прийнятно для користувацьких фото в застосунку.
AI-генеративний підхід (висока якість)
from diffusers import StableDiffusionXLInpaintPipeline
import torch
from PIL import Image
import io
class AIPhotoMakeupTryOn:
def __init__(self):
self.pipe = StableDiffusionXLInpaintPipeline.from_pretrained(
"diffusers/stable-diffusion-xl-1.0-inpainting-0.1",
torch_dtype=torch.float16
).to("cuda")
self.face_parser = FaceParser()
def apply_makeup_ai(self, photo, makeup_style, intensity=0.7):
img = Image.open(io.BytesIO(photo)).convert("RGB")
face_mask = self.face_parser.get_makeup_zone_mask(img)
result = self.pipe(
prompt=f"beautiful makeup, {makeup_style}, natural skin texture",
negative_prompt="unnatural, heavy, clown, overdone",
image=img,
mask_image=face_mask,
strength=intensity,
num_inference_steps=30,
guidance_scale=8.0
).images[0]
buf = io.BytesIO()
result.save(buf, format="PNG")
return buf.getvalue()
Деталі налаштування пайплайну
Для підвищення реалізму ми fine-tune модель на датасеті з 5000 професійних beauty-фото з різними відтінками шкіри та освітленням. Використовуємо LoRA-адаптери, що прискорює навчання та зменшує розмір моделі. Inference запускається на GPU класу T4 з використанням TensorRT для оптимізації затримки.Етапи розробки віртуальної примірки
| Етап | Тривалість | Результат |
|---|---|---|
| Аналіз вимог та збір референсів | 3–5 днів | Технічне завдання, прототипи інтерфейсу |
| Вибір архітектури та підготовка моделей | 5–7 днів | Вибір landmark-based або AI-генеративного підходу |
| Реалізація детекції та рендерингу | 7–10 днів | Робочий прототип у браузері або застосунку |
| Інтеграція з каталогом продукції | 3–5 днів | Підключення API, синхронізація відтінків |
| Тестування та оптимізація | 5–7 днів | Перевірка на пристроях, налаштування продуктивності |
| Деплой та документація | 2–4 дні | Розгортання, навчання команди |
Що входить у роботу
Наш сертифікований досвід у Computer Vision дозволяє виконати проєкт під ключ. У результаті ви отримуєте:
- документацію: архітектурна схема, опис API, керівництво з інтеграції
- вихідний код з коментарями та CI/CD пайплайном
- навчання вашої команди роботі з системою
- підтримку на етапі промислової експлуатації (SLA не нижче 99.9%)
Архітектура продукту
Веб/мобільний застосунок
├── Camera/Photo mode
│ ├── Real-time: MediaPipe WASM + WebGL (< 5 мс)
│ └── Photo: AI inpainting API (10–15 сек)
├── Product catalog (відтінки помади, тіней)
├── Shade picker + color mixer
└── Share / Download result
Терміни: браузерний real-time AR макіяж (MediaPipe) — 3–4 тижні. AI фото-примірка з API — 1–2 тижні. Повний мобільний застосунок з каталогом — 3–4 місяці.
Браузерна real-time реалізація
import * as faceMesh from '@mediapipe/face_mesh';
import * as drawingUtils from '@mediapipe/drawing_utils';
const faceMeshInstance = new faceMesh.FaceMesh({locateFile: (file) => {
return `https://cdn.jsdelivr.net/npm/@mediapipe/face_mesh/${file}`;
}});
faceMeshInstance.setOptions({
maxNumFaces: 1,
minDetectionConfidence: 0.5,
minTrackingConfidence: 0.5
});
function renderLipstick(ctx, landmarks, color, opacity) {
const lipIndices = [61, 185, 40, 39, 37, 0, 267, 269, 270, 409, 291, 375];
ctx.globalAlpha = opacity;
ctx.fillStyle = color;
ctx.beginPath();
lipIndices.forEach((idx, i) => {
const lm = landmarks[idx];
if (i === 0) ctx.moveTo(lm.x * canvas.width, lm.y * canvas.height);
else ctx.lineTo(lm.x * canvas.width, lm.y * canvas.height);
});
ctx.closePath();
ctx.fill();
ctx.globalAlpha = 1.0;
}
Зв'яжіться з нами для пілотного проєкту — отримайте demo за 5 днів. Замовте консультацію — підберемо оптимальну архітектуру під ваші завдання.
[^1]: MediaPipe Face Mesh — бібліотека для детекції та відстеження ключових точок обличчя.







