Fino ad ora abbiamo parlato dei modelli generativi e della loro capacità di restituire in output testi, istruzioni da linea di comando e codice. Questa volta ci concentreremo invece sull'impiego delle Intelligenze Artificiali per la creazione di immagini. La dinamica di base è sempre la stessa, anche in questo caso infatti un'applicazione è in grado di interagire con il modello tramite API. All'utilizzatore spetta il compito di confezionare un prompt, cioè una richiesta espressa in linguaggi naturale, e di attendere la risposta (in questo caso un'immagine grafica o fotografica) da parte del modello.
Il modello DALL·E
OpenAI, cioè l'organizzazione che si occupa dell'implementazione di GPT e del suo front-end, il chatbot ChatGPT, offre per questo scopo il modello chiamato DALL·E. Si tratta di un LDM (Latent Diffusion Model) il cui nome deriva dalla combinazione tra il nome del pittore spagnolo Salvador Dalí e quello di WALL·E, personaggio dell'omonimo film Pixar. DALL·E è in grado di generare immagini originali e realistiche partendo da descrizioni testuali. Utilizza inoltre tecniche di NLP (Natural Language Processing) e di Deep Learning per produrre i propri output.
Il training del modello viene operato a partire da una vasta raccolta di immagini e testi. Ciò è possibile utilizzando una variante della tecnica di Machine Learning supervisionato nota come RL (Reinforcement Learning). In questo modo DALL·E può creare non soltanto immagini di esseri e oggetti comuni (ad esempio animali e oggetti domestici) ma anche di scene vere e proprie e persino di concetti astratti.
Requisiti per l'interazione con DALL·E
Per utilizzare DALL·E attraverso le proprie applicazioni è necessario disporre innanzitutto di un'API Key per l'interazione con le API OpenAI. Per attivarne una è sufficiente seguire la breve procedura descritta in questa lezione. Prima di procedere si tenga conto del fatto che gli output sotto forma di immagini sono nettamente più costosi di quelli testuali. A ciò si aggiunga che il prezzo varia a seconda della grandezza delle immagini. Nel momento in cui viene scritto questo articolo, a esempio, il sistema richiede 0.016 dollari per un'immagine con risoluzione pari 256×256 px, 0.018 per 512×512 px e 0.020 per 1024×1024 px.
In secondo luogo, per sviluppare il nostro progetto abbiamo bisogno di un'installazione di Python sul sistema operativo corrente (Linux Mint nell'esempio proposto). Verifichiamone quindi la presenza tramite il comando:
python3 --version
Avremo poi bisogno del package manager pip per Python e della libreria OpenAI per lo stesso linguaggio. Nel caso fossero assenti dal sistema in uso basterà seguire le istruzioni contenute nelle lezioni linkate.
Per evitare conflitti di dipendenze può essere utile installare anche venv
:
sudo apt install python3-venv
Tale modulo per Python consente infatti di creare degli ambienti virtuali del tutto indipendenti tra loro in quanto isolati.
Creare un ambiente di sviluppo virtuale
Per generare il nostro ambiente di sviluppo virtuale creiamo prima di tutto una directory di lavoro e chiamiamola ad esempio imgDALL-E
tramite il comando mkdir
per poi spostarci all'interno di essa con cd
.
Fatto questo è possibile generare l'ambiente virtuale con venv
attribuendogli un nome, a esempio TestDAll-E
:
python3 -m venv TestDAll-E
Perché esso possa essere utilizzabile si deve procedere infine con l'attivazione dell'ambiente virtuale tramite il comando source
espresso in questo modo:
source TestDAll-E/bin/activate
Una volta attivato l'ambiente si può installare in esso la libreria OpenAI di Python sicuri che la sua presenza non darà luogo a comportamenti inattesi per via di incompatibilità tra dipendenze:
python -m pip install openai
Registrare l'API Key di OpenAI
Per poter utilizzare l'API Key di OpenAI dal nostro Terminale è necessario registrare tale informazione come variabile d'ambiente. Per far questo dobbiamo utilizzare il comando export
seguito dal parametro OPENAI_API_KEY
da valorizzare con la chiave che desideriamo utilizzare delimitata tramite doppi apici:
Generare immagini da Terminale con DALL·E
Ora che l'ambiente virtuale di sviluppo è pronto e l'API Key è stata registrata possiamo lanciare il nostro primo comando per la creazione di un'immagine. Interrogare DALL·E è molto semplice, basta sfruttare la libreria OpenAI per lanciare il comando image.create
. A quest'ultimo deve essere passato un prompt con cui fornire una breve descrizione dell'output da creare. Proviamo ad esempio a richiedere la generazione di un'immagine raffigurante una notte piovosa:
openai api image.create -p "a rainy night"
Per rispondere all'input il modello generativo restituisce un link che può essere copiato e incollato nella barra degli URL del browser:
Nel caso specifico del nostro esempio il prompt formulato ha determinato la generazione della seguente immagine:
DALL·E è in grado di comprendere anche degli input espressi in lingua italiana. Di seguito viene proposta ad esempio l'immagine generata a seguito dell'invio del prompt "Una notte piovosa":
È bene ricordare che le immagini sono raggiungibili solo temporaneamente tramite i link mostrati in output. Se le si vuole conservare è quindi consigliabile un salvataggio. Si tenga inoltre conto del fatto che l'utilizzo delle API è condizionato a regole molto severe riguardo ai contenuti che si possono generare. Un tentativo ripetuto di violare le policy di OpenAI potrebbe comportare l'esclusione dal servizio.
Un'applicazione Python per generare immagini con DALL·E
Le API di OpenAI per DALL·E possono essere utilizzate anche all'interno di applicazioni Python destinate alla generazione delle immagini. Come è semplice notare, il codice proposto di seguito riprende in buona parte le istruzioni sfruttate in precedenza tramite Terminale.
import openai
openai.api_key = "sk-#####################################"
richiesta = "A luxury wedding cake"
response = openai.Image.create(
prompt=richiesta,
n=1,
size="1024x1024",
)
print(response["data"][0]["url"])
Il primo passaggio prevede l'importazione della libreria OpenAI. Seguono l'indicazione dell'API Key per l'interazione con il modello e il prompt da inviare ad esso per la creazione dell'immagine. Nel caso specifico "Una lussuosa torta nuziale".
Il prompt viene quindi passato come argomento a openai.Image.create()
che accetta anche i parametri n
e size
. Il primo, n
, permette di stabilire il numero di immagini da creare (da 1 ad un massimo di 10). Il secondo, size
, consente di definire le dimensioni dell'immagine in pixel (256x256, 512x512 o 1024x1024). Infine:
print(response["data"][0]["url"])
determina la generazione del link all'immagine, come mostrato di seguito.
L'immagine generata dalla prima esecuzione dello script è stata la seguente ma dato che DALL·E è stato concepito per produrre immagini uniche (o come anticipato "originali"), qualsiasi ulteriore esecuzione dovrebbe portare a risultati differenti.
Conclusioni
La API di OpenAI permettono di utilizzare il modello generativo DALL·E per creare immagini realistiche a partire da brevi descrizioni testuali. Anche in questo caso, come con GPT per i testi, la precisione degli output è legata alla qualità dei prompt formulati dall'utilizzatore.