Gli LLM non si limitano alla generazione di testo. È anche possibile generare immagini a partire da descrizioni testuali. Avere immagini come modalità può essere estremamente utile in numerosi settori, dalla tecnologia medica, all'architettura, al turismo, allo sviluppo di giochi e molto altro. In questo capitolo, esamineremo 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.
Dopo aver completato questa lezione, sarai in grado di:
- Creare un'applicazione per la generazione di immagini.
- Definire i limiti per la 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 capacità dell'AI Generativa. Possono essere utilizzate, ad esempio, per:
-
Modifica e sintesi di immagini. Puoi generare immagini per una varietà di casi d'uso, come la modifica e la sintesi di immagini.
-
Applicazioni in diversi settori. Possono anche essere utilizzate per generare immagini per una varietà di settori come MedTech, Turismo, Sviluppo di giochi e altro.
Come parte di questa lezione, continueremo a lavorare con la nostra startup, Edu4All. Gli studenti creeranno immagini per le loro valutazioni; esattamente quali immagini dipenderà da loro, ma potrebbero essere illustrazioni per la loro fiaba, la creazione di un nuovo personaggio per la loro storia o aiutarli a visualizzare le loro 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 al sole del mattino presto"
DALL-E e Midjourney sono due dei modelli di generazione di immagini più popolari, che ti permettono di utilizzare prompt per generare immagini.
Iniziamo con DALL-E, che è un modello di AI Generativa che genera immagini a partire da descrizioni testuali.
DALL-E è una combinazione di due modelli, CLIP e attenzione diffusa.
-
CLIP, è un modello che genera embeddings, che sono rappresentazioni numeriche di dati, da immagini e testo.
-
Attenzione diffusa, è un modello che genera immagini dagli embeddings. DALL-E è addestrato su un dataset di immagini e testo e può essere utilizzato per generare immagini a partire da descrizioni testuali. Ad esempio, DALL-E può essere utilizzato per generare immagini di un gatto con un cappello, o di un cane con una cresta.
Midjourney funziona in modo simile a DALL-E, generando immagini da prompt testuali. Midjourney può anche essere utilizzato per generare immagini usando prompt come "un gatto con un cappello" o "un cane con una cresta".
Crediti immagine Wikipedia, immagine generata da Midjourney
Prima di tutto, DALL-E. DALL-E è un modello di AI Generativa basato sull'architettura transformer con un trasformatore autoregressivo.
Un trasformatore autoregressivo definisce come un modello genera immagini a partire da descrizioni testuali, generando un pixel alla volta e poi utilizzando i pixel generati per generare 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 hanno un controllo maggiore sull'immagine generata.
Cosa serve per creare un'applicazione per la generazione di immagini? Hai bisogno delle seguenti librerie:
- python-dotenv, è altamente consigliato utilizzare questa libreria per mantenere i tuoi segreti in un file .env separato dal codice.
- openai, questa libreria è ciò che utilizzerai per interagire con l'API di OpenAI.
- pillow, per lavorare con immagini in Python.
- requests, per aiutarti a fare richieste HTTP.
Se non lo hai già fatto, segui le istruzioni sulla pagina Microsoft Learn per creare una risorsa e un modello Azure OpenAI. Seleziona DALL-E 3 come modello.
-
Crea un file .env con il seguente contenuto:
AZURE_OPENAI_ENDPOINT=<your endpoint> AZURE_OPENAI_API_KEY=<your key> AZURE_OPENAI_DEPLOYMENT="dall-e-3"Trova queste informazioni nel portale Azure OpenAI Foundry per la tua risorsa nella sezione "Deployments".
-
Raccogli le librerie sopra in un file chiamato requirements.txt come segue:
python-dotenv openai pillow requests -
Successivamente, 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 il tuo 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 from openai import OpenAI, AzureOpenAI # import dotenv dotenv.load_dotenv() # configure Azure OpenAI service client client = AzureOpenAI( azure_endpoint = os.environ["AZURE_OPENAI_ENDPOINT"], api_key=os.environ['AZURE_OPENAI_API_KEY'], api_version = "2024-02-01" ) try: # Create an image by using the image generation API generation_response = client.images.generate( prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', size='1024x1024', n=1, model=os.environ['AZURE_OPENAI_DEPLOYMENT'] ) # 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:
-
Per prima cosa, importiamo le librerie necessarie, inclusa la libreria OpenAI, la libreria dotenv, la libreria requests e la libreria Pillow.
import openai import os import requests from PIL import Image import dotenv
-
Successivamente, carichiamo le variabili d'ambiente dal file .env.
# import dotenv dotenv.load_dotenv()
-
Dopo di che, configuriamo il client del servizio Azure OpenAI.
# Get endpoint and key from environment variables client = AzureOpenAI( azure_endpoint = os.environ["AZURE_OPENAI_ENDPOINT"], api_key=os.environ['AZURE_OPENAI_API_KEY'], api_version = "2024-02-01" )
-
Successivamente, generiamo l'immagine:
# Create an image by using the image generation API generation_response = client.images.generate( prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', size='1024x1024', n=1, model=os.environ['AZURE_OPENAI_DEPLOYMENT'] )
Il codice sopra risponde con un oggetto JSON che contiene l'URL dell'immagine generata. Possiamo utilizzare l'URL per scaricare l'immagine e salvarla in un file.
-
Infine, apriamo l'immagine e utilizziamo il visualizzatore di immagini standard per visualizzarla:
image = Image.open(image_path) image.show()
Esaminiamo il codice che genera l'immagine più nel dettaglio:
generation_response = client.images.generate(
prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils',
size='1024x1024', n=1,
model=os.environ['AZURE_OPENAI_DEPLOYMENT']
)- prompt, è il prompt testuale utilizzato per generare l'immagine. In questo caso, stiamo usando il prompt "Coniglio su un cavallo, con un lecca-lecca, in un prato nebbioso dove crescono narcisi".
- size, è la dimensione dell'immagine generata. In questo caso, stiamo generando un'immagine di 1024x1024 pixel.
- n, è il numero di immagini generate. In questo caso, stiamo generando due immagini.
- temperature, è un parametro che controlla la casualità dell'output di un modello di AI Generativa. La temperatura è un valore compreso tra 0 e 1, dove 0 significa che l'output è deterministico e 1 significa che l'output è casuale. Il valore predefinito è 0.7.
Ci sono altre cose che puoi fare con le immagini che tratteremo nella prossima sezione.
Finora hai visto come siamo stati in grado di generare un'immagine usando poche righe di codice in Python. Tuttavia, ci sono altre cose che puoi fare con le immagini.
Puoi anche fare quanto segue:
- Effettuare modifiche. Fornendo un'immagine esistente, una maschera e un prompt, puoi modificare un'immagine. Ad esempio, puoi aggiungere qualcosa a una parte di un'immagine. Immagina la nostra immagine del coniglio, puoi aggiungere un cappello al coniglio. Come fare ciò è fornendo l'immagine, una maschera (identificando la parte dell'area per la modifica) e un prompt testuale per indicare cosa dovrebbe essere fatto.
Nota: questo non è supportato in DALL-E 3.
Ecco un esempio usando GPT Image:
response = client.images.edit(
model="gpt-image-1",
image=open("sunlit_lounge.png", "rb"),
mask=open("mask.png", "rb"),
prompt="A sunlit indoor lounge area with a pool containing a flamingo"
)
image_url = response.data[0].urlL'immagine di base conterrebbe solo il salotto con piscina, ma l'immagine finale avrebbe un fenicottero:
-
Creare variazioni. L'idea è che prendi un'immagine esistente e chiedi che vengano create delle variazioni. Per creare una variazione, fornisci un'immagine e un prompt testuale e un codice come segue:
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 AI Generativa. La temperatura è un valore compreso tra 0 e 1, dove 0 significa che l'output è deterministico e 1 significa che l'output è casuale. Il valore predefinito è 0.7.
Esaminiamo un esempio di come funziona la temperatura, eseguendo questo prompt due volte:
Prompt : "Coniglio su un cavallo, con un lecca-lecca, in un prato nebbioso dove crescono narcisi"
Ora eseguiamo lo stesso prompt solo per vedere che non otterremo la stessa immagine due volte:
Come puoi vedere, le immagini sono simili, ma non identiche. Proviamo a cambiare il valore della temperatura a 0.1 e vediamo cosa succede:
generation_response = client.images.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. Abbiamo osservato dalle due immagini generate che nella prima immagine c'è un coniglio e nella seconda immagine c'è un cavallo, quindi le immagini variano molto.
Cambiamo quindi il nostro codice e impostiamo la temperatura a 0, come segue:
generation_response = client.images.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, quando esegui questo codice, ottieni queste due immagini:
Qui puoi chiaramente vedere come le immagini si somigliano di più.
Con la nostra demo, possiamo già generare immagini per i nostri clienti. Tuttavia, dobbiamo creare alcuni limiti per la nostra applicazione.
Ad esempio, non vogliamo generare immagini che non siano adatte al lavoro o che non siano appropriate per i bambini.
Possiamo farlo con i metaprompt. I metaprompt sono prompt testuali utilizzati per controllare l'output di un modello di AI Generativa. Ad esempio, possiamo utilizzare i metaprompt per controllare l'output e garantire che le immagini generate siano adatte al lavoro o appropriate per i bambini.
Ora, come funzionano i metaprompt?
I metaprompt sono prompt testuali utilizzati per controllare l'output di un modello di AI Generativa, sono posizionati prima del prompt testuale e vengono utilizzati per controllare l'output del modello e incorporati nelle applicazioni per controllare l'output del modello. Incapsulano l'input del prompt e l'input 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 possiamo utilizzare 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 create considerano il metaprompt.
Abbiamo introdotto Edu4All all'inizio di questa lezione. Ora è il momento di abilitare gli studenti a generare immagini per le loro valutazioni.
Gli studenti creeranno immagini per le loro valutazioni contenenti monumenti; esattamente quali monumenti dipenderà dagli studenti. Gli studenti sono invitati a usare la loro creatività in questo compito per collocare questi monumenti in contesti diversi.
Ecco una possibile soluzione:
import openai
import os
import requests
from PIL import Image
import dotenv
from openai import AzureOpenAI
# import dotenv
dotenv.load_dotenv()
# Get endpoint and key from environment variables
client = AzureOpenAI(
azure_endpoint = os.environ["AZURE_OPENAI_ENDPOINT"],
api_key=os.environ['AZURE_OPENAI_API_KEY'],
api_version = "2024-02-01"
)
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 = client.images.generate(
prompt=prompt, # Enter your prompt text here
size='1024x1024',
n=1,
)
# 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.BadRequestError as err:
print(err)Dopo aver completato questa lezione, dai un'occhiata alla nostra collezione di apprendimento sull'AI generativa per continuare a migliorare le tue conoscenze sull'AI generativa!
Vai alla Lezione 10, dove vedremo come creare applicazioni AI con low-code
Disclaimer:
Questo documento è stato tradotto utilizzando il servizio di traduzione AI Co-op Translator. Sebbene ci impegniamo per garantire l'accuratezza, si prega di notare che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali incomprensioni o interpretazioni errate derivanti dall'uso di questa traduzione.








