Реалізація Image-to-Image генерації (стилізація)

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1566 послуг
Реалізація Image-to-Image генерації (стилізація)
Середній
~3-5 днів
Часті запитання

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

Етапи розробки AI-рішення

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

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

Розробка Image-to-Image генерації та стилізації

Image-to-Image (img2img) трансформує вихідне зображення за текстовим описом: стилізація фото під живопис, зміна фону, модифікація об'єктів, переробка дизайну. Параметр denoising_strength контролює ступінь змін (0=немає змін, 1=повна заміна).

Базовий img2img (diffusers)

from diffusers import StableDiffusionXLImg2ImgPipeline
from PIL import Image
import torch
import io

class Img2ImgService:
    def __init__(self):
        self.pipe = StableDiffusionXLImg2ImgPipeline.from_pretrained(
            "stabilityai/stable-diffusion-xl-refiner-1.0",
            torch_dtype=torch.float16,
            use_safetensors=True,
            variant="fp16"
        ).to("cuda")

    def stylize(
        self,
        input_image: bytes,
        prompt: str,
        negative_prompt: str = "low quality, blurry",
        strength: float = 0.7,   # 0.3–0.5 = лёгкая стилизация, 0.7–0.9 = сильное изменение
        steps: int = 30,
        guidance_scale: float = 7.5
    ) -> bytes:
        init_image = Image.open(io.BytesIO(input_image)).convert("RGB")
        # Размер должен быть кратен 64
        w, h = init_image.size
        w, h = (w // 64) * 64, (h // 64) * 64
        init_image = init_image.resize((w, h))

        result = self.pipe(
            prompt=prompt,
            negative_prompt=negative_prompt,
            image=init_image,
            strength=strength,
            num_inference_steps=steps,
            guidance_scale=guidance_scale
        ).images[0]

        buf = io.BytesIO()
        result.save(buf, format="PNG")
        return buf.getvalue()

Стилізація під художні стилі

STYLE_PROMPTS = {
    "oil_painting": "oil painting, thick brushstrokes, impasto technique, museum quality artwork",
    "watercolor": "watercolor painting, soft edges, transparent washes, paper texture",
    "anime": "anime style, cel shading, vibrant colors, Studio Ghibli aesthetic",
    "pencil_sketch": "pencil sketch, graphite drawing, hatching, monochrome",
    "pixel_art": "pixel art, 16-bit style, low resolution, retro game aesthetic",
    "3d_render": "3D render, octane render, photorealistic, studio lighting, 8k",
    "comic_book": "comic book style, bold outlines, halftone pattern, Ben-Day dots",
}

async def apply_artistic_style(
    image_bytes: bytes,
    style: str,
    strength: float = 0.65
) -> bytes:
    style_prompt = STYLE_PROMPTS.get(style, style)
    return stylize_service.stylize(image_bytes, style_prompt, strength=strength)

IP-Adapter для стиль-референса

from diffusers import StableDiffusionXLPipeline
from diffusers.utils import load_image
import torch

# IP-Adapter переносит стиль/содержимое reference изображения
pipe = StableDiffusionXLPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    torch_dtype=torch.float16
).to("cuda")

pipe.load_ip_adapter(
    "h94/IP-Adapter",
    subfolder="sdxl_models",
    weight_name="ip-adapter_sdxl.bin"
)
pipe.set_ip_adapter_scale(0.6)

def stylize_with_reference(
    content_image: bytes,
    style_reference: bytes,
    prompt: str
) -> bytes:
    content = Image.open(io.BytesIO(content_image))
    style = Image.open(io.BytesIO(style_reference))

    result = pipe(
        prompt=prompt,
        ip_adapter_image=style,  # стиль берём из reference
        image=content,
        num_inference_steps=30
    ).images[0]

    buf = io.BytesIO()
    result.save(buf, format="PNG")
    return buf.getvalue()

Застосування по галузях

Галузь Застосування Strength
E-commerce Зміна фону товару 0.4-0.6
Медіа Стилізація фото для статті 0.5-0.7
Геймдев Концепт арт із скетчу 0.6-0.8
Архітектура Візуалізація із креслення 0.5-0.7
Мода Зміна кольору/фактури одягу 0.3-0.5

Терміни: img2img API - 1-2 дні. Повноцінний сервіс стилізації з пресетами та веб-інтерфейсом – 1-2 тижні.