L'API Gemini supporta la generazione di immagini utilizzando Gemini 2.0 Flash Experimental e utilizzando Imagen 3. Questa guida ti aiuta a iniziare a utilizzare entrambi i modelli.
Generare immagini utilizzando Gemini
Gemini 2.0 Flash Experimental supporta la possibilità di generare testo e immagini in linea. In questo modo puoi utilizzare Gemini per modificare le immagini in modo conversazionale o generare output con testo intrecciato (ad esempio, generare un post del blog con testo e immagini in un unico turno). Tutte le immagini generate includono una filigrana SynthID e le immagini in Google AI Studio includono anche una filigrana visibile.
L'esempio seguente mostra come utilizzare Gemini 2.0 per generare output di testo e immagini:
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
L'esempio di codice dovrebbe produrre un'immagine e potrebbe produrre anche del testo.
A seconda del prompt e del contesto, Gemini genererà contenuti in diverse modalità (da testo a immagine, da testo a immagine e testo e così via). Ecco alcuni esempi:
- Da testo a immagine
- Esempio di prompt: "Genera un'immagine della Torre Eiffel con fuochi d'artificio sullo sfondo".
- Testo in immagini e testo (interlacciati)
- Esempio di prompt: "Genera una ricetta illustrata per una paella".
- Immagini e testo in immagini e testo (interlacciati)
- Prompt di esempio: (con un'immagine di una stanza arredata) "Quali altri divani di colore andrebbero bene nel mio spazio? Puoi aggiornare l'immagine?"
- Modifica delle immagini (da testo a immagine e da immagine a immagine)
- Prompt di esempio: "Modifica questa immagine in modo che assomigli a un cartone animato"
- Esempio di prompt: [immagine di un gatto] + [immagine di un cuscino] + "Crea un punto croce del mio gatto su questo cuscino".
- Modifica di immagini in più turni (chat)
- Prompt di esempio: [carica un'immagine di un'auto blu.] "Trasforma questa auto in un cabrio." "Ora cambia il colore in giallo."
Modifica delle immagini con Gemini
Per eseguire l'editing delle immagini, aggiungi un'immagine come input. L'esempio seguente mostra il caricamento di immagini con codifica base64. Per più immagini e payload più grandi, consulta la sezione Input immagine.
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
Limitazioni
- Per un rendimento ottimale, utilizza le seguenti lingue: EN, es-MX, ja-JP, zh-CN, hi-IN.
- La generazione di immagini non supporta input audio o video.
- La generazione di immagini potrebbe non essere sempre attivata:
- Il modello potrebbe restituire solo testo. Prova a chiedere esplicitamente le uscite di immagini (ad es. "genera un'immagine", "fornisci le immagini man mano", "aggiorna l'immagine").
- Il modello potrebbe interrompere la generazione a metà. Riprova o prova con un altro prompt.
- Quando generi il testo per un'immagine, Gemini funziona al meglio se generi prima il testo e poi chiedi un'immagine con il testo.
Scelta di un modello
Quale modello dovresti utilizzare per generare le immagini? Dipende dal tuo caso d'uso.
Gemini 2.0 è ideale per produrre immagini pertinenti al contesto, combinare testo e immagini, incorporare la conoscenza del mondo e ragionare sulle immagini. Puoi utilizzarlo per creare immagini accurate e pertinenti dal punto di vista del contesto incorporate in lunghe sequenze di testo. Puoi anche modificare le immagini in modo conversazionale, utilizzando un linguaggio naturale, mantenendo il contesto durante la conversazione.
Se la qualità dell'immagine è la tua massima priorità, Imagen 3 è una scelta migliore. Imagen 3 eccelle nel fotorealismo, nei dettagli artistici e in stili artistici specifici come l'impressionismo o gli anime. Imagen 3 è una buona scelta anche per attività di modifica delle immagini specializzate, come l'aggiornamento degli sfondi dei prodotti, l'aumento della dimensione delle immagini e l'inserimento di branding e stile nelle immagini. Puoi utilizzare Imagen 3 per creare loghi o altri design di prodotti con brand.
Generare immagini utilizzando Imagen 3
L'API Gemini fornisce accesso a Imagen 3, il modello di conversione da testo a immagine di altissima qualità di Google, che offre una serie di funzionalità nuove e migliorate. Imagen 3 può:
- Genera immagini con dettagli migliori, illuminazione più ricca e meno artefatti che distraggono rispetto ai modelli precedenti
- Comprendere i prompt scritti in linguaggio naturale
- Genera immagini in una vasta gamma di formati e stili
- Eseguire il rendering del testo in modo più efficace rispetto ai modelli precedenti
Esempio di Imagen
Questa sezione mostra come creare un'istanza di un modello Imagen e generare immagini.
Dopo aver installato l'SDK di IA generativa di Google, puoi utilizzare il seguente codice per generare immagini:
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
}
}'
L'esempio di codice dovrebbe produrre quattro immagini simili a questa:
Puoi anche provare il notebook Inizia a utilizzare Imagen nel Gemini Cookbook.
Parametri del modello Imagen
Per generate_images()
sono disponibili i seguenti parametri:
prompt
: il prompt di testo per l'immagine.number_of_images
: il numero di immagini da generare, da 1 a 4 (inclusi). Il valore predefinito è 4.aspect_ratio
: modifica le proporzioni dell'immagine generata. I valori supportati sono"1:1"
,"3:4"
,"4:3"
,"9:16"
e"16:9"
. Il valore predefinito è"1:1"
.safety_filter_level
: aggiunge un livello di filtro ai filtri di sicurezza. I seguenti valori sono validi:"BLOCK_LOW_AND_ABOVE"
: blocca quando il punteggio di probabilità o il punteggio di gravità èLOW
,MEDIUM
oHIGH
."BLOCK_MEDIUM_AND_ABOVE"
: blocca quando il punteggio di probabilità o il punteggio di gravità èMEDIUM
oHIGH
."BLOCK_ONLY_HIGH"
: blocca quando il punteggio di probabilità o il punteggio di gravità èHIGH
.
person_generation
: consenti al modello di generare immagini di persone. Sono supportati i seguenti valori:"DONT_ALLOW"
: blocca la generazione di immagini di persone."ALLOW_ADULT"
: genera immagini di adulti, ma non di bambini. Questa è l'impostazione predefinita.
Alle immagini generate viene sempre aggiunta una filigrana digitale SynthID non visibile.
Lingua del prompt di testo
Sono supportate le seguenti lingue per i prompt di testo di input:
- Inglese (
en
)
Passaggi successivi
- Per scoprire di più sulla scrittura dei prompt per Imagen, consulta la guida ai prompt di Imagen.
- Per scoprire di più sui modelli Gemini 2.0, consulta Modelli Gemini e Modelli sperimentali.