Gli LLM non servono solo per generare testo. È anche possibile creare immagini a partire da descrizioni testuali. Avere le immagini come modalità può essere molto utile in diversi ambiti, dalla MedTech, all’architettura, al turismo, allo sviluppo di videogiochi e altro ancora. In questo capitolo, esploreremo i due modelli di generazione di immagini più popolari, DALL-E e Midjourney.
In questa lezione tratteremo:
- La generazione di immagini e perché è utile.
- DALL-E e Midjourney, cosa sono e come funzionano.
- Come costruire un’applicazione per la generazione di immagini.
Al termine di questa lezione, sarai in grado di:
- Creare un’applicazione per la generazione di immagini.
- Definire i confini della tua applicazione con meta prompt.
- Lavorare con DALL-E e Midjourney.
Le applicazioni per la generazione di immagini sono un ottimo modo per esplorare le potenzialità dell’Intelligenza Artificiale Generativa. Possono essere utilizzate, ad esempio, per:
-
Modifica e sintesi di immagini. Puoi generare immagini per diversi casi d’uso, come la modifica o la sintesi di immagini.
-
Applicazioni in vari settori. Possono anche essere impiegate per creare immagini in diversi settori come Medtech, Turismo, sviluppo di videogiochi e altro.
Come parte di questa lezione, continueremo a lavorare con la nostra startup, Edu4All. Gli studenti creeranno immagini per le loro valutazioni; quali immagini creare è a loro discrezione, potrebbero essere illustrazioni per una loro fiaba, un nuovo personaggio per la loro storia o aiutarli a visualizzare idee e concetti.
Ecco cosa potrebbero generare gli studenti di Edu4All, ad esempio se stanno lavorando in classe sui monumenti:
usando un prompt come
"Cane accanto alla Torre Eiffel alla luce del sole del primo mattino"
DALL-E e Midjourney sono due dei modelli di generazione di immagini più popolari, che permettono di usare prompt per generare immagini.
Iniziamo con DALL-E, un modello di Intelligenza Artificiale Generativa che crea immagini a partire da descrizioni testuali.
DALL-E è una combinazione di due modelli, CLIP e diffused attention.
-
CLIP è un modello che genera embedding, ovvero rappresentazioni numeriche dei dati, da immagini e testo.
-
Diffused attention è un modello che genera immagini a partire dagli embedding. DALL-E è addestrato su un dataset di immagini e testo e può essere usato per creare immagini da descrizioni testuali. Ad esempio, DALL-E può generare immagini di un gatto con un cappello o di un cane con un mohawk.
Midjourney funziona in modo simile a DALL-E, genera immagini da prompt testuali. Midjourney può essere usato per creare immagini con prompt come “un gatto con un cappello” o “un cane con un mohawk”.
Immagine da Wikipedia, generata da Midjourney
Prima, DALL-E. DALL-E è un modello di Intelligenza Artificiale Generativa basato sull’architettura transformer con un autoregressive transformer.
Un autoregressive transformer definisce come un modello genera immagini da descrizioni testuali, generando un pixel alla volta e usando i pixel generati per produrre il pixel successivo. Passa attraverso più livelli in una rete neurale, fino a completare l’immagine.
Con questo processo, DALL-E controlla attributi, oggetti, caratteristiche e altro nell’immagine che genera. Tuttavia, DALL-E 2 e 3 offrono un controllo maggiore sull’immagine generata.
Cosa serve per costruire un’applicazione per la generazione di immagini? Ti servono le seguenti librerie:
- python-dotenv, è altamente consigliato usare questa libreria per tenere i tuoi segreti in un file .env separato dal codice.
- openai, questa libreria serve per interagire con l’API di OpenAI.
- pillow, per lavorare con le immagini in Python.
- requests, per aiutarti a fare richieste HTTP.
-
Crea un file .env con il seguente contenuto:
AZURE_OPENAI_ENDPOINT=<your endpoint> AZURE_OPENAI_API_KEY=<your key>Trova queste informazioni nel Portale Azure per la tua risorsa nella sezione "Keys and Endpoint".
-
Raccogli le librerie sopra in un file chiamato requirements.txt così:
python-dotenv openai pillow requests -
Poi, crea un ambiente virtuale e installa le librerie:
python3 -m venv venv source venv/bin/activate pip install -r requirements.txtPer Windows, usa i seguenti comandi per creare e attivare l’ambiente virtuale:
python3 -m venv venv venv\Scripts\activate.bat
-
Aggiungi il seguente codice in un file chiamato app.py:
import openai import os import requests from PIL import Image import dotenv # import dotenv dotenv.load_dotenv() # Get endpoint and key from environment variables openai.api_base = os.environ['AZURE_OPENAI_ENDPOINT'] openai.api_key = os.environ['AZURE_OPENAI_API_KEY'] # Assign the API version (DALL-E is currently supported for the 2023-06-01-preview API version only) openai.api_version = '2023-06-01-preview' openai.api_type = 'azure' try: # Create an image by using the image generation API generation_response = openai.Image.create( prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here size='1024x1024', n=2, temperature=0, ) # Set the directory for the stored image image_dir = os.path.join(os.curdir, 'images') # If the directory doesn't exist, create it if not os.path.isdir(image_dir): os.mkdir(image_dir) # Initialize the image path (note the filetype should be png) image_path = os.path.join(image_dir, 'generated-image.png') # Retrieve the generated image image_url = generation_response["data"][0]["url"] # extract image URL from response generated_image = requests.get(image_url).content # download the image with open(image_path, "wb") as image_file: image_file.write(generated_image) # Display the image in the default image viewer image = Image.open(image_path) image.show() # catch exceptions except openai.InvalidRequestError as err: print(err)
Spieghiamo questo codice:
-
Prima importiamo le librerie necessarie, inclusa la libreria OpenAI, dotenv, requests e Pillow.
import openai import os import requests from PIL import Image import dotenv
-
Poi carichiamo le variabili d’ambiente dal file .env.
# import dotenv dotenv.load_dotenv()
-
Successivamente impostiamo endpoint, chiave per l’API OpenAI, versione e tipo.
# Get endpoint and key from environment variables openai.api_base = os.environ['AZURE_OPENAI_ENDPOINT'] openai.api_key = os.environ['AZURE_OPENAI_API_KEY'] # add version and type, Azure specific openai.api_version = '2023-06-01-preview' openai.api_type = 'azure'
-
Poi generiamo l’immagine:
# Create an image by using the image generation API generation_response = openai.Image.create( prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here size='1024x1024', n=2, temperature=0, )
Il codice sopra risponde con un oggetto JSON che contiene l’URL dell’immagine generata. Possiamo usare l’URL per scaricare l’immagine e salvarla su file.
-
Infine, apriamo l’immagine e usiamo il visualizzatore standard per mostrarla:
image = Image.open(image_path) image.show()
Vediamo il codice che genera l’immagine più nel dettaglio:
generation_response = openai.Image.create(
prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here
size='1024x1024',
n=2,
temperature=0,
)- prompt è il testo usato per generare l’immagine. In questo caso, usiamo il prompt "Coniglio su un cavallo, che tiene un lecca-lecca, in un prato nebbioso dove crescono narcisi".
- size è la dimensione dell’immagine generata. Qui generiamo un’immagine di 1024x1024 pixel.
- n è il numero di immagini generate. Qui ne generiamo due.
- temperature è un parametro che controlla la casualità dell’output di un modello di Intelligenza Artificiale Generativa. La temperatura varia tra 0 e 1, dove 0 significa output deterministico e 1 output casuale. Il valore predefinito è 0.7.
Ci sono altre cose che puoi fare con le immagini, che vedremo nella sezione successiva.
Finora hai visto come generare un’immagine con poche righe di Python. Tuttavia, ci sono altre possibilità con le immagini.
Puoi anche:
-
Effettuare modifiche. Fornendo un’immagine esistente, una maschera e un prompt, puoi modificare un’immagine. Ad esempio, puoi aggiungere qualcosa a una parte dell’immagine. Immagina la nostra immagine del coniglio, potresti aggiungere un cappello al coniglio. Per farlo, fornisci l’immagine, una maschera (che identifica la parte da modificare) e un prompt testuale che spiega cosa fare.
response = openai.Image.create_edit( image=open("base_image.png", "rb"), mask=open("mask.png", "rb"), prompt="An image of a rabbit with a hat on its head.", n=1, size="1024x1024" ) image_url = response['data'][0]['url']
L’immagine di base conterrebbe solo il coniglio, ma l’immagine finale avrebbe il cappello sul coniglio.
-
Creare variazioni. L’idea è prendere un’immagine esistente e chiedere di creare variazioni. Per creare una variazione, fornisci un’immagine e un prompt testuale e un codice come questo:
response = openai.Image.create_variation( image=open("bunny-lollipop.png", "rb"), n=1, size="1024x1024" ) image_url = response['data'][0]['url']
Nota, questo è supportato solo su OpenAI
La temperatura è un parametro che controlla la casualità dell’output di un modello di Intelligenza Artificiale Generativa. La temperatura varia tra 0 e 1, dove 0 significa output deterministico e 1 output casuale. Il valore predefinito è 0.7.
Vediamo un esempio di come funziona la temperatura, eseguendo questo prompt due volte:
Prompt: "Coniglio su un cavallo, che tiene un lecca-lecca, in un prato nebbioso dove crescono narcisi"
Ora eseguiamo lo stesso prompt per vedere che non otterremo la stessa immagine due volte:
Come vedi, le immagini sono simili, ma non identiche. Proviamo a cambiare il valore della temperatura a 0.1 e vediamo cosa succede:
generation_response = openai.Image.create(
prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here
size='1024x1024',
n=2
)Proviamo a rendere la risposta più deterministica. Dalle due immagini generate, nella prima c’è un coniglio e nella seconda un cavallo, quindi le immagini variano molto.
Modifichiamo quindi il codice impostando la temperatura a 0, così:
generation_response = openai.Image.create(
prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here
size='1024x1024',
n=2,
temperature=0
)Ora, eseguendo questo codice, ottieni queste due immagini:
Qui si vede chiaramente come le immagini si somiglino molto di più.
Con la nostra demo, possiamo già generare immagini per i nostri clienti. Tuttavia, dobbiamo creare dei limiti per la nostra applicazione.
Ad esempio, non vogliamo generare immagini non adatte al lavoro o inappropriate per i bambini.
Possiamo farlo con i metaprompt. I metaprompt sono prompt testuali usati per controllare l’output di un modello di Intelligenza Artificiale Generativa. Ad esempio, possiamo usare i metaprompt per garantire che le immagini generate siano sicure per il lavoro o adatte ai bambini.
Come funzionano i metaprompt?
I metaprompt sono prompt testuali usati per controllare l’output di un modello di Intelligenza Artificiale Generativa, vengono posizionati prima del prompt testuale e servono a controllare l’output del modello, integrandosi nelle applicazioni per gestire l’output. Racchiudono l’input del prompt e quello del metaprompt in un unico prompt testuale.
Un esempio di metaprompt potrebbe essere il seguente:
You are an assistant designer that creates images for children.
The image needs to be safe for work and appropriate for children.
The image needs to be in color.
The image needs to be in landscape orientation.
The image needs to be in a 16:9 aspect ratio.
Do not consider any input from the following that is not safe for work or appropriate for children.
(Input)
Ora vediamo come usare i metaprompt nella nostra demo.
disallow_list = "swords, violence, blood, gore, nudity, sexual content, adult content, adult themes, adult language, adult humor, adult jokes, adult situations, adult"
meta_prompt =f"""You are an assistant designer that creates images for children.
The image needs to be safe for work and appropriate for children.
The image needs to be in color.
The image needs to be in landscape orientation.
The image needs to be in a 16:9 aspect ratio.
Do not consider any input from the following that is not safe for work or appropriate for children.
{disallow_list}
"""
prompt = f"{meta_prompt}
Create an image of a bunny on a horse, holding a lollipop"
# TODO add request to generate imageDal prompt sopra, puoi vedere come tutte le immagini generate tengano conto del metaprompt.
Abbiamo introdotto Edu4All all’inizio di questa lezione. Ora è il momento di permettere agli studenti di generare immagini per le loro valutazioni.
Gli studenti creeranno immagini per le loro valutazioni contenenti monumenti, quali monumenti esattamente è a loro scelta. Gli studenti sono invitati a usare la loro creatività per collocare questi monumenti in contesti diversi.
Ecco una possibile soluzione:
import openai
import os
import requests
from PIL import Image
import dotenv
# import dotenv
dotenv.load_dotenv()
# Get endpoint and key from environment variables
openai.api_base = "<replace with endpoint>"
openai.api_key = "<replace with api key>"
# Assign the API version (DALL-E is currently supported for the 2023-06-01-preview API version only)
openai.api_version = '2023-06-01-preview'
openai.api_type = 'azure'
disallow_list = "swords, violence, blood, gore, nudity, sexual content, adult content, adult themes, adult language, adult humor, adult jokes, adult situations, adult"
meta_prompt = f"""You are an assistant designer that creates images for children.
The image needs to be safe for work and appropriate for children.
The image needs to be in color.
The image needs to be in landscape orientation.
The image needs to be in a 16:9 aspect ratio.
Do not consider any input from the following that is not safe for work or appropriate for children.
{disallow_list}"""
prompt = f"""{meta_prompt}
Generate monument of the Arc of Triumph in Paris, France, in the evening light with a small child holding a Teddy looks on.
""""
try:
# Create an image by using the image generation API
generation_response = openai.Image.create(
prompt=prompt, # Enter your prompt text here
size='1024x1024',
n=2,
temperature=0,
)
# Set the directory for the stored image
image_dir = os.path.join(os.curdir, 'images')
# If the directory doesn't exist, create it
if not os.path.isdir(image_dir):
os.mkdir(image_dir)
# Initialize the image path (note the filetype should be png)
image_path = os.path.join(image_dir, 'generated-image.png')
# Retrieve the generated image
image_url = generation_response["data"][0]["url"] # extract image URL from response
generated_image = requests.get(image_url).content # download the image
with open(image_path, "wb") as image_file:
image_file.write(generated_image)
# Display the image in the default image viewer
image = Image.open(image_path)
image.show()
# catch exceptions
except openai.InvalidRequestError as err:
print(err)Dopo aver completato questa lezione, dai un’occhiata alla nostra collezione di apprendimento sull’Intelligenza Artificiale Generativa per continuare a migliorare le tue conoscenze sull’IA Generativa!
Passa alla Lezione 10 dove vedremo come creare applicazioni AI con low-code
Disclaimer:
Questo documento è stato tradotto utilizzando il servizio di traduzione automatica Co-op Translator. Pur impegnandoci per garantire accuratezza, si prega di notare che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa deve essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale effettuata da un umano. Non ci assumiamo alcuna responsabilità per eventuali malintesi o interpretazioni errate derivanti dall’uso di questa traduzione.





