Создание изображений

API Gemini поддерживает создание изображений с помощью Gemini 2.0 Flash Experimental и Imagen 3 . Это руководство поможет вам начать работу с обеими моделями.

Создание изображений с помощью Gemini

Gemini 2.0 Flash Experimental поддерживает возможность вывода текста и встроенных изображений. Это позволяет вам использовать Gemini для редактирования изображений в диалоговом режиме или создания результатов с переплетенным текстом (например, создание сообщения в блоге с текстом и изображениями за один ход). Все сгенерированные изображения содержат водяной знак SynthID , а изображения в Google AI Studio также включают видимый водяной знак.

В следующем примере показано, как использовать Gemini 2.0 для генерации вывода текста и изображений:

from google import genai
from google.genai import types
from PIL import Image
from io import BytesIO
import base64

client = genai.Client()

contents = ('Hi, can you create a 3d rendered image of a pig '
            'with wings and a top hat flying over a happy '
            'futuristic scifi city with lots of greenery?')

response = client.models.generate_content(
    model="gemini-2.0-flash-exp-image-generation",
    contents=contents,
    config=types.GenerateContentConfig(
      response_modalities=['Text', 'Image']
    )
)

for part in response.candidates[0].content.parts:
  if part.text is not None:
    print(part.text)
  elif part.inline_data is not None:
    image = Image.open(BytesIO((part.inline_data.data)))
    image.save('gemini-native-image.png')
    image.show()
const { GoogleGenerativeAI } = require("@google/generative-ai");
const fs = require("fs");

const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);

async function generateImage() {
  const contents = "Hi, can you create a 3d rendered image of a pig " +
                  "with wings and a top hat flying over a happy " +
                  "futuristic scifi city with lots of greenery?";

  // Set responseModalities to include "Image" so the model can generate  an image
  const model = genAI.getGenerativeModel({
    model: "gemini-2.0-flash-exp-image-generation",
    generationConfig: {
        responseModalities: ['Text', 'Image']
    },
  });

  try {
    const response = await model.generateContent(contents);
    for (const part of  response.response.candidates[0].content.parts) {
      // Based on the part type, either show the text or save the image
      if (part.text) {
        console.log(part.text);
      } else if (part.inlineData) {
        const imageData = part.inlineData.data;
        const buffer = Buffer.from(imageData, 'base64');
        fs.writeFileSync('gemini-native-image.png', buffer);
        console.log('Image saved as gemini-native-image.png');
      }
    }
  } catch (error) {
    console.error("Error generating content:", error);
  }
}

generateImage();
curl -s -X POST \
  "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-exp-image-generation:generateContent?key=$GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [{
      "parts": [
        {"text": "Hi, can you create a 3d rendered image of a pig with wings and a top hat flying over a happy futuristic scifi city with lots of greenery?"}
      ]
    }],
    "generationConfig":{"responseModalities":["Text","Image"]}
  }' \
  | grep -o '"data": "[^"]*"' \
  | cut -d'"' -f4 \
  | base64 --decode > gemini-native-image.png
Изображение фантастической летающей свиньи, созданное искусственным интеллектом
Изображение фантастической летающей свиньи, созданное искусственным интеллектом

В зависимости от подсказки и контекста Gemini будет генерировать контент в разных режимах (текст в изображение, текст в изображение и текст и т. д.). Вот несколько примеров:

  • Текст в изображение
    • Пример запроса: «Создать изображение Эйфелевой башни с фейерверком на заднем плане».
  • Текст в изображение(я) и текст (чередующийся)
    • Пример приглашения: «Создать иллюстрированный рецепт паэльи».
  • Изображения и текст в изображения и текст (чередующиеся)
    • Пример подсказки: (с изображением меблированной комнаты) «Дива каких еще цветов подойдут в моем пространстве? Можете ли вы обновить изображение?»
  • Редактирование изображений (текст и изображение в изображение)
    • Пример подсказки: «Отредактируйте это изображение, чтобы оно выглядело как мультфильм».
    • Пример подсказки: [изображение кота] + [изображение подушки] + «Вышейте крестиком моего кота на этой подушке».
  • Многооборотное редактирование изображений (чат)
    • Пример подсказки: [загрузите изображение синего автомобиля.] «Превратите эту машину в кабриолет». «Теперь измените цвет на желтый».

Редактирование изображений с помощью Gemini

Чтобы выполнить редактирование изображения, добавьте изображение в качестве входных данных. В следующем примере демонстрируется загрузка изображений в кодировке Base64. Если вы хотите получить несколько изображений и более крупные полезные данные, проверьте раздел ввода изображений .

from google import genai
from google.genai import types
from PIL import Image
from io import BytesIO

import PIL.Image

image = PIL.Image.open('/path/to/image.png')

client = genai.Client()

text_input = ('Hi, This is a picture of me.'
            'Can you add a llama next to me?',)

response = client.models.generate_content(
    model="gemini-2.0-flash-exp-image-generation",
    contents=[text_input, image],
    config=types.GenerateContentConfig(
      response_modalities=['Text', 'Image']
    )
)

for part in response.candidates[0].content.parts:
  if part.text is not None:
    print(part.text)
  elif part.inline_data is not None:
    image = Image.open(BytesIO(part.inline_data.data))
    image.show()
const { GoogleGenerativeAI } = require("@google/generative-ai");
const fs = require("fs");

const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);

async function generateImage() {
    // Load the image from the local file system
    const imagePath = '/path/to/image.png';
    const imageData = fs.readFileSync(imagePath);
    const base64Image = imageData.toString('base64');

    // Prepare the content parts
    const contents = [
        { text: "Hi, This is a picture of me. Can you add a llama next to me?" },
        {
          inlineData: {
            mimeType: 'image/png',
            data: base64Image
          }
        }
      ];

  // Set responseModalities to include "Image" so the model can generate an image
  const model = genAI.getGenerativeModel({
    model: "gemini-2.0-flash-exp-image-generation",
    generationConfig: {
        responseModalities: ['Text', 'Image']
    },
  });

  try {
    const response = await model.generateContent(contents);
    for (const part of  response.response.candidates[0].content.parts) {
      // Based on the part type, either show the text or save the image
      if (part.text) {
        console.log(part.text);
      } else if (part.inlineData) {
        const imageData = part.inlineData.data;
        const buffer = Buffer.from(imageData, 'base64');
        fs.writeFileSync('gemini-native-image.png', buffer);
        console.log('Image saved as gemini-native-image.png');
      }
    }
  } catch (error) {
    console.error("Error generating content:", error);
  }
}

generateImage();
IMG_PATH=/path/to/your/image1.jpeg

if [[ "$(base64 --version 2>&1)" = *"FreeBSD"* ]]; then
  B64FLAGS="--input"
else
  B64FLAGS="-w0"
fi

IMG_BASE64=$(base64 "$B64FLAGS" "$IMG_PATH" 2>&1)

curl -X POST \
  "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-exp-image-generation:generateContent?key=$GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -d "{
      \"contents\": [{
        \"parts\":[
            {\"text\": \"'Hi, This is a picture of me. Can you add a llama next to me\"},
            {
              \"inline_data\": {
                \"mime_type\":\"image/jpeg\",
                \"data\": \"$IMG_BASE64\"
              }
            }
        ]
      }],
      \"generationConfig\": {\"responseModalities\": [\"Text\", \"Image\"]}
    }"  \
  | grep -o '"data": "[^"]*"' \
  | cut -d'"' -f4 \
  | base64 --decode > gemini-edited-image.png

Ограничения

  • Для достижения наилучшей производительности используйте следующие языки: EN, es-MX, ja-JP, zh-CN, hi-IN.
  • Генерация изображений не поддерживает аудио- и видеовходы.
  • Генерация изображения не всегда может срабатывать:
    • Модель может выводить только текст. Попробуйте явно запросить выходные данные изображения (например, «создать изображение», «предоставить изображения по мере продвижения», «обновить изображение»).
    • Модель может перестать генерировать на полпути. Попробуйте еще раз или попробуйте другое приглашение.
  • При создании текста для изображения Gemini работает лучше всего, если вы сначала генерируете текст, а затем запрашиваете изображение с текстом.

Выберите модель

Какую модель следует использовать для создания изображений? Это зависит от вашего варианта использования.

Gemini 2.0 лучше всего подходит для создания контекстно-релевантных изображений, объединения текста и изображений, включения мировых знаний и рассуждений об изображениях. Вы можете использовать его для создания точных, контекстуально релевантных визуальных эффектов, встроенных в длинные текстовые последовательности. Вы также можете редактировать изображения в диалоговом режиме, используя естественный язык, сохраняя при этом контекст на протяжении всего разговора.

Если качество изображения является вашим главным приоритетом, то Imagen 3 — лучший выбор. Imagen 3 отличается фотореализмом, художественными деталями и конкретными художественными стилями, такими как импрессионизм или аниме. Imagen 3 также является хорошим выбором для специализированных задач по редактированию изображений, таких как обновление фона продукта, масштабирование изображений и придание фирменного стиля и стиля визуальным элементам. Вы можете использовать Imagen 3 для создания логотипов или дизайна другой фирменной продукции.

Создавайте изображения с помощью Imagen 3

Gemini API обеспечивает доступ к Imagen 3 , модели Google для преобразования текста в изображение высочайшего качества, обладающей рядом новых и улучшенных возможностей. Imagen 3 может делать следующее:

  • Создавайте изображения с большей детализацией, более насыщенным освещением и меньшим количеством отвлекающих артефактов, чем предыдущие модели.
  • Понимать подсказки, написанные на естественном языке
  • Создавайте изображения в широком диапазоне форматов и стилей.
  • Рендеринг текста более эффективно, чем в предыдущих моделях
from google import genai
from google.genai import types
from PIL import Image
from io import BytesIO

client = genai.Client(api_key='GEMINI_API_KEY')

response = client.models.generate_images(
    model='imagen-3.0-generate-002',
    prompt='Fuzzy bunnies in my kitchen',
    config=types.GenerateImagesConfig(
        number_of_images= 4,
    )
)
for generated_image in response.generated_images:
  image = Image.open(BytesIO(generated_image.image.image_bytes))
  image.show()
curl -X POST \
    "https://generativelanguage.googleapis.com/v1beta/models/imagen-3.0-generate-002:predict?key=GEMINI_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
        "instances": [
          {
            "prompt": "Fuzzy bunnies in my kitchen"
          }
        ],
        "parameters": {
          "sampleCount": 4
        }
      }'
Сгенерированное ИИ изображение двух пушистых кроликов на кухне
Сгенерированное ИИ изображение двух пушистых кроликов на кухне

В настоящее время Imagen поддерживает только запросы на английском языке и следующие параметры:

Параметры модели изображения

  • number_of_images : количество генерируемых изображений от 1 до 4 (включительно). По умолчанию — 4.
  • aspect_ratio : изменяет соотношение сторон сгенерированного изображения. Поддерживаемые значения: "1:1" , "3:4" , "4:3" , "9:16" и "16:9" . По умолчанию установлено "1:1" .
  • person_generation : разрешить модели генерировать изображения людей. Поддерживаются следующие значения:
    • "DONT_ALLOW" : блокировать создание изображений людей.
    • "ALLOW_ADULT" : создавать изображения взрослых, но не детей. Это значение по умолчанию.

Что дальше