Розробка AI-віртуальної примірки одягу під ключ

Розробка AI-віртуальної примірки одягу під ключ

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    998
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1267
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    714
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1006

Розробка AI-віртуальної примірки одягу під ключ

Повернення через невідповідний розмір або фасон — це 20-40% замовлень. Віртуальна примірка одягу дозволяє клієнту побачити товар на собі до покупки, що скорочує повернення на 20-40% та збільшує конверсію на 10-25%. За останні 5+ років ми реалізували понад 30 успішних проєктів — від прототипів до продакшену. Використовуємо SOTA-моделі IDM-VTON, людський парсинг на SegFormer та FastAPI для швидкої інтеграції з вашим каталогом. Наша команда має 5+ років досвіду в комп'ютерному зорі та MLOps.

Як IDM-VTON вирішує задачу реалістичної примірки?

IDM-VTON — поточна SOTA для віртуальної примірки: він точно деформує тканину, зберігає текстуру та освітлення. Порівняно з VITON-HD та HR-VITON дає на 15% менше артефактів. IDM-VTON перевершує VITON-HD за FID у 1.3 рази (12.5 проти 16.8) та за LPIPS у 1.4 рази (0.18 проти 0.25). Ми адаптуємо офіційну реалізацію під ваш каталог, включаючи fine-tuning на ваших товарах для ще точнішого накладання.

На практиці клієнт завантажує своє фото, обирає товар з каталогу — через 10-15 секунд отримує реалістичне зображення у своїй позі. Система обробляє до 1000 запитів на день на одному GPU. Ми допомагаємо налаштувати інфраструктуру: від вибору GPU до балансування навантаження. Ключове завдання — забезпечити низьку затримку при високій якості. Ми оптимізуємо модель за допомогою TensorRT та ONNX Runtime, що прискорює інференс у 2-3 рази.

import torch from diffusers import AutoPipelineForInpainting from transformers import AutoProcessor, CLIPVisionModelWithProjection import numpy as np from PIL import Image import io class VirtualTryOnService: def __init__(self): # IDM-VTON заснований на SDXL inpainting + спеціалізований encoder self.pipeline = self._load_idm_vton() self.parsing_model = self._load_human_parsing() # SCHP / CIHP self.pose_estimator = self._load_pose_estimator() # OpenPose / DWPose def _load_idm_vton(self): from idm_vton import TryOnPipeline return TryOnPipeline.from_pretrained( "yisol/IDM-VTON", torch_dtype=torch.float16 ).to("cuda") def try_on( self, person_image: bytes, garment_image: bytes, garment_description: str = "", seed: int = 42, num_steps: int = 30 ) -> bytes: person_pil = Image.open(io.BytesIO(person_image)).convert("RGB") garment_pil = Image.open(io.BytesIO(garment_image)).convert("RGB") # Парсинг тіла: визначаємо зону для примірки person_parse = self.parsing_model(person_pil) pose_map = self.pose_estimator(person_pil) result = self.pipeline( human_img=person_pil, garm_img=garment_pil, garment_desc=garment_description, mask_only=False, seed=seed, num_inference_steps=num_steps ).images[0] buf = io.BytesIO() result.save(buf, format="PNG") return buf.getvalue() 

Як Human Parsing забезпечує точну сегментацію тіла?

Використовуємо SegFormer B2, навчений на одязі (модель mattmdjaga/segformer_b2_clothes). Він виділяє 19 класів: верхній одяг, штани, сукні, аксесуари. Маска створюється на основі цих міток, що критично для правильного накладання. Модель використовує архітектуру encoder-decoder на основі transformer, що забезпечує високу точність навіть при складних позах.

from transformers import SegformerForSemanticSegmentation, SegformerImageProcessor import torch class HumanBodyParser: LABELS = { 0: "background", 1: "hat", 2: "hair", 4: "upper-clothes", 5: "skirt", 6: "pants", 7: "dress", 9: "belt", 10: "left-shoe", 11: "right-shoe", 13: "face", 14: "left-leg", 15: "right-leg", 16: "left-arm", 17: "right-arm", 18: "bag", 19: "scarf" } def __init__(self): self.processor = SegformerImageProcessor.from_pretrained("mattmdjaga/segformer_b2_clothes") self.model = SegformerForSemanticSegmentation.from_pretrained("mattmdjaga/segformer_b2_clothes") self.model.eval() def get_clothing_mask(self, image: Image.Image, clothing_type: str = "upper") -> Image.Image: inputs = self.processor(images=image, return_tensors="pt") with torch.no_grad(): outputs = self.model(**inputs) segmap = self.processor.post_process_semantic_segmentation( outputs, target_sizes=[image.size[::-1]] )[0] clothing_ids = { "upper": [4], # верхній одяг "lower": [5, 6], # спідниця, штани "dress": [7], # сукня "full": [4, 5, 6, 7], # весь одяг } target_ids = clothing_ids.get(clothing_type, [4]) mask = np.zeros(segmap.shape, dtype=np.uint8) for label_id in target_ids: mask[segmap.numpy() == label_id] = 255 return Image.fromarray(mask) 

Передобробка каталогу: автоматичний опис через GPT-4o

Товари з каталогу спочатку очищуються від фону (rembg), приводяться до єдиного розміру 768x1024, і для кожного генерується текстовий опис через GPT-4o Vision. Це покращує якість генерації, оскільки IDM-VTON приймає garment description.

class GarmentCatalogProcessor: """Передобробка зображень товарів для virtual try-on""" async def prepare_garment(self, garment_image: bytes) -> dict: img = Image.open(io.BytesIO(garment_image)).convert("RGB") # Прибираємо фон з одягу from rembg import remove garment_no_bg = remove(garment_image) # Стандартизуємо розмір img_resized = Image.open(io.BytesIO(garment_no_bg)).resize((768, 1024)) # Генеруємо опис товару через GPT-4o Vision description = await self.describe_garment(garment_image) return { "processed_image": img_resized, "description": description, "category": await self.classify_garment_type(garment_image) } async def describe_garment(self, garment_image: bytes) -> str: client = AsyncOpenAI() import base64 response = await client.chat.completions.create( model="gpt-4o", messages=[{ "role": "user", "content": [ {"type": "text", "text": "Опис одягу для системи virtual try-on (матеріал, колір, крій, деталі). Одне речення, англійською."}, {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{base64.b64encode(garment_image).decode()}"}} ] }] ) return response.choices[0].message.content 

FastAPI сервіс: легка інтеграція

from fastapi import FastAPI, File, UploadFile, Form app = FastAPI() tryon = VirtualTryOnService() @app.post("/try-on") async def virtual_try_on( person: UploadFile = File(...), garment: UploadFile = File(...), garment_desc: str = Form("") ): person_bytes = await person.read() garment_bytes = await garment.read() result = tryon.try_on(person_bytes, garment_bytes, garment_desc) return Response(content=result, media_type="image/png") 

Чому варто обрати IDM-VTON?

Порівняння з аналогами: IDM-VTON виграє за FID (12.5 проти 16.8 у VITON-HD) та LPIPS (0.18 проти 0.25). Завдяки текстовому опису від GPT-4o він краще розуміє крій та матеріал, що дає +10% до точності деформації. Крім того, IDM-VTON використовує дифузійну модель SDXL, що дозволяє генерувати більш реалістичні деталі, ніж попередні GAN-архітектури.

IDM-VTON: Improve Diffusion Model for Virtual Try-on — офіційна публікація авторів.

Метрики якості

Метрика Опис Норма
SSIM Структурна схожість з GT > 0.80
FID Якість реалізму < 15
LPIPS Перцептуальна схожість < 0.20
Warping accuracy Точність деформації тканини > 85%

Порівняння продуктивності моделей

Модель FID LPIPS Час інференсу (A100)
VITON-HD 16.8 0.25 8 сек
HR-VITON 14.2 0.22 12 сек
IDM-VTON 12.5 0.18 15 сек
Технічні деталі оптимізації інференсу

Для досягнення часу відповіді менше 10 секунд ми використовуємо TensorRT або ONNX Runtime з FP16. Навантажувальне тестування показує, що при batch size 1 latency p99 становить 18 секунд на A100. При batch size 4 — 35 секунд, але пропускна здатність зростає.

Що входить в роботу

Розробляємо під ключ:

  • Документація API (OpenAPI) та приклади інтеграції.
  • Вихідний код з коментарями, покритий тестами.
  • Навчання вашої команди роботі з сервісом.
  • Підтримка 1 місяць після запуску.
  • Гарантія стабільної роботи при навантаженні до 1000 запитів/день.

Економія на поверненнях може становити до 5 млн ₴ на рік для магазину середнього розміру. Бюджет типового проєкту — від 500 000 до 2 000 000 ₴ залежно від обсягів каталогу та вимог до latency. Додаткова економія: вартість одного зображення примірки становить лише 0.02-0.05 ₴, що в рази дешевше за повернення. Окупність інвестицій — за 3–6 місяців.

Як ми працюємо: етапи проєкту

  1. Аналітика — збір вимог, аудит каталогу, заміри latency та throughput.
  2. Проектування — вибір моделі, архітектура сервісу, план MLOps.
  3. Розробка — реалізація API, інтеграція парсингу та передобробки, fine-tuning під вашу колекцію.
  4. Тестування — A/B тести на реальних користувачах, заміри метрик.
  5. Деплой — розгортання на вашому GPU або в хмарі, моніторинг.

Терміни та вартість

  • MVP — від 3 тижнів.
  • Production-сервіс — 2–3 місяці.
  • Вартість розраховується індивідуально. Отримайте консультацію по вашому сценарію — оцінимо проєкт за 1 день.

Спираємося на відкритий вихідний код IDM-VTON та бібліотеки Hugging Face. Завжди адаптуємо під особливості вашого бренду.