Resimleri oluştur

Gemini API, Gemini 2.0 Flash Experimental ve Imagen 3 kullanılarak görsel oluşturmayı destekler. Bu kılavuz, her iki modeli de kullanmaya başlamanıza yardımcı olur.

Gemini'yi kullanarak resim oluşturma

Gemini 2.0 Flash Experimental, metin ve satır içi resim çıkışını destekler. Bu sayede, Gemini'yi kullanarak resimleri sohbet şeklinde düzenleyebilir veya metinlerin iç içe geçtiği çıktılar oluşturabilirsiniz (örneğin, tek bir turda metin ve resim içeren bir blog yayını oluşturabilirsiniz). Oluşturulan tüm resimler bir SynthID filigranı içerir. Google Yapay Zeka Stüdyosu'ndaki resimler ise görünür bir filigran da içerir.

Aşağıdaki örnekte, metin ve resim çıkışı oluşturmak için Gemini 2.0'ın nasıl kullanılacağı gösterilmektedir:

PythonNode.jsREST
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
Yapay zeka tarafından üretilmiş, uçan fantastik bir domuz resmi
Fantastik bir uçan domuzun yapay zeka tarafından üretilmiş resmi

Gemini, istem ve bağlama bağlı olarak farklı modlarda (metinden resme, metinden resme ve metne vb.) içerik oluşturur. Aşağıda bazı örnekler verilmiştir:

  • Metinden görüntü oluşturma
    • Örnek istem: "Arka planda havai fişeklerin olduğu Eyfel Kulesi resmi oluşturun."
  • Metin ve metinlerin resimlere dönüştürülmesi (alternatif olarak)
    • Örnek istem: "Paella tarifi içeren bir resim oluşturun."
  • Resim ve metin, resim ve metin (alternatif)
    • Örnek istem: (Mobilyalı bir odanın resmiyle) "Alanıma hangi renk koltuklar uygun olur? Resmi güncelleyebilir misiniz?"
  • Resim düzenleme (metin ve resimden resme)
    • Örnek istem: "Bu resmi karikatür gibi görünecek şekilde düzenleyin"
    • Örnek istem: [kedi resmi] + [yastık resmi] + "Bu yastığa kedimin kanaviçe resmini yap."
  • Çok turlu resim düzenleme (sohbet)
    • Örnek istemler: [mavi bir arabanın resmini yükleyin.] "Bu arabayı cabrioya dönüştür." "Şimdi rengi sarıya değiştirin."

Gemini ile resim düzenleme

Resim düzenleme işlemi yapmak için giriş olarak bir resim ekleyin. Aşağıdaki örnekte, base64 kodlu resimlerin yüklenmesi gösterilmektedir. Birden fazla resim ve daha büyük yükleme payları için resim girişi bölümünü inceleyin.

PythonNode.jsREST
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

Sınırlamalar

  • En iyi performans için aşağıdaki dilleri kullanın: EN, es-MX, ja-JP, zh-CN, hi-IN.
  • Resim oluşturma, ses veya video girişlerini desteklemez.
  • Resim oluşturma her zaman aşağıdakileri tetiklemeyebilir:
    • Model yalnızca metin döndürebilir. Resim çıktılarını açıkça istemeyi deneyin (ör. "resim oluştur", "çalışma ilerledikçe resim sağlayın", "resmi güncelle").
    • Model, üretme işlemini yarıda kesebilir. Tekrar deneyin veya farklı bir istem kullanın.
  • Gemini, bir resim için metin oluştururken en iyi sonucu almak istiyorsanız önce metni oluşturup ardından metnin yer aldığı bir resim isteğinde bulunmanız gerekir.

Model seçme

Görüntü oluşturmak için hangi modeli kullanmalısınız? Bu, kullanım alanınıza bağlıdır.

Gemini 2.0, bağlamla alakalı resimler oluşturmak, metin ve resimleri bir araya getirmek, dünya bilgisini dahil etmek ve resimlerle ilgili akıl yürütmek için en iyi seçenektir. Bu aracı, uzun metin dizilerine yerleştirilmiş doğru ve bağlama uygun görseller oluşturmak için kullanabilirsiniz. Ayrıca, sohbet boyunca bağlamı koruyarak resimleri doğal bir dille, sohbet tarzında da düzenleyebilirsiniz.

Resim kalitesi birinci önceliğinizse Imagen 3 daha iyi bir seçimdir. Imagen 3, fotorealizm, sanatsal ayrıntı ve izlenimcilik ya da anime gibi belirli sanatsal stillerde mükemmel sonuçlar verir. Imagen 3, ürün arka planlarını güncelleme, resimleri büyütme ve görsellere marka öğeleri ile stil ekleme gibi özel resim düzenleme görevleri için de iyi bir seçimdir. Logolar veya diğer markalı ürün tasarımları oluşturmak için Imagen 3'ü kullanabilirsiniz.

Imagen 3'ü kullanarak resim oluşturma

Gemini API, Google'ın en yüksek kaliteli metinden resme dönüştürme modeli olan Imagen 3'e erişim sağlar. Bu model, bir dizi yeni ve iyileştirilmiş özellik sunar. Imagen 3 şunları yapabilir:

  • Önceki modellere kıyasla daha iyi ayrıntılara, daha zengin ışıklandırmaya ve daha az dikkat dağıtıcı artefact'a sahip görüntüler oluşturun
  • Doğal dilde yazılmış istemleri anlama
  • Çeşitli biçim ve stillerde resimler oluşturun
  • Metni önceki modellere kıyasla daha etkili bir şekilde oluşturma
PythonREST
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
        }
      }'
Mutfaktaki iki tüylü tavşanın yapay zeka tarafından üretilmiş resmi
Mutfaktaki iki tüylü tavşanın yapay zeka tarafından üretilmiş resmi

Imagen şu anda yalnızca İngilizce istemleri ve aşağıdaki parametreleri desteklemektedir:

Imagen model parametreleri

  • number_of_images: Oluşturulacak resim sayısı (1 ile 4 arasında). Varsayılan değer 4'tür.
  • aspect_ratio: Oluşturulan resmin en boy oranını değiştirir. Desteklenen değerler: "1:1", "3:4", "4:3", "9:16" ve "16:9". Varsayılan değer: "1:1".
  • person_generation: Modelin insanların resimlerini oluşturmasına izin verin. Aşağıdaki değerler desteklenir:
    • "DONT_ALLOW": İnsanların yer aldığı resimlerin oluşturulmasını engelleyin.
    • "ALLOW_ADULT": Çocuklara ait değil, yetişkinlere ait görseller oluşturun. Bu varsayılan ayardır.

Sırada ne var?