Använd OpenAI: s DALL·E 2-modell för att generera bilder med Python.

Om du någonsin har använt ChatGPT, då har du sett dess intuition. Med OpenAI: s API: er är kodgenerering, textkomplettering, textjämförelse, modellträning och bildgenerering i bagaget för utvecklare att utforska och integrera i appar.

I den här handledningen kommer du att lära dig hur du använder OpenAI: s API med Python för att generera, redigera och variera bilder med hjälp av naturliga språkuppmaningar.

Komma igång med OpenAI med Python

Du måste ställa in några saker innan du startar den här handledningen. Se först till att du har installerat Pythons senaste version på din dator. Om du använder en Linux-distribution som Ubuntu kanske du också vill se hur man installerar Python på Ubuntu.

Skapa en ny mapp för ditt projekt och öppna din kommandorad till din projektkatalog.

Nästa är installationen av OpenAI-paketet. Du måste installera kudde för att konvertera bilder till RGBA medan du använder slutpunkten för bildredigering. Du kanske också vill installera

instagram viewer
python-dotenv; du använder detta för att maskera hemliga nycklar.

Vi rekommenderar att du skapar en dedikerad virtuell Python-miljö att isolera beroenden.

Koden som används i detta projekt är tillgänglig i en GitHub-förråd och är gratis för dig att använda under MIT-licensen.

För att installera python-dotenv, kudde, och openai paket, kör följande kommando i terminalen:

pip installera openai python-dotenv kudde

Gå nu över till OpenAI och logga in på din instrumentpanel för att ta din API-nyckel:

  1. När du har loggat in klickar du på din profilikon längst upp till höger.
  2. Gå till Visa API-nycklar. Om din API-nyckel inte är synlig klickar du Skapa ny hemlig nyckel att skapa en ny.
  3. Kopiera den genererade hemliga nyckeln och klistra in den någonstans säkert på din dator. Du kanske vill klistra in den i en miljövariabelfil i ditt projekts rotkatalog för säkerhets skull.

Hur man genererar och redigerar bilder med OpenAI API i Python

OpenAI API: s bildgenerering har slutpunkter för att generera nya bilder, skapa bildvarianter och redigera dem.

I följande avsnitt kommer du att utforska dessa slutpunkter för att generera, redigera, justera och ladda ner bilder med hjälp av uppmaningar på naturligt språk.

Generera bilder med OpenAI API

Bildgenereringsslutpunkten accepterar tre nyckelordsargument. Dessa inkluderar prompt, n, och storlek.

De prompt nyckelord är en textsträng som beskriver bilden du vill skapa, medan n är antalet bilder som ska genereras under ett API-anrop. De storlek är bildstorleken, och i skrivande stund accepterar den bara 256x256, 512x512 och 1024x1024 pixlar, enligt tjänstemannen OpenAI bildgenereringsdokumentation.

Följande kod genererar bilder med hjälp av uppmaningar på naturligt språk och matar ut deras URL (bildadresser):

importera openai
importera os
importera förfrågningar
från dotenv importera load_dotenv
från PIL importera Bild
load_dotenv()

klassImageGenerator:
def__i det__(själv) -> str:
self.image_url: str
openai.api_key = os.getenv("OPENAI_API_KEY")
själv. APIKey = openai.api_key
self.name = Ingen

defgenerera bild(self, prompt, ImageCount, ImageSize):
Prova:
själv. API-nyckel
svar = öppenai. Image.create(
prompt = prompt,
n = ImageCount,
storlek = ImageSize,
)
self.image_url = svar['data']

self.image_url = [bild["url"] för bild i self.image_url]
print (self.image_url)
lämna tillbaka self.image_url
bortsett från openai.error. OpenAIError som e:
print (t.ex. http_status)
skriva ut (e.error)

defladda ner Bild(själv, namn)-> Ingen:
Prova:
self.name = namn
för url i self.image_url:
bild = requests.get (url)
för namn i self.name:
med öppen("{}.png".format (namn), "wb") som f:
f.write (image.content)
bortsett från:
skriva ut("Ett fel inträffade")
lämna tillbaka själv.namn

# Instantiera klassen
imageGen = ImageGenerator()

# Generera bilder:
imageGen.generateImage(
Uppmaning = "Jätte lejon, björn, apa och tiger som står på ett vattenfall",
ImageCount = 2,
Bildstorlek = '1024x1024'
)

# Ladda ner bilderna:
imageGen.downloadImage (namn=[
"Djur",
"Djur 2"
])

Ovanstående kod innehåller en ImageGenerator klass med bild URL och API-nyckel attribut. De generera bild metod anpassar kraven för bildgenereringsslutpunkten. Det genererar n URL: er som använder den naturliga språkprompten, beroende på ImageCount värde.

Dock, self.image_url extraherar de genererade bildwebbadresserna från JSON-svaret till en lista med hjälp av for-loopen i en listförståelse.

Utgången ser ut så här:

Slutligen, den ladda ner Bild metod laddar ner varje bild genom att begära de genererade adresserna. Denna metod accepterar n antal namn som du vill ge varje bild.

Redigera bilder med OpenAI API

Redigeringsslutpunkten låter dig redigera en befintlig bild baserat på en maskmall. Masken är ett RGBA-format med ett kommenterat, transparent område och måste ha samma storlek som bilden du vill redigera.

När du tillhandahåller en mask ersätter redigeringsslutpunkten sitt maskerade område med den nya prompten i den befintliga bilden för att skapa en ny. Lägg till följande metoder till ovanstående föregående klass:

klassImageGenerator:
def__i det__(själv,...):
...

defconvertImage(själv, masknamn):
bild = Image.open("{}.png".format (maskName))
rgba_image = image.convert('RGBA')
rgba_image.save("{}.png".format (maskName))

lämna tillbaka rgba_image


defredigera bild(self, imageName, maskName, ImageCount, ImageSize, Prompt) -> str:
self.convertImage (maskName)
svar = öppenai. Image.create_edit(
bild = öppen("{}.png".format (bildnamn), "rb"),
mask = öppen("{}.png".format (masknamn), "rb"),
prompt = prompt,
n = ImageCount,
storlek = ImageSize,
)
self.image_url = svar['data']
self.image_url = [bild["url"] för bild i self.image_url]

print (self.image_url)
lämna tillbaka self.image_url

# Redigera en befintlig bild:
imageGen.editImage(
bildnamn = "Djur",
maskName = "mask",
ImageCount = 1,
Bildstorlek = "1024x1024",
Uppmaning = "En örn som står på flodstranden och dricker vatten med ett stort berg"
)

# Ladda ner den redigerade bilden:
imageGen.downloadImage (namn=[
"Nya djur",
])

De convertImage metod konverterar maskbilden till RGBA-format. Du kan uppnå detta med hjälp av konvertera metod från Pythons kuddpaket (importerad som PIL).

När den har konverterats sparas den nya masken som en åsidosättande av den befintliga. Således är bildkonvertering den första uppgiften redigeringsmetoden (redigera bild) körs.

De bild läser målbilden från en befintlig fil, medan mask läser den konverterade maskbilden, som måste ha ett genomskinligt område.

Du kan markera ett genomskinligt område i masken med programvara för fotoredigering som Gimp eller Photoshop.

Till exempel är bilden vi vill redigera med hjälp av prompten i koden ovan:

Antag nu att du vill ersätta antilopen som står vid flodstranden med en örn, som det står i uppmaningen.

Så här ser masken ut:

Eftersom nyckelordet i prompten från ovanstående kod säger "en örn som står på flodstranden", fylls den tomma fläcken upp av en örn, som ersätter antilopen som tidigare fanns där.

Här är den nya bilden i det här fallet:

Du kan prova att leka med slutpunkten för bildredigering med hjälp av andra foton.

Generera bildvariationer i Python med OpenAI API

Variationsslutpunkten genererar alternativa bilder från en befintlig bild. Expandera bildgeneratorklassen ytterligare genom att lägga till en bildvariationsmetod som visas nedan:

klassImageGenerator:
def__i det__(själv) -> str:
...

defbildVariationer(self, ImageName, VariationCount, ImageSize):
svar = öppenai. Image.create_variation(
bild = öppen("{}.png".format (Bildnamn), "rb"),
n = VariationCount,
storlek = ImageSize
)

self.image_url = svar['data']

self.image_url = [bild["url"] för bild i self.image_url]
print (self.image_url)
lämna tillbaka self.image_url

# Instantiera klassen
imageGen = ImageGenerator()

# Generera varianter för en befintlig bild
imageGen.imageVariations(
Bildnamn = "Nya_djur",
VariationCount = 2,
Bildstorlek = "1024x1024"
)

# Ladda ner varianterna
imageGen.downloadImage (namn=[
"Variation1",
"Variation 2",
]
)

Ovanstående kod genererar varianter av en bild.

Använd OpenAI till din fördel

Medan vissa människor fruktar att AI kan stjäla deras jobb, kan det trots allt vara en fristad – om du lär dig att kontrollera och använda den. Den här självstudien för skapande av OpenAI-bilder är bara ett av många användningsfall av AI i den verkliga världen. OpenAI API: erna tillhandahåller praktiska förutbildade modeller som du enkelt kan integrera i din app. Så du kan anta utmaningen och bygga något värdefullt från denna handledning.

Även om API: et för bildgenerering fortfarande är i beta när det skrivs, låter det dig redan skapa imaginära konstverk. Förhoppningsvis får den ytterligare uppdateringar för att tillåta uppskalning och acceptera varierande bildstorlekar.