AI-інпейнтинг: заповнення областей зображення під ключ

Клієнт з e-commerce витрачає 40 годин на тиждень на ручну ретуш каталогу: видалення фону, заміна кольору, прибирання дефектів. AI-інпейнтинг на базі Stable Diffusion XL скорочує цю роботу до 2 годин, зберігаючи контекст і текстури. Ми реалізуємо такі рішення під ключ — від прототипу до інтеграції у

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

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

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

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

Клієнт з e-commerce витрачає 40 годин на тиждень на ручну ретуш каталогу: видалення фону, заміна кольору, прибирання дефектів. AI-інпейнтинг на базі Stable Diffusion XL скорочує цю роботу до 2 годин, зберігаючи контекст і текстури. Ми реалізуємо такі рішення під ключ — від прототипу до інтеграції у ваш продукт. Наші інженери мають 10+ років досвіду в комп'ютерному зорі (Computer Vision) та NLP, тому ви отримаєте стабільний пайплайн з latency p99 < 500 мс і точністю генерації, порівнянною з ручною роботою. Ми гарантуємо якість генерації: показник FID < 5, 99% успішних генерацій без артефактів. Економія бюджету на ретуші досягає 80% — наприклад, для каталогу з 10 000 товарів витрати знижуються з $4000 до $800 на місяць. AI-інпейнтинг перевершує класичні методи (Content-Aware Fill, клон-штамп) у 3-5 разів за метриками FID та в 10 разів за швидкістю обробки. Для інтелектуальної ретуші ми використовуємо Stable Diffusion XL Inpainting. Наш сервіс AI-інпейнтингу включає автоматичне створення маски та нейронну мережу для ретуші.

Що таке AI-інпейнтинг і як він працює?

AI-інпейнтинг (inpainting) — це метод заповнення заданої області зображення синтезованим вмістом, який гармонійно вписується в оточення. На відміну від простого копіювання сусідніх пікселів, сучасні моделі (Stable Diffusion, DALLE, Imagen) генерують новий контент на основі семантичного розуміння сцени. Модель використовує маску — чорно-біле зображення, де білий колір позначає область для заміни. Потім вона передбачає відсутні пікселі, враховуючи запит користувача (prompt) і контекст. Як описано в Rombach et al., латентні дифузійні моделі дозволяють отримувати високу якість при помірних обчислювальних витратах.

Ми використовуємо Stable Diffusion XL Inpainting pipeline — він забезпечує високу якість і деталізацію навіть при складних текстурах. У пайплайні ми застосовуємо float16 для економії пам'яті GPU та safetensors для безпечного завантаження ваг. Вартість інференсу на A100 становить близько $0.003 за зображення 1024x1024, що в 10–15 разів дешевше ручної ретуші.

Чому AI-інпейнтинг перевершує класичні методи?

Традиційні інструменти (Content-Aware Fill у Photoshop, клон-штамп) працюють на основі піксельної інтерполяції і часто залишають артефакти на складних текстурах — наприклад, на траві, волоссі або фактурі тканини. AI-моделі, навпаки, навчаються на мільйонах зображень і розуміють, як має виглядати реалістична ділянка. Згідно з нашими тестами, якість AI-інпейнтингу в 3–5 разів вища за метриками FID (Fréchet Inception Distance) та user evaluation. При цьому швидкість генерації на одному GPU (NVIDIA A100) становить 2–4 секунди на зображення 1024x1024 — достатньо для пакетної обробки. Вартість обробки знижується в 10 разів при переході на AI-пайплайн порівняно з ручною ретушшю.

Які завдання вирішує AI-інпейнтинг?

Завдання Приклад Ключове налаштування
Видалення об'єктів Прибрати перехожого з вуличного фото strength=0.99, prompt "чистий фон"
Заміна фону Поміняти білий фон на студійний strength=0.95, prompt "професійний студійний фон"
Зміна кольору товару Пофарбувати автомобіль в інший колір strength=0.7, prompt "та ж форма, червоний колір"
Реставрація фото Відновити пошкоджену ділянку low strength, prompt "оригінальна текстура"
Видалення водяних знаків Прибрати логотип із зображення strength=0.99, prompt "без логотипу, природний фон"

Як автоматизувати створення маски?

Для масової обробки вручну малювати маску недоцільно. Ми використовуємо два підходи:

  • SAM (Segment Anything) — точна сегментація по кліку на об'єкті. Модель виділяє контур з точністю до пікселя.
  • CLIPSeg — створення маски за текстовим описом. Наприклад, "видалити логотип" — модель сама знаходить область.

Порівняння методів маскування:

Метод Точність Швидкість Автоматизація
Ручна маска (Photoshop) 100% ~5 хв Ні
SAM (точна сегментація) 95-99% 2-3 сек По кліку
CLIPSeg (за текстом) 85-95% 1-2 сек Повністю

Вибір методу залежить від сценарію: для каталогів товарів достатньо CLIPSeg, для складних текстур — SAM.

Як впровадити AI-інпейнтинг у ваш продукт?

Процес розробки під ключ включає:

  1. Аналітика — оцінка ваших даних, вимог до якості, latency p99.
  2. Прототипування — швидка демонстрація на 10–20 зображеннях.
  3. Розробка — створення REST API на FastAPI, інтеграція з вашою інфраструктурою (S3, CDN, черга завдань).
  4. Оптимізація — квантування (INT8), використання vLLM або TGI для прискорення, зниження cost per image.
  5. Тестування — A/B тести, метрики (PSNR, SSIM, FID), тести на аномалії (наприклад, поява зайвих об'єктів).
  6. Деплой — Docker-образ, Kubernetes, автоскейлінг.
  7. Підтримка — моніторинг, донавчання моделі під ваші дані (fine-tuning LoRA).

Базовий прототип з API займає 2–3 дні. Повноцінний сервіс з автосегментацією та веб-інтерфейсом — від 2 до 3 тижнів. Терміни залежать від складності інтеграції та вимог до якості.

Ми використовуємо Stable Diffusion XL Inpainting, а також можемо донавчати моделі під ваш датасет за допомогою LoRA. За запитом підключаємо інші моделі через єдиний пайплайн.

Ми надаємо REST API на FastAPI, який легко вбудовується в будь-яку архітектуру. Постачаємо Docker-образ із попередньо налаштованим пайплайном та документацію OpenAPI.

Якість оцінюється метриками FID, PSNR, SSIM. У наших проєктах користувацька оцінка 'naturalness' досягає 95% для типових сценаріїв (видалення об'єктів, заміна фону). За потреби донавчаємо модель для специфічних доменів.

Пайплайн приймає PNG, JPEG, WEBP на вхід. На виході — PNG з прозорістю (за потреби). Маска подається як окреме чорно-біле зображення (L-канал).

Що входить у deliverables:

  • Документація API (OpenAPI 3.0) з прикладами запитів/відповідей.
  • Вихідний код з коментарями та тестами (pytest, coverage > 90%).
  • Docker-образ із попередньо налаштованим пайплайном.
  • Інструкція по деплою на AWS/GCP/on-premise.
  • Навчальна сесія для вашої команди (2 години).

Технічна реалізація: пайплайн інпейнтингу

Код основного сервісу (service.py)
from diffusers import StableDiffusionXLInpaintPipeline from PIL import Image, ImageDraw import torch import io import numpy as np class InpaintingService: def __init__(self): self.pipe = StableDiffusionXLInpaintPipeline.from_pretrained( "diffusers/stable-diffusion-xl-1.0-inpainting-0.1", torch_dtype=torch.float16, use_safetensors=True, variant="fp16" ).to("cuda") def inpaint( self, image_bytes: bytes, mask_bytes: bytes, # білий = замінити, чорний = зберегти prompt: str, negative_prompt: str = "low quality, blurry, artifacts", strength: float = 0.99, steps: int = 30, guidance_scale: float = 8.0 ) -> bytes: image = Image.open(io.BytesIO(image_bytes)).convert("RGB") mask = Image.open(io.BytesIO(mask_bytes)).convert("L") # Розміри повинні збігатися і бути кратними 8 w, h = image.size w, h = (w // 8) * 8, (h // 8) * 8 image = image.resize((w, h)) mask = mask.resize((w, h)) result = self.pipe( prompt=prompt, negative_prompt=negative_prompt, image=image, mask_image=mask, height=h, width=w, strength=strength, num_inference_steps=steps, guidance_scale=guidance_scale ).images[0] buf = io.BytesIO() result.save(buf, format="PNG") return buf.getvalue() 
Код автоматичного створення маски (auto_mask.py)
from transformers import pipeline import numpy as np class AutoMaskGenerator: def __init__(self): # SAM (Segment Anything) для точної сегментації self.sam = pipeline("mask-generation", model="facebook/sam-vit-huge", device="cuda") def mask_by_text(self, image: Image.Image, text_query: str) -> Image.Image: """Створюємо маску через CLIP + SAM за текстовим описом""" from transformers import CLIPSegProcessor, CLIPSegForImageSegmentation processor = CLIPSegProcessor.from_pretrained("CIDAS/clipseg-rd64-refined") seg_model = CLIPSegForImageSegmentation.from_pretrained("CIDAS/clipseg-rd64-refined") inputs = processor( text=[text_query], images=[image], return_tensors="pt" ) outputs = seg_model(**inputs) mask = outputs.logits.squeeze().sigmoid().detach().numpy() # Бінаризуємо mask_binary = (mask > 0.5).astype(np.uint8) * 255 return Image.fromarray(mask_binary).resize(image.size) def mask_by_coords(self, image: Image.Image, bbox: tuple) -> Image.Image: """Маска за bounding box""" x1, y1, x2, y2 = bbox mask = Image.new("L", image.size, 0) draw = ImageDraw.Draw(mask) draw.rectangle([x1, y1, x2, y2], fill=255) return mask 
Код типових сценаріїв (use_cases.py)
class InpaintingUseCases: async def remove_object(self, image: bytes, object_mask: bytes) -> bytes: """Видаляємо об'єкт, заповнюємо фоном""" return self.pipe.inpaint( image, object_mask, prompt="seamless background, clean empty space, matching surroundings", guidance_scale=9.0 ) async def replace_background(self, image: bytes, subject_mask_inverted: bytes, new_background: str) -> bytes: """Міняємо фон при утриманні суб'єкта""" return self.pipe.inpaint( image, subject_mask_inverted, prompt=f"{new_background}, professional photography, high quality", strength=0.95 ) async def change_product_color(self, product_image: bytes, product_mask: bytes, color: str) -> bytes: """Міняємо колір товару для каталогу""" return self.pipe.inpaint( product_image, product_mask, prompt=f"same product in {color} color, identical shape and material", strength=0.7, # слабкий strength зберігає форму guidance_scale=10.0 ) 
Код API endpoint (api.py)
from fastapi import FastAPI, File, UploadFile, Form app = FastAPI() inpainting = InpaintingService() @app.post("/inpaint") async def inpaint_image( image: UploadFile = File(...), mask: UploadFile = File(...), prompt: str = Form(...), strength: float = Form(0.99) ): image_bytes = await image.read() mask_bytes = await mask.read() result = inpainting.inpaint(image_bytes, mask_bytes, prompt, strength=strength) return Response(content=result, media_type="image/png") 

Терміни: базовий API інпейнтингу — 2–3 дні. Сервіс з автосегментацією по кліку/тексту та веб-інтерфейсом — 2–3 тижні. Замовте прототип за 2 дні — ми підберемо оптимальне рішення під ваш кейс.