Benyt OpenAI's DALL·E 2-model til at generere billeder ved hjælp af Python.

Hvis du nogensinde har brugt ChatGPT, så har du været vidne til dets intuition. Med OpenAI's API'er er kodegenerering, tekstfuldførelse, tekstsammenligning, modeltræning og billedgenerering i bagagen for udviklere at udforske og integrere i apps.

I denne vejledning lærer du, hvordan du bruger OpenAI's API med Python til at generere, redigere og variere billeder ved hjælp af prompter i naturligt sprog.

Kom godt i gang med OpenAI ved hjælp af Python

Du skal konfigurere et par ting, før du starter denne øvelse. Først skal du sikre dig, at du har installeret Pythons seneste version på din computer. Hvis du bruger en Linux-distribution som Ubuntu, vil du måske også se hvordan man installerer Python på Ubuntu.

Opret en ny mappe til dit projekt, og åbn din kommandolinje til din projektmappe.

Dernæst er OpenAI-pakkeinstallationen. Du skal installere pude at konvertere billeder til RGBA, mens du bruger billedredigeringsslutpunktet. Du vil måske også installere

instagram viewer
python-dotenv; du skal bruge dette til at maskere hemmelige nøgler.

Vi anbefaler at oprette en dedikeret Python virtuelt miljø at isolere afhængigheder.

Koden brugt i dette projekt er tilgængelig i en GitHub-depot og er gratis for dig at bruge under MIT-licensen.

For at installere python-dotenv, pude, og openai pakker skal du køre følgende kommando i terminalen:

pip installer openai python-dotenv pude

Gå nu over til OpenAI og log ind på dit dashboard for at få fat i din API-nøgle:

  1. Når du er logget ind, skal du klikke på dit profilikon øverst til højre.
  2. Gå til Se API-nøgler. Hvis din API-nøgle ikke er synlig, skal du klikke Opret ny hemmelig nøgle at generere en ny.
  3. Kopier den genererede hemmelige nøgle og indsæt den et sikkert sted på din computer. Du vil måske indsætte den i en miljøvariabelfil i dit projekts rodmappe for sikkerhed.

Sådan genereres og redigeres billeder med OpenAI API i Python

OpenAI API's billedgenerering har endepunkter til at generere nye billeder, skabe billedvariationer og redigere dem.

I de følgende sektioner vil du udforske disse endepunkter for at generere, redigere, justere og downloade billeder ved hjælp af prompter i naturligt sprog.

Generering af billeder ved hjælp af OpenAI API

Billedgenereringsslutpunktet accepterer tre søgeordsargumenter. Disse omfatter hurtig, n, og størrelse.

Det hurtig nøgleord er en tekststreng, der beskriver det billede, du ønsker at generere, mens n er antallet af billeder, der skal genereres under et API-kald. Det størrelse er billedstørrelsen, og i skrivende stund accepterer den kun 256x256, 512x512 og 1024x1024 pixels, ifølge embedsmanden OpenAI billedgenereringsdokumentation.

Følgende kode genererer billeder ved hjælp af prompter på naturligt sprog og udsender deres URL (billedadresser):

importere openai
importere os
importere anmodninger
fra dotenv importere load_dotenv
fra PIL importere Billede
load_dotenv()

klasseImageGenerator:
def__i det__(selv) -> str:
self.image_url: str
openai.api_key = os.getenv("OPENAI_API_KEY")
selv. APIKey = openai.api_key
selv.navn = Ingen

defgenerere billede(selv, Spørg, ImageCount, ImageSize):
prøve:
selv. API-nøgle
svar = åbenai. Image.create(
prompt = prompt,
n = ImageCount,
størrelse = billedstørrelse,
)
self.image_url = svar['data']

self.image_url = [billede["url"] til billede i self.image_url]
print (self.image_url)
Vend tilbage self.image_url
undtagen openai.fejl. OpenAIError som e:
print (f.eks. http_status)
print (e.error)

defdownload billede(selv, navne)-> Ingen:
prøve:
self.name = navne
til url i self.image_url:
image = requests.get (url)
til navn i selv.navn:
med åben("{}.png".format (navn), "wb") som f:
f.write (image.content)
undtagen:
Print("En fejl opstod")
Vend tilbage selv.navn

# Instantiér klassen
imageGen = ImageGenerator()

# Generer billeder:
imageGen.generateImage(
Spørg = "Kæmpe løve, bjørn, abe og tiger står på et vandfald",
ImageCount = 2,
Billedstørrelse = '1024x1024'
)

# Download billederne:
imageGen.downloadImage (navne=[
"Dyr",
"Dyr 2"
])

Ovenstående kode indeholder en ImageGenerator klasse med image_url og API-nøgle egenskaber. Det generere billede metode tilpasser kravene til billedgenereringsslutpunktet. Det genererer n URL'er, der bruger den naturlige sprogprompt, afhængigt af ImageCount værdi.

Imidlertid, self.image_url udtrækker de genererede billed-URL'er fra JSON-svaret til en liste ved hjælp af for-løkken i en listeforståelse.

Output ser således ud:

Endelig download billede metode downloader hvert billede ved at anmode om de genererede adresser. Denne metode accepterer n antallet af navne, du ønsker at give hvert billede.

Redigering af billeder ved hjælp af OpenAI API

Redigeringsslutpunktet giver dig mulighed for at redigere et eksisterende billede baseret på en maskeskabelon. Masken er et RGBA-format med et kommenteret, gennemsigtigt område og skal have samme størrelse som det billede, du vil redigere.

Når du angiver en maske, erstatter redigeringsslutpunktet dets maskerede område med den nye prompt i det eksisterende billede for at producere et nyt. Tilføj følgende metoder til ovenstående tidligere klasse:

klasseImageGenerator:
def__i det__(selv,...):
...

defkonverterBillede(selv, maskenavn):
billede = Image.open("{}.png".format (maskenavn))
rgba_image = image.convert('RGBA')
rgba_image.save("{}.png".format (maskenavn))

Vend tilbage rgba_image


defeditImage(self, imageName, maskName, ImageCount, ImageSize, Prompt) -> str:
self.convertImage (maskName)
svar = åbenai. Image.create_edit(
billede = åben("{}.png".format (imageName), "rb"),
maske = åben("{}.png".format (maskenavn), "rb"),
prompt = prompt,
n = ImageCount,
størrelse = billedstørrelse,
)
self.image_url = svar['data']
self.image_url = [billede["url"] til billede i self.image_url]

print (self.image_url)
Vend tilbage self.image_url

# Rediger et eksisterende billede:
imageGen.editImage(
billednavn = "Dyr",
maskenavn = "maske",
ImageCount = 1,
Billedstørrelse = "1024x1024",
Spørg = "En ørn står på flodbredden og drikker vand med et stort bjerg"
)

# Download det redigerede billede:
imageGen.downloadImage (navne=[
"Nye dyr",
])

Det konverterBillede metode konverterer maskebilledet til RGBA-format. Du kan opnå dette ved at bruge konvertere metode fra Pythons pudepakke (importeret som PIL).

Når den er konverteret, gemmer den den nye maske som en tilsidesættelse af den eksisterende. Billedkonvertering er således den første opgave redigeringsmetoden (editImage) udfører.

Det billede læser målbilledet fra en eksisterende fil, mens maske læser det konverterede maskebillede, som skal have et gennemsigtigt område.

Du kan markere et gennemsigtigt område i masken vha fotoredigeringssoftware som Gimp eller Photoshop.

For eksempel er billedet, vi ønsker at redigere ved hjælp af prompten i koden ovenfor:

Antag nu, at du vil erstatte antilopen, der står ved flodbredden, med en ørn, som angivet i prompten.

Sådan ser masken ud:

Da nøgleordet i prompten fra ovenstående kode siger "en ørn, der står på flodbredden", bliver den tomme plet fyldt op af en ørn, der erstatter antilopen, der tidligere var der.

Her er det nye billede i denne sag:

Du kan prøve at lege med billedredigeringsslutpunktet ved hjælp af andre billeder.

Generering af billedvariationer i Python ved hjælp af OpenAI API

Variationsslutpunktet genererer alternative billeder fra et eksisterende billede. Udvid billedgeneratorklassen yderligere ved at tilføje en billedvariationsmetode som vist nedenfor:

klasseImageGenerator:
def__i det__(selv) -> str:
...

defbilledvariationer(selv, ImageName, VariationCount, ImageSize):
svar = åbenai. Image.create_variation(
billede = åben("{}.png".format (ImageName), "rb"),
n = VariationCount,
størrelse = ImageSize
)

self.image_url = svar['data']

self.image_url = [billede["url"] til billede i self.image_url]
print (self.image_url)
Vend tilbage self.image_url

# Instantiér klassen
imageGen = ImageGenerator()

# Generer variationer for et eksisterende billede
imageGen.imageVariations(
Billednavn = "Nye_dyr",
VariationCount = 2,
Billedstørrelse = "1024x1024"
)

# Download variationerne
imageGen.downloadImage (navne=[
"Variation 1",
"Variation 2",
]
)

Ovenstående kode genererer variationer af et billede.

Brug OpenAI til din fordel

Mens nogle mennesker frygter, at AI kan stjæle deres job, kan det trods alt være et fristed - hvis du lærer at kontrollere og bruge det. Denne tutorial til oprettelse af OpenAI-billeder er blot et af mange anvendelsesmuligheder af AI i den virkelige verden. OpenAI API'erne giver praktiske fortrænede modeller, som du nemt kan integrere i din app. Så du kan tage udfordringen op og bygge noget værdifuldt ud fra denne tutorial.

Selvom billedgenererings-API'en stadig er i beta, når det skrives, giver det dig allerede mulighed for at lave imaginære kunstværker. Forhåbentlig får den yderligere opdateringer for at tillade opskalering og acceptere varierende billedstørrelser.