Programma
Imagen 3 è un modello di generazione da testo a immagine che può riprodurre con precisione scene dettagliate in vari stili e persino incorporare testo nelle immagini, il che lo rende adatto ad applicazioni come la creazione di contenuti pubblicitari e multimediali.
Possiamo usare Imagen 3 tramite l’interfaccia di Vertex AI Studio o integrarlo direttamente nelle applicazioni tramite un’API.
In questo tutorial ti spiegherò come generare immagini con Imagen 3 usando la Google Generating API con Python. Ti guiderò con esempi pratici che mostrano come configurare l’ambiente, scrivere il codice necessario e integrare questa tecnologia nei tuoi progetti. Che tu voglia migliorare le tue applicazioni con immagini dinamiche o semplicemente soddisfare la tua curiosità, questa guida ti fornirà un percorso semplice per comprendere e usare Imagen 3 in modo programmatico.
Configurare la Google Generative AI API
Per iniziare con Imagen 3 in Python, dobbiamo svolgere alcuni passaggi essenziali. Per prima cosa, creeremo un progetto Google Cloud. Una volta pronto, dobbiamo generare una chiave API. Questa chiave permetterà al nostro codice Python di interagire con il servizio Imagen 3.
Creare un progetto Google Cloud
Creare un progetto Google Cloud è il primo passo per usare l’API di IA di Google. Vediamo insieme la procedura:
- Accedi alla console Google Cloud: Inizia andando alla Google Cloud Console. Dovrai accedere con il tuo account Google.
- Seleziona o crea un nuovo progetto: Nella console, cerca il menu a discesa dei progetti nella barra di navigazione in alto. Cliccandoci vedrai le opzioni per selezionare un progetto esistente o crearne uno nuovo. Scegliamo "New Project" per continuare.
- Fornisci i dettagli del progetto: Apparirà un semplice modulo che richiede informazioni di base. Possiamo scegliere qualsiasi nome per il progetto, ma è utile sceglierne uno descrittivo. Può essere cambiato in seguito, se necessario. Useremo
Imagen-tutorial. L’organizzazione può essere lasciata vuota.

Creare la chiave API
Ora che il progetto Google Cloud è stato creato, possiamo creare una chiave API andando alla pagina delle chiavi API in Google AI Studio.
Per creare la chiave, clicca sul pulsante "Create API key":

Nel popup, digita il nome del progetto creato sopra, selezionalo e clicca su "Create API key in existing project":

Copia la chiave e crea un file chiamato .env nella stessa cartella in cui scriveremo lo script Python. Il contenuto del file .env dovrebbe essere:
GEMINI_API_KEY=<paste_your_key_here>
Account di fatturazione
Se provassimo a usare la chiave API ora, otterremmo un errore che dice "Imagen API is only accessible to billed users at this time." Questo accade perché l’API non è gratuita e dobbiamo associare un account di fatturazione al progetto prima di poterla usare.
Al momento della scrittura, il prezzo per generare un’immagine con Imagen 3 è di $0,03. Consulta la loro pagina dei prezzi per maggiori informazioni.
Per aggiungere un account di fatturazione, clicca sul pulsante "Set up Billing" accanto alla chiave API in Google AI Studio.

Verrai reindirizzato al sito di Google Cloud, dove potrai selezionare un account di fatturazione esistente cliccando su "Link a billing account" oppure crearne uno nuovo cliccando su "Manage billing accounts".

Supponiamo di non averne uno: allora clicchiamo su "Manage billing accounts". In alto a sinistra nella pagina c’è il pulsante "Create account". Per creare l’account, dobbiamo inserire le nostre informazioni personali e una carta di credito per l’elaborazione dei pagamenti.
Generare un’immagine con Imagen 3 usando Python
Configurazione dell’ambiente con Anaconda
In questo tutorial usiamo Anaconda, una piattaforma popolare che semplifica la gestione dei pacchetti e l’impostazione dei progetti, rendendo più facile eseguire script Python.
Possiamo installare Anaconda dal loro sito ufficiale.
Per configurare l’ambiente Anaconda, apri un terminale e:
- Crea un ambiente:
conda create -n imagen python=3.9. Questo comando crea un ambiente chiamatoimagenche usa la versione 3.9 di Python. - Attiva l’ambiente:
conda activate imagen. - Installa il pacchetto Google generative AI:
pip install -q -U google-genai. - Installa un pacchetto per elaborare le immagini generate:
pip install pillow. - Installa un pacchetto per caricare la chiave API:
pip install python-dotenv
Possiamo anche installare i pacchetti direttamente senza usare Anaconda, ma c’è il rischio che alcuni pacchetti già installati entrino in conflitto con quelli nuovi o che la nostra installazione di Python usi una versione diversa. Usare Anaconda evita questi potenziali problemi.
Generare la nostra prima immagine
Ora siamo pronti a iniziare a usare Imagen 3. Crea un nuovo script Python, ad esempio gen_image.py, nella stessa cartella del file .env.
Per prima cosa importiamo i pacchetti necessari:
# Google generative AI:
from google import genai
from google.genai import types
# Packages to process the generated image:
from PIL import Image
from io import BytesIO
# Packages to load the .env file:
import os
from dotenv import load_dotenv
Poi carichiamo la chiave API dal file .env:
load_dotenv()
api_key = os.getenv("GEMINI_API_KEY")
Quindi inizializziamo il client di Google generative AI. Questo è l’oggetto che ci permette di comunicare con l’API di Google:
client = genai.Client(api_key=api_key)
Per generare un’immagine, usiamo la funzione client.models.generate_images():
prompt="""
A dog surfing at the beach
"""
response = client.models.generate_images(
model="imagen-3.0-generate-002",
prompt=prompt,
config=types.GenerateImagesConfig(
number_of_images=1,
)
)
Infine, mostriamo l’immagine generata usando l’oggetto Image:
for generated_image in response.generated_images:
image = Image.open(BytesIO(generated_image.image.image_bytes))
image.show()
Ecco il risultato:

Generazione di testo
Una delle funzionalità interessanti di Imagen 3, rispetto ad altri modelli testo-immagine, è la capacità di generare testo. Proviamola facendogli generare la parola “Tea” usando foglie di tè fresche:
prompt="""
Word "tea" made from fresh tea leaves, white background
"""
response = client.models.generate_images(
model="imagen-3.0-generate-002",
prompt=prompt,
)
Ecco il risultato:

Opzioni di generazione immagini con Imagen 3
Le opzioni di generazione delle immagini sono fornite tramite le opzioni di types.GenerateImagesConfig. Nell’esempio sopra abbiamo specificato solo il numero di immagini da generare:
config=types.GenerateImagesConfig(
number_of_images=1,
)
In questa sezione esploriamo le altre opzioni offerte dall’API di Imagen 3. Consulta la documentazione ufficiale per maggiori informazioni.
Generare più immagini
Possiamo usare il parametro number_of_images per generare più immagini con un singolo prompt. Per impostazione predefinita, vengono generate quattro immagini.
Proviamo a generare due immagini per un fumetto.
prompt="""
Single comic book panel of two people overlooking a destroyed city.
A speech bubble points from one of them and says: I guess this is the end.
"""
response = client.models.generate_images(
model="imagen-3.0-generate-002",
prompt=prompt,
config=types.GenerateImagesConfig(
number_of_images=2,
)
)
Ecco il risultato:

Questo è un altro esempio di generazione di testo nelle immagini. Anche se l’immagine a sinistra ha del testo extra indesiderato, grazie alla possibilità di generare più immagini possiamo aumentare le probabilità di ottenere l’output desiderato. L’immagine a destra rispetta quasi completamente il nostro prompt.
Controllare il rapporto d’aspetto
Per impostazione predefinita, le immagini generate sono quadrate con un rapporto 1:1. Il modello supporta i seguenti rapporti d’aspetto: 1:1, 3:4, 4:3, 9:16 e 16:9.
Generiamo un’immagine 9:16 da usare come sfondo per il telefono:
prompt="""
A drone shot of a river flowing between mountains with a stormy sky.
"""
response = client.models.generate_images(
model="imagen-3.0-generate-002",
prompt=prompt,
config=types.GenerateImagesConfig(
aspect_ratio="9:16",
)
)
Ecco il risultato:

Filtro del livello di sicurezza
La documentazione indica che possiamo usare safety_filter_level per specificare il livello di filtraggio delle immagini. A ogni immagine generata viene assegnato un punteggio di probabilità che misura la probabilità che l’immagine non sia sicura (ad esempio, contenuti inappropriati).
Impostare il filtro del livello di sicurezza è importante perché aiuta a garantire che i contenuti generati siano appropriati e in linea con le preferenze dell’utente, mantenendo così un ambiente sicuro e rispettoso per varie applicazioni.
La documentazione riporta che supporta tre livelli:
BLOCK_LOW_AND_ABOVE: Blocca l’immagine anche con un punteggio di probabilità basso.BLOCK_MEDIUM_AND_ABOVE: Blocca solo le immagini con punteggi medio e alto.BLOCK_ONLY_HIGH: Blocca solo le immagini con un punteggio alto
Tuttavia, dopo varie prove, l’API ora supporta solo l’opzione BLOCK_LOW_AND_ABOVE. Fornire qualsiasi altra opzione genererà un errore.
Generazione di persone
Possiamo controllare se il modello è autorizzato a generare persone usando l’opzione person_generation. Fornisce due opzioni:
DONT_ALLOW: Le immagini con persone verranno bloccate.ALLOW_ADULT: Consente di generare immagini con persone (solo adulti).
L’opzione predefinita è consentire le persone. Ad esempio, se impostiamo l’opzione per non consentire persone e proviamo a generare l’immagine di qualcuno che cucina, non otterremo alcuna immagine.
prompt="""
A person cooking.
"""
response = client.models.generate_images(
model="imagen-3.0-generate-002",
prompt=prompt,
config=types.GenerateImagesConfig(
person_generation="DONT_ALLOW",
)
)
print(response.generated_images)
Ecco l’output:
None
Scrivere buoni prompt per Imagen 3
La documentazione ufficiale fornisce una guida completa ai prompt per Imagen 3, quindi non la ripeterò qui. Ecco le idee chiave per creare un buon prompt:
- Nozioni di base per scrivere prompt:
- Soggetto: Concentrati sull’oggetto, la persona o la scena principale che vuoi rappresentare.
- Contesto e sfondo: Descrivi l’ambientazione o l’ambiente in cui è inserito il soggetto.
- Stile: Specifica lo stile artistico o fotografico desiderato (ad esempio, schizzo, pittura, fotografia).
- Usa un linguaggio descrittivo: Impiega aggettivi dettagliati e contesto per chiarire l’output desiderato.
- Fai riferimento a stili specifici: Usa artisti o movimenti artistici noti per guidare l’estetica.
- Testo nelle immagini: Limita il testo a 25 caratteri o meno e usa frasi distinte per fornire informazioni aggiuntive.
- Parametrizzazione del prompt: Se dobbiamo generare più immagini con lo stesso stile, è una buona idea creare un modello di prompt riutilizzabile e fornire in input solo la parte che cambia.
- Fotografia: Specifica impostazioni della fotocamera, tipi di lenti e illuminazione per influenzare il risultato.
- Arte: Usa descrittori come "un dipinto di..." o tecniche specifiche come "acquerello di...".
- Modificatori di qualità dell’immagine: Usa parole chiave come "alta qualità" o "4K" per migliorare la qualità dell’output.
- Immagini fotorealistiche: Includi dettagli tecnici come tipo di lente e lunghezze focali per aumentare il realismo.
Modifica e personalizzazione delle immagini
Imagen 3 ha anche la capacità di modificare le immagini ed eseguire personalizzazioni. Purtroppo, queste funzionalità sono ancora bloccate e accessibili solo a determinati utenti.
Ad esempio, la funzione di personalizzazione consente di personalizzare un’immagine di riferimento a partire da un prompt. Nell’esempio, viene fornita la foto di una donna e il prompt modifica quell’immagine in una della stessa persona che tiene in mano delle arance.
Ulteriori informazioni su queste funzionalità e il modulo di richiesta di accesso sono disponibili sul loro sito web.
Conclusione
In questo tutorial abbiamo imparato a usare Imagen 3 per creare immagini con Python e la Google Generative API. In generale, sono soddisfatto dei risultati ottenuti durante gli esperimenti con l’API. Ritengo che i risultati siano di alta qualità e contengano meno artefatti di IA, rendendo più difficile distinguerli da immagini reali.
La capacità di lavorare con il testo nelle immagini è utile per branding e marketing. Nel complesso, penso che questo modello funzioni bene. Vorrei solo che tutte le sue funzionalità fossero aperte, perché ritengo che la modifica delle immagini sia ancora più utile della loro generazione.



