Utilizza il modello DALL·E 2 di OpenAI per generare immagini utilizzando Python.

Se hai mai usato ChatGPT, allora hai assistito alla sua intuizione. Con le API di OpenAI, la generazione del codice, il completamento del testo, il confronto del testo, l'addestramento del modello e la generazione di immagini sono tutti elementi che gli sviluppatori possono esplorare e integrare nelle app.

In questo tutorial imparerai come utilizzare l'API di OpenAI con Python per generare, modificare e variare le immagini utilizzando prompt in linguaggio naturale.

Iniziare con OpenAI usando Python

Devi impostare alcune cose prima di iniziare questo tutorial. Innanzitutto, assicurati di aver installato l'ultima versione di Python sul tuo computer. Se usi una distribuzione Linux come Ubuntu, potresti anche voler vedere come installare Python su Ubuntu.

Crea una nuova cartella per il tuo progetto e apri la riga di comando nella directory del tuo progetto.

La prossima è l'installazione del pacchetto OpenAI. Devi installare

instagram viewer
cuscino per convertire le immagini in RGBA durante l'utilizzo dell'endpoint di modifica delle immagini. Potresti anche voler installare python-dotenv; lo userai per mascherare le chiavi segrete.

Si consiglia di creare un file ambiente virtuale Python dedicato isolare le dipendenze

Il codice utilizzato in questo progetto è disponibile in a Deposito GitHub ed è gratuito per l'uso con la licenza MIT.

Per installare il python-dotenv, cuscino, E openai pacchetti, eseguire il seguente comando nel terminale:

pip installa il cuscino openai python-dotenv

Ora vai a OpenAI e accedi alla tua dashboard per prendere la tua chiave API:

  1. Una volta effettuato l'accesso, fai clic sull'icona del tuo profilo nella sezione in alto a destra.
  2. Vai a Visualizza le chiavi API. Se la tua chiave API non è visibile, fai clic su Crea una nuova chiave segreta per generarne uno nuovo.
  3. Copia la chiave segreta generata e incollala in un posto sicuro sul tuo computer. Potresti volerlo incollare in un file di variabile di ambiente nella directory principale del progetto per sicurezza.

Come generare e modificare immagini con l'API OpenAI in Python

La generazione di immagini dell'API OpenAI presenta endpoint per la generazione di nuove immagini, la creazione di varianti di immagini e la loro modifica.

Nelle sezioni seguenti, esplorerai questi endpoint per generare, modificare, modificare e scaricare immagini utilizzando prompt in linguaggio naturale.

Generazione di immagini utilizzando l'API OpenAI

L'endpoint di generazione dell'immagine accetta tre argomenti di parole chiave. Questi includono richiesta, N, E misurare.

IL richiesta parola chiave è una stringa di testo che descrive l'immagine che desideri generare, mentre N è il numero di immagini da generare durante una chiamata API. IL misurare è la dimensione dell'immagine e, al momento della scrittura, accetta solo 256x256, 512x512 e 1024x1024 pixel, secondo il funzionario OpenAI documentazione della generazione di immagini.

Il codice seguente genera immagini utilizzando prompt in linguaggio naturale e restituisce il loro URL (indirizzi immagine):

importare openai
importare os
importare richieste
da dotenv importare load_dotenv
da PIL importare Immagine
load_dotenv()

classeGeneratore di immagini:
def__dentro__(se stesso) -> str:
self.image_url: str
openai.api_key = os.getenv("OPENAI_API_KEY")
se stesso. ChiaveAPI = openai.api_key
self.nome = Nessuno

defgenerateImage(self, Prompt, ImageCount, ImageSize):
Tentativo:
se stesso. Chiave API
risposta = openai. Immagine.create(
prompt = Prompt,
n = Conteggio immagini,
dimensione = Dimensione immagine,
)
self.image_url = risposta['dati']

self.image_url = [immagine["URL"] per Immagine In self.image_url]
stampa (self.image_url)
ritorno self.image_url
tranne errore.openai. OpenAIError COME e:
stampa (e.http_status)
stampa (e.errore)

defscarica l'immagine(sé, nomi)-> Nessuno:
Tentativo:
self.name = nomi
per URL In self.image_url:
immagine = richieste.get (url)
per nome In nome proprio:
con aprire("{}.png".format (nome), "wb") COME F:
f.write (immagine.contenuto)
tranne:
stampa("Si è verificato un errore")
ritorno self.nome

# Crea un'istanza della classe
imageGen = ImageGenerator()

# Genera immagini:
imageGen.generateImage(
Prompt = "Leone gigante, orso, scimmia e tigre in piedi su una cascata d'acqua",
Conteggioimmagini = 2,
Dimensione immagine = '1024x1024'
)

# Scarica le immagini:
imageGen.downloadImage (nomi=[
"Animali",
"Animali2"
])

Il codice sopra contiene un Generatore di immagini classe con il URL dell'immagine E Chiave API attributi. IL generateImage Il metodo adatta i requisiti dell'endpoint di generazione dell'immagine. Genera N URL che utilizzano il prompt in linguaggio naturale, a seconda del Conteggio immagini valore.

Tuttavia, self.image_url estrae gli URL delle immagini generate dalla risposta JSON in un elenco utilizzando il ciclo for in una comprensione dell'elenco.

L'output è simile al seguente:

Infine il scarica l'immagine Il metodo scarica ogni immagine richiedendo gli indirizzi generati. Questo metodo accetta N numero di nomi che si desidera assegnare a ciascuna immagine.

Modifica delle immagini utilizzando l'API OpenAI

L'endpoint di modifica consente di modificare un'immagine esistente in base a un modello di maschera. La maschera è un formato RGBA con un'area trasparente annotata e deve avere le stesse dimensioni dell'immagine che si desidera modificare.

Quando fornisci una maschera, l'endpoint di modifica sostituisce la sua area mascherata con il nuovo prompt nell'immagine esistente per produrne una nuova. Aggiungi i seguenti metodi alla classe precedente precedente:

classeGeneratore di immagini:
def__dentro__(se stesso, ...):
...

defconvertImage(self, maskName):
immagine = Immagine.apri("{}.png".format (NomeMaschera))
rgba_image = immagine.convert('RGB')
immagine_rgba.save("{}.png".format (NomeMaschera))

ritorno immagine_rgba


defeditImage(self, imageName, maskName, ImageCount, ImageSize, Prompt) -> str:
self.convertImage (maskName)
risposta = openai. Immagine.create_edit(
immagine = apri("{}.png".format (nomeimmagine), "rb"),
maschera = aperto("{}.png".format (NomeMaschera), "rb"),
prompt = Prompt,
n = Conteggio immagini,
dimensione = Dimensione immagine,
)
self.image_url = risposta['dati']
self.image_url = [immagine["URL"] per Immagine In self.image_url]

stampa (self.image_url)
ritorno self.image_url

# Modifica un'immagine esistente:
imageGen.editImage(
nomeimmagine = "Animali",
mascheraNome = "maschera",
Conteggioimmagini = 1,
Dimensione immagine = "1024x1024",
Prompt = "Un'aquila in piedi sulla riva del fiume che beve acqua con una grande montagna"
)

# Scarica l'immagine modificata:
imageGen.downloadImage (nomi=[
"Nuovi animali",
])

IL convertImage Il metodo converte l'immagine della maschera nel formato RGBA. È possibile ottenere questo utilizzando il convertire metodo dal pacchetto pillow di Python (importato come PIL).

Una volta convertito, salva la nuova maschera come override di quella esistente. Pertanto, la conversione delle immagini è la prima attività del metodo di modifica (editImage) esegue.

IL Immagine legge l'immagine di destinazione da un file esistente, mentre il file maschera legge l'immagine della maschera convertita, che deve avere un'area trasparente.

È possibile contrassegnare un'area trasparente nella maschera utilizzando software di fotoritocco come Gimp o Photoshop.

Ad esempio, l'immagine che vogliamo modificare utilizzando il prompt nel codice sopra è:

Ora, supponi di voler sostituire l'antilope in piedi sulla riva del fiume con un'aquila, come indicato nel prompt.

Ecco come appare la maschera:

Poiché la parola chiave nel prompt del codice precedente dice "un'aquila in piedi sulla riva del fiume", lo spazio vuoto viene riempito da un'aquila, che sostituisce l'antilope che c'era prima.

Ecco la nuova immagine in questo caso:

Puoi provare a giocare con l'endpoint di modifica delle immagini usando altre foto.

Generazione di variazioni di immagini in Python utilizzando l'API OpenAI

L'endpoint della variante genera immagini alternative da un'immagine esistente. Espandi ulteriormente la classe del generatore di immagini aggiungendo un metodo di variazione dell'immagine come mostrato di seguito:

classeGeneratore di immagini:
def__dentro__(se stesso) -> str:
...

defimageVariations(self, ImageName, VariationCount, ImageSize):
risposta = openai. Immagine.create_variazione(
immagine = apri("{}.png".format (NomeImmagine), "rb"),
n = VariationCount,
size = ImageSize
)

self.image_url = risposta['dati']

self.image_url = [immagine["URL"] per Immagine In self.image_url]
stampa (self.image_url)
ritorno self.image_url

# Crea un'istanza della classe
imageGen = ImageGenerator()

# Genera variazioni per un'immagine esistente
imageGen.imageVariations(
NomeImmagine = "Nuovi_Animali",
VariationCount = 2,
Dimensione immagine = "1024x1024"
)

# Scarica le varianti
imageGen.downloadImage (nomi=[
"Variazione1",
"Variazione2",
]
)

Il codice precedente genera variazioni di un'immagine.

Usa OpenAI a tuo vantaggio

Mentre alcune persone temono che l'IA possa rubare il loro lavoro, dopotutto potrebbe essere un rifugio, se impari a controllarlo e usarlo. Questo tutorial sulla creazione di immagini OpenAI è solo uno dei tanti casi d'uso dell'IA nel mondo reale. Le API OpenAI forniscono pratici modelli pre-addestrati che puoi facilmente integrare nella tua app. Quindi puoi raccogliere la sfida e costruire qualcosa di utile da questo tutorial.

Sebbene l'API di generazione delle immagini sia ancora in versione beta al momento della scrittura, ti consente già di creare opere d'arte immaginarie. Si spera che ottenga ulteriori aggiornamenti per consentire l'upscaling e accettare diverse dimensioni dell'immagine.