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

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

Направления AI-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1460
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1314
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1013
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1275
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    727
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1019

Клиент из e-commerce тратит 40 часов в неделю на ручную ретушь каталога: удаление фона, замена цвета, уборка дефектов. AI-инпейнтинг на базе Stable Diffusion XL сокращает эту работу до 2 часов, сохраняя контекст и текстуры. Мы реализуем такие решения под ключ — от прототипа до интеграции в ваш продукт. Наши инженеры имеют 10+ лет опыта в Computer Vision и NLP, поэтому вы получите стабильный пайплайн с latency p99 < 500 мс и точностью генерации, сопоставимой с ручной работой. Экономия бюджета на ретуши достигает 80%. Получите консультацию по вашему кейсу — мы оценим его за 1 день.

Что такое 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).

Что входит в 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 дня — мы подберём оптимальное решение под ваш кейс.