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

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()

JavaScript

import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";

async function main() {

  const ai = new GoogleGenAI({ apiKey: "GEMINI_API_KEY" });

  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 response = await ai.models.generateContent({
    model: "gemini-2.0-flash-exp-image-generation",
    contents: contents,
    config: {
      responseModalities: ["Text", "Image"],
    },
  });
  for (const part of 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");
    }
  }
}

main();

ОТДЫХ

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()

JavaScript

import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";

async function main() {

  const ai = new GoogleGenAI({ apiKey: "GEMINI_API_KEY" });

  // 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: "Can you add a llama next to the image?" },
    {
      inlineData: {
        mimeType: "image/png",
        data: base64Image,
      },
    },
  ];

  // Set responseModalities to include "Image" so the model can generate an image
  const response = await ai.models.generateContent({
    model: "gemini-2.0-flash-exp-image-generation",
    contents: contents,
    config: {
      responseModalities: ["Text", "Image"],
    },
  });
  for (const part of 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");
    }
  }
}

main();

ОТДЫХ

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='Robot holding a red skateboard',
    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()

JavaScript

import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";

async function main() {

  const ai = new GoogleGenAI({ apiKey: "GEMINI_API_KEY" });

  const response = await ai.models.generateImages({
    model: 'imagen-3.0-generate-002',
    prompt: 'Robot holding a red skateboard',
    config: {
      numberOfImages: 4,
    },
  });

  let idx = 1;
  for (const generatedImage of response.generatedImages) {
    let imgBytes = generatedImage.image.imageBytes;
    const buffer = Buffer.from(imgBytes, "base64");
    fs.writeFileSync(`imagen-${idx}.png`, buffer);
    idx++;
  }
}

main();

ОТДЫХ

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": "Robot holding a red skateboard"
          }
        ],
        "parameters": {
          "sampleCount": 4
        }
      }'
Сгенерированное ИИ изображение двух пушистых кроликов на кухне
Сгенерированное ИИ изображение двух пушистых кроликов на кухне

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

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

(Соглашения об именах зависят от языка программирования.)

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

Что дальше