|

Освоение 3 способов реализации и полного кода для API Nano Banana Inpainting (локальное редактирование изображений)

nano-banana-inpainting-api-image-editing-guide-ru 图示

При редактировании изображений с помощью ИИ, многие разработчики задаются вопросом: можно ли изменить только определенную часть изображения, не затрагивая остальное? Именно эту проблему решает технология inpainting (локальное восстановление/редактирование).

Хорошая новость: модели серии Nano Banana действительно поддерживают локальное редактирование (inpainting), и предлагают более мощные возможности редактирования без маски (mask-free) по сравнению с традиционными подходами. В этой статье подробно рассматриваются 3 способа реализации локального редактирования через API, которые помогут вам быстро выбрать наиболее подходящий технический путь.

Ключевая ценность: после прочтения этой статьи вы освоите 3 способа вызова API для inpainting в Nano Banana и сможете реализовать профессиональные функции локального редактирования изображений с помощью ИИ в своих проектах.


Полный обзор возможностей Nano Banana Inpainting: 3 подхода к локальному редактированию изображений

У многих разработчиков есть распространённое заблуждение: они думают, что Nano Banana может только генерировать изображения и не поддерживает inpainting. На самом деле, Nano Banana не только поддерживает inpainting, но и предлагает несколько способов его реализации.

Подход Модель Принцип работы Точность Скорость Подходящие сценарии
Подход 1: Редактирование на естественном языке без маски Nano Banana 2 Текстовая инструкция + исходное изображение ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ Быстрое редактирование, замена фона
Подход 2: Точное редактирование с маской Nano Banana Pro Edit Маска + текстовая инструкция + исходное изображение ⭐⭐⭐⭐⭐ ⭐⭐⭐ Точный контроль над областью
Подход 3: Итеративное редактирование в диалоге Nano Banana 2 Многораундовый диалог + контекст ⭐⭐⭐⭐ ⭐⭐⭐ Сложное редактирование, постепенная оптимизация

Ключевые отличия Nano Banana Inpainting от традиционных подходов

Традиционные инструменты для inpainting (например, Stable Diffusion Inpainting) требуют от разработчика вручную рисовать чёрно-белую маску (mask), чтобы указать область для изменения. Основной прорыв Nano Banana заключается в следующем:

  • Управление через семантическое понимание: Модель понимает инструкции на естественном языке, такие как "замени фон на пляж", и автоматически определяет область фона.
  • Контекстная осведомлённость: При локальном редактировании автоматически сопоставляется освещение, перспектива и цвета окружающей среды.
  • Без маски: В большинстве сценариев редактирования не требуется ручное создание маски, что снижает порог входа для разработчиков.

🎯 Техническая рекомендация: Возможности inpainting в Nano Banana предоставляются через стандартный интерфейс, совместимый с OpenAI. Мы рекомендуем выполнять вызовы через платформу APIYI apiyi.com, чтобы централизованно управлять вызовами обеих моделей — Nano Banana 2 и Nano Banana Pro — и легко переключаться между подходами для тестирования.


Подход 1: Inpainting на естественном языке без маски (рекомендуется для новичков)

Это одна из самых мощных функций inpainting в Nano Banana — для локального редактирования не нужна маска, достаточно текстового описания.

Основной принцип Mask-Free Inpainting в Nano Banana

Nano Banana 2 (на основе Gemini 3.1 Flash Image) имеет встроенную возможность семантической сегментации. Модель выполняет следующие шаги:

  1. Анализ инструкции редактирования — понимает, какую часть изображения вы хотите изменить.
  2. Автоматическое определение области — с помощью семантического понимания локализует область пикселей для изменения.
  3. Контекстный вывод — анализирует направление света, перспективу, пространственные 3D-отношения.
  4. Точная замена — изменяет целевую область, сохраняя согласованность с окружающей средой.

Минимальный пример кода для Mask-Free Inpainting

import openai
import base64

client = openai.OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.apiyi.com/v1"  # Единый интерфейс APIYI
)

response = client.chat.completions.create(
    model="gemini-2.5-flash-image-preview",
    messages=[{
        "role": "user",
        "content": [
            {"type": "text", "text": "Remove the person from this photo and fill the area with the surrounding background naturally"},
            {"type": "image_url", "image_url": {"url": "https://example.com/your-photo.jpg"}}
        ]
    }]
)

# Извлечение отредактированного изображения
content = response.choices[0].message.content
print("Редактирование завершено, извлекаем данные изображения...")

Шаблоны частых инструкций для редактирования в Nano Banana Inpainting

Тип редактирования Шаблон инструкции на английском Описание на русском
Удаление объекта Remove the [object] from the image and fill naturally Удалить указанный объект и естественно заполнить область
Замена фона Replace the background with [new scene] Заменить фоновую сцену
Добавление элемента Add a [object] to the [position] of the image Добавить элемент в указанную позицию изображения
Изменение свойства Change the [object]'s color from [A] to [B] Изменить цвет объекта
Размытие фона Blur the background while keeping the foreground sharp Размыть фон, сохранив резкость переднего плана
Устранение дефектов Remove the stain/scratch from the [area] Удалить пятно или царапину с области
Корректировка позы Change the person's pose to [description] Изменить позу человека
Смена стиля Convert the [area] to watercolor painting style Преобразовать область в стиль акварельной живописи

nano-banana-inpainting-api-image-editing-guide-ru 图示

Посмотреть полный код для Mask-Free Inpainting (с сохранением изображений и обработкой ошибок)
#!/usr/bin/env python3
"""
Полный пример Mask-Free Inpainting в Nano Banana
Локальное редактирование изображений с помощью инструкций на естественном языке
"""

import openai
import base64
import re
from datetime import datetime

# Конфигурация
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.apiyi.com/v1"

client = openai.OpenAI(api_key=API_KEY, base_url=BASE_URL)

def inpaint_image(image_url: str, edit_instruction: str, output_path: str = None):
    """
    Редактирование изображения с помощью Mask-Free Inpainting

    Args:
        image_url: URL исходного изображения или base64 data URI
        edit_instruction: Инструкция для редактирования на английском
        output_path: Путь для сохранения файла (опционально)
    Returns:
        bool: Успешно ли выполнено
    """
    print(f"📝 Инструкция редактирования: {edit_instruction}")
    print(f"🖼️  Исходное изображение: {image_url[:80]}...")

    try:
        response = client.chat.completions.create(
            model="gemini-2.5-flash-image-preview",
            messages=[{
                "role": "user",
                "content": [
                    {"type": "text", "text": f"Generate an image: {edit_instruction}"},
                    {"type": "image_url", "image_url": {"url": image_url}}
                ]
            }]
        )

        content = response.choices[0].message.content

        # Извлечение данных изображения в base64
        patterns = [
            r'data:image/[^;]+;base64,([A-Za-z0-9+/=]+)',
            r'([A-Za-z0-9+/=]{1000,})'
        ]

        base64_data = None
        for pattern in patterns:
            match = re.search(pattern, content)
            if match:
                base64_data = match.group(1)
                break

        if not base64_data:
            print(f"⚠️ Данные изображения не найдены, ответ модели: {content[:200]}")
            return False

        # Сохранение изображения
        if not output_path:
            timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
            output_path = f"inpainted_{timestamp}.png"

        image_bytes = base64.b64decode(base64_data)
        with open(output_path, 'wb') as f:
            f.write(image_bytes)

        print(f"✅ Редактирование завершено! Сохранено в: {output_path} ({len(image_bytes):,} байт)")
        return True

    except Exception as e:
        print(f"❌ Ошибка редактирования: {e}")
        return False


# Пример использования
if __name__ == "__main__":
    # Пример 1: Удаление объекта
    inpaint_image(
        image_url="https://example.com/photo-with-person.jpg",
        edit_instruction="Remove the person on the right side and fill with natural background",
        output_path="result_remove_person.png"
    )

    # Пример 2: Замена фона
    inpaint_image(
        image_url="https://example.com/portrait.jpg",
        edit_instruction="Replace the background with a sunset beach scene, keep the person unchanged",
        output_path="result_new_background.png"
    )

    # Пример 3: Изменение локального свойства
    inpaint_image(
        image_url="https://example.com/room.jpg",
        edit_instruction="Change the wall color to light blue, keep furniture unchanged",
        output_path="result_wall_color.png"
    )

Вариант 2: Точное Inpainting на основе маски (продвинутый метод)

Когда вам нужен пиксельный контроль над областью редактирования, вы можете использовать режим маскирования в Nano Banana Pro Edit.

Как работает Inpainting на основе маски

Этот режим требует предоставления черно-белого изображения-маски (mask). Белые области на маске обозначают части, которые нужно изменить, а черные — части, которые должны остаться нетронутыми.

Параметр Описание Требования
Исходное изображение Изображение для редактирования PNG/JPEG, рекомендуется не более 4096×4096 пикселей
Изображение-маска Черно-белое изображение, отмечающее область редактирования Должно быть того же размера, что и исходное; белый цвет = область редактирования
Инструкция для редактирования Описание того, чем заполнить белую область Лучше всего работают инструкции на английском

Пример кода для Inpainting на основе маски

import openai

client = openai.OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.apiyi.com/v1"
)

# Мультимодальный ввод: исходное изображение + маска + текстовая инструкция
response = client.chat.completions.create(
    model="gemini-2.5-flash-image-preview",
    messages=[{
        "role": "user",
        "content": [
            {
                "type": "text",
                "text": "Generate an image: The first image is the original photo. The second image is a mask where white areas indicate regions to edit. Replace the masked area with a beautiful garden scene."
            },
            {"type": "image_url", "image_url": {"url": "https://example.com/original.jpg"}},
            {"type": "image_url", "image_url": {"url": "https://example.com/mask.png"}}
        ]
    }]
)

Когда выбирать Inpainting на основе маски

  • Нужен точный контроль над границами редактирования (например, изменить только рубашку, не затронув кожу)
  • Область редактирования имеет неправильную форму, которую сложно точно описать естественным языком
  • Требуется пакетная обработка нескольких изображений с одинаковой областью
  • Профессиональные сценарии с высокими требованиями к плавности переходов на границах

💡 Практический совет: Самый простой способ создать маску — использовать кисть в Photoshop или GIMP, чтобы закрасить белым область для изменения, а затем экспортировать результат в PNG. Если создание маски вручную кажется слишком трудоемким, в большинстве случаев достаточно будет режима Mask-Free из первого варианта.


Вариант 3: Многораундовое диалоговое Inpainting (итеративная оптимизация)

Nano Banana 2 поддерживает многораундовое редактирование в рамках одной сессии, где каждый следующий раунд может вносить изменения в результат предыдущего. Этот подход особенно хорошо подходит для сценариев, требующих тонкой настройки.

Процесс многораундового диалогового Inpainting

Раунд 1: "Замени фон на офис" → Получаем отредактированное изображение A
Раунд 2: Изображение A + "Замени чашку на столе на ноутбук" → Получаем изображение B
Раунд 3: Изображение B + "Сделай освещение ярче, добавь эффект света из окна" → Получаем финальное изображение C

Реализация многораундового Inpainting в коде

import openai

client = openai.OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.apiyi.com/v1"
)

# Создаем многораундовый диалог
messages = [
    # Раунд 1: Начальное редактирование
    {
        "role": "user",
        "content": [
            {"type": "text", "text": "Replace the background with a modern office scene"},
            {"type": "image_url", "image_url": {"url": "https://example.com/photo.jpg"}}
        ]
    }
]

# Запрос для первого раунда
response_1 = client.chat.completions.create(
    model="gemini-2.5-flash-image-preview",
    messages=messages
)

# Добавляем результат первого раунда в контекст
messages.append({"role": "assistant", "content": response_1.choices[0].message.content})

# Раунд 2: Продолжаем редактирование на основе предыдущего результата
messages.append({
    "role": "user",
    "content": [{"type": "text", "text": "Now add a laptop on the desk and make the lighting warmer"}]
})

response_2 = client.chat.completions.create(
    model="gemini-2.5-flash-image-preview",
    messages=messages
)

nano-banana-inpainting-api-image-editing-guide-ru 图示


Сравнение версий модели Nano Banana Inpainting

Выбор конкретной модели Nano Banana зависит от ваших задач по доработке изображений (inpainting):

Критерий сравнения Nano Banana 2 Nano Banana Pro Пояснение
ID модели gemini-3.1-flash-image-preview gemini-3.0-pro-image
Редактирование без маски (Mask-Free) ✅ Поддерживается ✅ Поддерживается Обе поддерживают редактирование на естественном языке
Точность редактирования ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ У Pro более тонкое семантическое понимание
Скорость генерации 3-8 секунд 10-20 секунд Архитектура Flash быстрее в 3-5 раз
Максимальное разрешение 4K (4096px) 2K (2048px) У Banana 2 выше разрешение
Многошаговое редактирование ✅ Поддерживается ✅ Поддерживается Обе поддерживают многораундовый диалог
Стоимость API ~$0.02/вызов ~$0.04/вызов Banana 2 дешевле в два раза
Рекомендуемый сценарий Пакетное редактирование, быстрые итерации Профессиональный ретушь, задачи высокой точности Обе можно вызывать одновременно через платформу APIYI apiyi.com

Рекомендации по выбору модели Nano Banana Inpainting

  • Повседневное редактирование, пакетная обработка: Выбирайте Nano Banana 2 — высокая скорость, низкая стоимость, разрешение 4K.
  • Профессиональный ретушь, коммерческие материалы: Выбирайте Nano Banana Pro — самое точное семантическое понимание и цветопередача.
  • Не уверены, какую выбрать: Сначала протестируйте Nano Banana 2, и если результат не устроит, переключитесь на Pro.

Различия между Nano Banana Inpainting и веб-редактором Gemini

Многие пользователи, попробовав функцию редактирования изображений в веб-версии Gemini (gemini.google.com), задаются вопросом: Может ли этот API делать то же самое?

Ответ: Может, но есть различия:

Критерий Веб-версия Gemini Nano Banana API
Способ взаимодействия Выделение мышью + текстовое описание Чистый вызов API (текст + изображение)
Создание маски Встроенные инструменты кисти в веб-интерфейсе Необходимо самостоятельно подготовить маску или использовать режим mask-free
Точность контроля Визуальное выделение, интуитивно понятно Контроль на уровне кода, возможность автоматизации
Пакетная обработка Не поддерживается ✅ Поддерживается пакетный вызов
Водяной знак Присутствует водяной знак SynthID Присутствует водяной знак SynthID
Возможности интеграции Только для веб-использования Можно встраивать в любое приложение
Стоимость Бесплатно (с ограничениями) Оплата за вызов

Ключевое различие: Редактирование изображений в веб-версии Gemini более интерактивно и визуально — пользователь может рисовать область выделения мышью. Основное преимущество версии API — автоматизация и масштабируемость — вы можете обрабатывать изображения пакетно в коде и встраивать это в рабочий процесс вашего продукта.

🎯 Техническая рекомендация: Если ваша задача — интегрировать функцию ИИ-редактирования изображений в собственный продукт, API — единственный выбор. Через платформу APIYI apiyi.com вы можете получить более стабильный доступ к интерфейсам и техническую поддержку.

Лучшие практики Nano Banana Inpainting

Оптимизация промптов для редактирования

Хороший промпт для редактирования значительно улучшает результат inpainting:

Приём Плохой промпт ❌ Хороший промпт ✅
Конкретное описание "Измени фон" "Замени фон на пляж на закате, тёплый золотистый свет"
Указание области сохранения "Поменять фон" "Замени фон, полностью сохрани человека неизменным"
Указание освещения "Добавить свет" "Добавить мягкое тёплое освещение с верхнего левого угла, создающее нежные тени"
Описание материала "Поменять пол" "Замени пол на светлый дубовый паркет с видимой текстурой древесины"
Ограничение области "Изменить цвет" "Изменить только цвет кузова машины на тёмно-синий, сохранить окна и шины неизменными"

Рекомендации по оптимизации производительности Nano Banana Inpainting

  1. Предобработка входного изображения — рекомендуется размер от 1024×1024 до 2048×2048, большие размеры увеличат время обработки.
  2. Приоритет английским промптам — точность понимания английских промптов заметно выше, чем китайских.
  3. Фокусировка на одном изменении за раз — сложное редактирование разбивайте на несколько этапов, на каждом этапе делайте только одну вещь.
  4. Добавление префикса "Generate an image:" — чётко указывает модели, что нужно вывести изображение, а не текстовый ответ.

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

Вопрос 1: API Nano Banana действительно поддерживает inpainting? Разве это не только в веб-версии?

Да, API Nano Banana полностью поддерживает inpainting (локальное редактирование изображений). Nano Banana 2 (gemini-3.1-flash-image-preview) и Nano Banana Pro (gemini-3.0-pro-image) оба поддерживают редактирование изображений через API. Самая мощная особенность — это mask-free inpainting (inpainting без маски). Вам не нужно создавать маску, достаточно описать задачу редактирования естественным языком, и модель автоматически определит и изменит целевую область. Через платформу APIYI apiyi.com можно быстро получить API-ключ и начать тестирование.

Вопрос 2: Что работает лучше — Mask-Free или Mask-Based Inpainting?

Зависит от сценария. Для таких распространённых задач, как замена фона, удаление объектов, изменение цвета, режима Mask-Free обычно достаточно, и он удобнее. Для сценариев, требующих предельно точных границ (например, изменение узора на рубашке, не затрагивая кожу), режим Mask-Based обеспечивает более точный контроль. Рекомендуется сначала протестировать в режиме Mask-Free, и если результат не устраивает, использовать маску. Платформа APIYI apiyi.com поддерживает вызовы в обоих режимах, переключение очень удобно.

Вопрос 3: Inpainting в Nano Banana может достичь уровня Photoshop?

Во многих сценариях он уже очень близок или даже превосходит функцию "Заполнение с учётом содержимого" (Content-Aware Fill) в Photoshop. Преимущество Nano Banana в том, что он понимает семантику сцены — например, удалив человека, он понимает, какое здание или пейзаж должно быть на заднем плане, а не просто заполняет пространство текстурой. Однако для чрезвычайно тонкой коммерческой ретуши рекомендуется использовать Photoshop для окончательной доводки.

Вопрос 4: Почему иногда мой промпт для редактирования не срабатывает, и модель генерирует совершенно новое изображение?

Это распространённая проблема. Убедитесь, что ваш промпт чётко выражает "редактирование", а не "генерацию". Рекомендуется добавлять префикс "Generate an image:" и явно указывать, какие части исходного изображения нужно сохранить. Например: "Generate an image: Edit the original photo - replace only the sky with a starry night, keep everything else exactly the same". Если проблема сохраняется, попробуйте добавить "Do not change the composition or layout", чтобы ограничить модель.

Вопрос 5: Какова стоимость вызова API для Nano Banana Inpainting?

Редактирование изображений в Nano Banana 2 стоит около $0.02 за раз, в Nano Banana Pro — около $0.04 за раз. При вызове через платформу APIYI apiyi.com можно получить более выгодную цену, фактическая стоимость составляет около 0.14 юаня за раз (Nano Banana 2), что подходит для сценариев пакетного редактирования изображений.


Итог

Возможности Nano Banana для локального редактирования изображений (inpainting) гораздо мощнее, чем представляют себе многие разработчики. Каждый из 3-х подходов подходит для своих сценариев:

  • Редактирование на естественном языке без маски (Mask-Free) — самый удобный, подходит для большинства случаев, рекомендуется использовать в первую очередь.
  • Точное редактирование с маской (Mask-Based) — самый точный, подходит для профессионального контроля на уровне пикселей.
  • Итеративное редактирование в многораундовом диалоге — самый гибкий, подходит для сложного постепенного редактирования.

Независимо от выбранного подхода, суть заключается в отправке изображения и инструкций по редактированию через стандартный Chat Completions API. Рекомендуем быстро начать тестирование через платформу APIYI (apiyi.com) — вы сможете запустить свой первый пример с inpainting уже через 5 минут.


Ссылки на материалы

  1. Официальная документация Google AI — Nano Banana Image Generation

    • Ссылка: ai.google.dev/gemini-api/docs/image-generation
    • Описание: Полная документация по API для генерации и редактирования изображений Gemini.
  2. Блог Google Developers — Gemini 2.5 Flash Image

    • Ссылка: developers.googleblog.com/introducing-gemini-2-5-flash-image/
    • Описание: Подробное описание архитектуры и возможностей Nano Banana.
  3. DataCamp — Gemini 2.5 Flash Image Complete Guide

    • Ссылка: datacamp.com/tutorial/gemini-2-5-flash-image-guide
    • Описание: Полное практическое руководство с примерами кода.

📝 Автор: Команда APIYI | По вопросам технического обсуждения и подключения API посетите apiyi.com

Похожие записи