Maak gebruik van het DALL·E 2-model van OpenAI om afbeeldingen te genereren met Python.

Als je ooit ChatGPT hebt gebruikt, dan heb je de intuïtie ervan gezien. Met de API's van OpenAI zijn codegeneratie, tekstaanvulling, tekstvergelijking, modeltraining en beeldgeneratie allemaal in de tas voor ontwikkelaars om te verkennen en te integreren in apps.

In deze zelfstudie leert u hoe u de API van OpenAI met Python kunt gebruiken om afbeeldingen te genereren, bewerken en variëren met behulp van aanwijzingen in natuurlijke taal.

Aan de slag met OpenAI met behulp van Python

U moet een paar dingen instellen voordat u met deze zelfstudie begint. Zorg er eerst voor dat je de nieuwste versie van Python op je computer hebt geïnstalleerd. Als je een Linux-distributie zoals Ubuntu gebruikt, wil je misschien ook zien hoe Python op Ubuntu te installeren.

Maak een nieuwe map voor uw project en open uw opdrachtregel naar uw projectdirectory.

Het volgende is de installatie van het OpenAI-pakket. U moet installeren

instagram viewer
kussen om afbeeldingen naar RGBA te converteren terwijl u het beeldbewerkingseindpunt gebruikt. Misschien wilt u ook installeren python-dotenv; je gebruikt dit om geheime sleutels te maskeren.

We raden aan om een speciale virtuele Python-omgeving afhankelijkheden te isoleren.

De code die in dit project wordt gebruikt, is beschikbaar in een GitHub-opslagplaats en is gratis voor u om te gebruiken onder de MIT-licentie.

Om de te installeren python-dotenv, kussen, En open packages, voert u de volgende opdracht uit in de terminal:

pip install openai python-dotenv kussen

Ga nu naar AI openen en log in op uw dashboard om uw API-sleutel te pakken:

  1. Nadat u bent ingelogd, klikt u op uw profielpictogram in de rechterbovenhoek.
  2. Ga naar Bekijk API-sleutels. Als uw API-sleutel niet zichtbaar is, klikt u op Nieuwe geheime sleutel maken om een ​​nieuwe te genereren.
  3. Kopieer de gegenereerde geheime sleutel en plak deze op een veilige plek op uw computer. U kunt het voor beveiliging in een omgevingsvariabelenbestand in de hoofdmap van uw project plakken.

Afbeeldingen genereren en bewerken met OpenAI API in Python

De afbeeldingsgeneratie van de OpenAI API biedt eindpunten voor het genereren van nieuwe afbeeldingen, het maken van afbeeldingsvariaties en het bewerken ervan.

In de volgende secties verken je deze eindpunten om afbeeldingen te genereren, bewerken, aanpassen en downloaden met behulp van aanwijzingen in natuurlijke taal.

Afbeeldingen genereren met behulp van de OpenAI API

Het eindpunt voor het genereren van afbeeldingen accepteert drie trefwoordargumenten. Deze omvatten snel, N, En maat.

De snel trefwoord is een tekstreeks die de afbeelding beschrijft die u wilt genereren, terwijl N is het aantal afbeeldingen dat moet worden gegenereerd tijdens een API-aanroep. De maat is de afbeeldingsgrootte, en op het moment van schrijven accepteert het alleen 256x256, 512x512 en 1024x1024 pixels, volgens de officiële AI openen documentatie voor het genereren van afbeeldingen.

De volgende code genereert afbeeldingen met behulp van prompts in natuurlijke taal en voert hun URL (afbeeldingsadressen) uit:

importeren open
importeren os
importeren aanvragen
van dotenv importeren load_dotenv
van PIL importeren Afbeelding
load_dotenv()

klasImageGenerator:
def__in het__(zelf) -> str:
self.image_url: str
openai.api_key = os.getenv("OPENAI_API_KEY")
zelf. APIKey = openai.api_key
zelf.naam = Geen

defgenereerAfbeelding(zelf, Prompt, ImageCount, ImageSize):
poging:
zelf. API sleutel
reactie = openai. Afbeelding.creëren(
prompt = prompt,
n = aantal afbeeldingen,
grootte = Afbeeldingsgrootte,
)
self.image_url = reactie['gegevens']

self.image_url = [afbeelding["URL"] voor afbeelding in zelf.image_url]
afdrukken (self.image_url)
opbrengst zelf.image_url
behalve openai.error. OpenAIError als e:
afdrukken (e.http_status)
afdrukken (e.fout)

defdownloadAfbeelding(zelf, namen)-> Geen:
poging:
self.name = namen
voor url in zelf.image_url:
afbeelding = verzoeken.get (url)
voor naam in zelf.naam:
met open("{}.png".format (naam), "wb") als F:
f.write (afbeelding.inhoud)
behalve:
afdrukken("Er is een fout opgetreden")
opbrengst zelf.naam

# Instantie van de klas
imageGen = ImageGenerator()

# Genereer afbeeldingen:
imageGen.generateImage(
Vraag = "Giant leeuw, beer, aap en tijger staande op een water waterval",
Aantal afbeeldingen = 2,
Afbeeldingsgrootte = '1024x1024'
)

# Download de afbeeldingen:
imageGen.downloadImage (names=[
"Dieren",
"Dieren2"
])

De bovenstaande code bevat een ImageGenerator klas met de afbeelding URL En API sleutel attributen. De genereerAfbeelding methode past de vereisten van het eindpunt voor het genereren van afbeeldingen aan. Het genereert N URL's die gebruik maken van de prompt in natuurlijke taal, afhankelijk van de ImageCount waarde.

Echter, zelf.image_url extraheert de gegenereerde afbeeldings-URL's uit het JSON-antwoord in een lijst met behulp van de for-lus in een lijstbegrip.

De uitvoer ziet er als volgt uit:

eindelijk, de downloadAfbeelding methode downloadt elke afbeelding door de gegenereerde adressen op te vragen. Deze methode accepteert N aantal namen dat u aan elke afbeelding wilt geven.

Afbeeldingen bewerken met de OpenAI API

Met het bewerkingseindpunt kunt u een bestaande afbeelding bewerken op basis van een maskersjabloon. Het masker is een RGBA-indeling met een geannoteerd, transparant gebied en moet dezelfde grootte hebben als de afbeelding die u wilt bewerken.

Wanneer u een masker opgeeft, vervangt het bewerkingseindpunt het gemaskeerde gebied door de nieuwe prompt in de bestaande afbeelding om een ​​nieuwe te produceren. Voeg de volgende methoden toe aan de bovenstaande vorige klasse:

klasImageGenerator:
def__in het__(zelf, ...):
...

defconvertImage(zelf, maskName):
afbeelding = Afbeelding.open("{}.png".format (maskNaam))
rgba_image = afbeelding.convert('RGBA')
rgba_image.save("{}.png".format (maskNaam))

opbrengst rgba_afbeelding


defbewerk afbeelding(self, imageName, maskName, ImageCount, ImageSize, Prompt) -> str:
self.convertImage (maskNaam)
reactie = openai. Afbeelding.create_edit(
afbeelding = openen("{}.png".format (afbeeldingnaam), "rb"),
masker = open("{}.png".format (maskerNaam), "rb"),
prompt = prompt,
n = aantal afbeeldingen,
grootte = Afbeeldingsgrootte,
)
self.image_url = reactie['gegevens']
self.image_url = [afbeelding["URL"] voor afbeelding in zelf.image_url]

afdrukken (self.image_url)
opbrengst zelf.image_url

# Bewerk een bestaande afbeelding:
afbeeldingGen.editImage(
afbeeldingNaam = "Dieren",
maskerNaam = "masker",
Aantal afbeeldingen = 1,
Afbeeldingsgrootte = "1024x1024",
Vraag = "Een adelaar die aan de oever van de rivier staat om water te drinken met een grote berg"
)

# Download de bewerkte afbeelding:
imageGen.downloadImage (names=[
"Nieuwe dieren",
])

De convertImage methode converteert de maskerafbeelding naar RGBA-indeling. U kunt dit bereiken met behulp van de overzetten methode uit het kussenpakket van Python (geïmporteerd als PIL).

Eenmaal geconverteerd, wordt het nieuwe masker opgeslagen als een vervanging van het bestaande. Beeldconversie is dus de eerste taak van de bewerkingsmethode (bewerk afbeelding) voert uit.

De afbeelding leest de doelafbeelding uit een bestaand bestand, terwijl de masker leest de geconverteerde maskerafbeelding, die een transparant gebied moet hebben.

U kunt een transparant gebied in het masker markeren met behulp van software voor het bewerken van foto's zoals Gimp of Photoshop.

De afbeelding die we willen bewerken met behulp van de prompt in de bovenstaande code is bijvoorbeeld:

Stel nu dat je de antilope die aan de oever van de rivier staat wilt vervangen door een adelaar, zoals vermeld in de prompt.

Zo ziet het masker eruit:

Aangezien het trefwoord in de prompt van de bovenstaande code zegt: "een adelaar die op de rivieroever staat", wordt de lege plek opgevuld door een adelaar, die de antilope vervangt die er eerder was.

Hier is de nieuwe afbeelding in dit geval:

U kunt proberen te spelen met het eindpunt voor het bewerken van afbeeldingen door andere foto's te gebruiken.

Afbeeldingsvariaties genereren in Python met behulp van de OpenAI API

Het variatie-eindpunt genereert alternatieve afbeeldingen van een bestaande afbeelding. Breid de beeldgeneratorklasse verder uit door een beeldvariatiemethode toe te voegen, zoals hieronder weergegeven:

klasImageGenerator:
def__in het__(zelf) -> str:
...

defafbeeldingVariaties(self, ImageName, VariationCount, ImageSize):
reactie = openai. Afbeelding.create_variation(
afbeelding = openen("{}.png".format (Afbeeldingsnaam), "rb"),
n = VariatieAantal,
grootte = Afbeeldingsgrootte
)

self.image_url = reactie['gegevens']

self.image_url = [afbeelding["URL"] voor afbeelding in zelf.image_url]
afdrukken (self.image_url)
opbrengst zelf.image_url

# Instantie van de klas
imageGen = ImageGenerator()

# Genereer variaties voor een bestaande afbeelding
afbeeldingGen.afbeeldingVariaties(
AfbeeldingNaam = "Nieuwe_dieren",
VariatieAantal = 2,
Afbeeldingsgrootte = "1024x1024"
)

# Download de variaties
imageGen.downloadImage (names=[
"Variatie1",
"Variatie2",
]
)

De bovenstaande code genereert variaties van een afbeelding.

Gebruik OpenAI in uw voordeel

Hoewel sommige mensen bang zijn dat AI hun baan zou stelen, kan het toch een toevluchtsoord zijn - als je het leert beheersen en gebruiken. Deze OpenAI-zelfstudie voor het maken van afbeeldingen is slechts een van de vele use-cases van AI in de echte wereld. De OpenAI API's bieden handige voorgetrainde modellen die je eenvoudig kunt integreren in je app. Dus je kunt de uitdaging aangaan en iets waardevols bouwen met deze tutorial.

Hoewel de API voor het genereren van afbeeldingen op het moment van schrijven nog in bèta is, kun je al denkbeeldige kunstwerken maken. Hopelijk krijgt het verdere updates om opschaling mogelijk te maken en verschillende afbeeldingsformaten te accepteren.