Imagen è un modello di Intelligenza Artificiale generativa creato da Google, potenziato notevolmente nel 2023. È integrato nei servizi della Google Cloud Platform (GCP) ed è utilizzabile, tra l’altro, con le API di Vertex AI, il servizio di punta di Intelligenza Artificiale.

Imagen è un modello assolutamente in linea con le attuali tendenze e necessità dell’industria. Si colloca nell’ambito dell’Intelligenza Artificiale generativa in quanto è in grado di creare contenuti che possono ampliare le potenzialità della creatività umana, rappresentando un’alternativa a servizi come Dall-E di OpenAI (integrato anche in Image Creator di Microsoft Designer), Midjourney o Stable Diffusion.

Imagen si presenta come un ambiente multimodale ovvero in grado di lavorare tra tipi di dato diversi. A differenza dei modelli che generano testo da testo o immagini da immagini, Imagen, offre funzionalità di generazione text-to-image.Può quindi creare un’immagine in base a una richiesta generica espressa in linguaggio naturale.

Il prompt (cioè il testo con la richiesta) può essere inviato via app mobile, pagine web, API o altro, e questo si presta a molteplici utilizzi integrandone le funzionalità all’interno di applicazioni e servizi. Si possono ricevere richieste di utenti da vari canali, far elaborare delle immagini on demand con la potenza del Cloud e restituirle all’utente: tutto in pochissimi istanti.

Le possibilità di personalizzazione di Imagen ne permettono l’utilizzo anche in campi più ostici per un modello generico. Possiamo pensare alla generazione di loghi e didascalie, all’identificazione di oggetti e persone all’interno  di un’immagine o all’embedding di testo all’interno di immagini.

Come accedere a Imagen 2 per generare immagini

In alcuni paesi è possibile cominciare a sperimentare le funzionalità di base di Imagen direttamente dall’interno di Gemini (il nuovo nome di Bard, il chatbot di Google). Al momento in cui scriviamo questo non è ancora possibile per l’Italia, o almeno per la maggior parte degli account. Il rollout di Gemini sta infatti avvenendo per step, e al momento quasi tutti gli utenti quando provano ad accedere a Bard vedono la grafica di Gemini, ma il modello sottostante sembra non essere ancora stato aggiornato.

Per sfruttare appieno le funzionalità di Imagen 2, anche attraverso API, è necessario quindi accedere alla Google Cloud Platform con un account Google collegato a un metodo di fatturazione (ricordiamo però che si può iniziare a usare i servizi Google Cloud free-tier senza affrontare costi sfruttando un credito di 300 dollari da usare in 90 giorni).

Il modello di costi si basa essenzialmente sulla quantità di immagini prodotte o elaborate e a seconda dell’operazione è fissata una diversa tariffa. Le vediamo riepilogate nella tabella seguente ottenuta dal listino di Google.

imagen-google-pricing

Ad esempio, possiamo vedere che un’immagine generata costa 0,02 dollari ma che ci sono altre attività da poter svolgere come il fine-tuning del modello.

Come usare Imagen

Facciamo la conoscenza di questo modello con un rapido esempio. Vogliamo utilizzarlo all’interno di Vertex AI, nella Google Cloud Platform, e lo metteremo alla prova per generare un’immagine su nostra richiesta.

Avremo bisogno di:

  • accedere alla Google Cloud Platform, utilizzando credenziali Gmail e avendo un account di fatturazione a disposizione;
  • un progetto Google che potremo inizializzare nella console della Google Cloud Platform;
  • attivare le API di Vertex AI.

Potremo provare le API con il nostro linguaggio di programmazione preferito ma anche con uno strumento da riga di comando, curl, tipico tool testuale per interrogare web service.

Noi abbiamo usato proprio curl e l’esperimento è stato molto utile per vedere come devono essere definite le richieste da inoltrare a Imagen e come questi restituisca le sue risposte, inserendo le immagini in una risposta testuale codificata in base64, una codifica usatissima nel web per inviare dati binari sotto forma di caratteri.

Abbiamo predisposto la nostra richiesta per Imagen in un oggetto JSON, salvato per comodità all’interno di un file di nome request.json:


{
  "instances": [
    {
      "prompt": "a butterfly with flowers"
    }
  ],
  "parameters": {
    "sampleCount": 1
  }
}

Viene richiesto di indicare innanzitutto un prompt ovvero il testo su cui Imagen dovrà costruire l’immagine: in questo caso abbiamo scelto “a butterfly with flowers” (abbiamo usato l’inglese ma sappiamo ormai che le lingue non sono un problema per gli LLM). Poi abbiamo passato un valore intero per il parametro sampleCount che indica quante immagini desideriamo e a noi ne basta una.

Un JSON così può essere inviato con qualsiasi tecnologia di programmazione ma con curl possiamo farlo con una richiesta POST di questo tipo:


curl -X POST     
   -H "Authorization: Bearer $(gcloud auth print-access-token)"     
   -H "Content-Type: application/json; charset=utf-8"     
   -d @request.json     
    "https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT-ID/locations/us-central1/publishers/google/models/imagegeneration:predict" 
   -o response.json

Il comando curl permette di specificare tutto quello che possiamo definire con i linguaggi Python, Java o qualsiasi altro impostando:

  • il metodo HTTP con l’opzione -X;
  • le header HTTP ognuna con -H. Quella con chiave Authorization serve a passare il token di riconoscimento che sarà prodotto dalla GCP;
  • la richiesta da inviare con -d (qui punta al nostro file request.json);
  • il file su cui salvare la risposta con -o.

L’indirizzo HTTPS che specifichiamo serve ad indicare le API da contattare, potremo personalizzarlo in alcuni punti e saremo costretti a farlo per indicare il project id del nostro progetto Google che qui abbiamo simboleggiato con il segnaposto PROJECT-ID.

Dopo la chiamata avremo la risposta nel file response.json in cui però l’immagine non sarà riconoscibile in quanto codificata come testo in base64.

Ecco la struttura della risposta:


{
  "predictions": [
    {
      "mimeType": "image/png",
      "bytesBase64Encoded": "iVBORw0
      ...
      ...kJggg=="
    }
  ]
}

L’oggetto contiene la chiave predictions alla quale corrisponde una lista di immagini generate (il tipo come si vede dal mime type è un png). Il testo della risposta è stato omesso in quanto codificato e di grandi dimensioni.

Una volta ricevuta questa risposta – immaginiamola integrata in un servizio di qualche tipo – potremo decodificare il testo base64 in formato PNG ottenendo quanto mostrato dall’immagine seguente:

butterfly
Come si vede, l’esperimento ha avuto successo in quanto Imagen ha generato una farfalla su un fiore coerentemente con il nostro prompt “a butterfly with flowers”.

Integrare Imagen in un software aziendale

Con il nostro rapido esperimento abbiamo voluto mostrare le grandi potenzialità di questo modello che è già estremamente potente, ricco di funzionalità ma in continua evoluzione.

Siamo sicuri che gli esempi presentati sopra possano far nascere idee su possibili utilizzi all’interno di applicazioni e workflow aziendali. Il meccanismo delle API permette di integrare tutto ciò in qualsiasi servizio vogliamo creare, utilizzando il linguaggio di programmazione su cui noi o la nostra azienda possiamo contare maggiormente.

Tra le capacità di Imagen che possono essere molto interessanti per le aziende è ci sono la possibilità di fare un fine tuning del modello o di definire un proprio stile, caricando alcune immagini caratterizzate da uno stile comune e inserendo le parole che lo caratterizzano. Dopo poche interazioni, Imagen “imparerà” il nostro stile e sarà in grado di riprodurlo su soggetti differenti.