Er is meer mogelijk met LLMs dan alleen tekstgeneratie. Het is ook mogelijk om afbeeldingen te genereren op basis van tekstbeschrijvingen. Het gebruik van afbeeldingen als modaliteit kan zeer nuttig zijn in verschillende gebieden zoals MedTech, architectuur, toerisme, gameontwikkeling en meer. In dit hoofdstuk bekijken we de twee meest populaire modellen voor beeldgeneratie, DALL-E en Midjourney.
In deze les behandelen we:
- Beeldgeneratie en waarom het nuttig is.
- DALL-E en Midjourney, wat ze zijn en hoe ze werken.
- Hoe je een applicatie voor beeldgeneratie kunt bouwen.
Na het voltooien van deze les kun je:
- Een applicatie voor beeldgeneratie bouwen.
- Grenzen definiëren voor je applicatie met metaprompts.
- Werken met DALL-E en Midjourney.
Applicaties voor beeldgeneratie zijn een geweldige manier om de mogelijkheden van Generatieve AI te verkennen. Ze kunnen bijvoorbeeld worden gebruikt voor:
-
Afbeeldingsbewerking en synthese. Je kunt afbeeldingen genereren voor verschillende toepassingen, zoals afbeeldingsbewerking en afbeeldingssynthese.
-
Toepassing in verschillende industrieën. Ze kunnen ook worden gebruikt om afbeeldingen te genereren voor verschillende industrieën zoals MedTech, toerisme, gameontwikkeling en meer.
Als onderdeel van deze les blijven we werken met onze startup, Edu4All. De studenten zullen afbeeldingen maken voor hun opdrachten. Wat voor afbeeldingen ze maken, is aan hen, maar ze kunnen bijvoorbeeld illustraties maken voor hun eigen sprookje, een nieuw personage creëren voor hun verhaal, of hun ideeën en concepten visualiseren.
Hier is een voorbeeld van wat de studenten van Edu4All zouden kunnen genereren als ze in de klas werken aan monumenten:
met een prompt zoals:
"Hond naast de Eiffeltoren in het ochtendzonlicht"
DALL-E en Midjourney zijn twee van de meest populaire modellen voor beeldgeneratie. Ze stellen je in staat om afbeeldingen te genereren met behulp van prompts.
Laten we beginnen met DALL-E, een Generatieve AI-model dat afbeeldingen genereert op basis van tekstbeschrijvingen.
DALL-E is een combinatie van twee modellen, CLIP en diffused attention.
-
CLIP, is een model dat embeddings genereert, numerieke representaties van gegevens, uit afbeeldingen en tekst.
-
Diffused attention, is een model dat afbeeldingen genereert uit embeddings. DALL-E is getraind op een dataset van afbeeldingen en tekst en kan worden gebruikt om afbeeldingen te genereren op basis van tekstbeschrijvingen. Bijvoorbeeld, DALL-E kan worden gebruikt om afbeeldingen te genereren van een kat met een hoed, of een hond met een hanenkam.
Midjourney werkt op een vergelijkbare manier als DALL-E; het genereert afbeeldingen op basis van tekstprompts. Midjourney kan ook worden gebruikt om afbeeldingen te genereren met prompts zoals "een kat met een hoed" of "een hond met een hanenkam".
Afbeelding afkomstig van Wikipedia, gegenereerd door Midjourney
Eerst DALL-E. DALL-E is een Generatieve AI-model gebaseerd op de transformer-architectuur met een autoregressieve transformer.
Een autoregressieve transformer bepaalt hoe een model afbeeldingen genereert op basis van tekstbeschrijvingen. Het genereert één pixel tegelijk en gebruikt de gegenereerde pixels om de volgende pixel te genereren. Dit proces herhaalt zich door meerdere lagen in een neuraal netwerk totdat de afbeelding compleet is.
Met dit proces kan DALL-E attributen, objecten, kenmerken en meer in de gegenereerde afbeelding controleren. DALL-E 2 en 3 bieden echter meer controle over de gegenereerde afbeelding.
Wat heb je nodig om een applicatie voor beeldgeneratie te bouwen? Je hebt de volgende bibliotheken nodig:
- python-dotenv, het wordt sterk aanbevolen om deze bibliotheek te gebruiken om je geheimen in een .env-bestand te bewaren, weg van de code.
- openai, deze bibliotheek gebruik je om te communiceren met de OpenAI API.
- pillow, om met afbeeldingen in Python te werken.
- requests, om HTTP-verzoeken te maken.
Als dit nog niet is gedaan, volg dan de instructies op de Microsoft Learn pagina om een Azure OpenAI-resource en -model te maken. Selecteer DALL-E 3 als model.
-
Maak een bestand .env met de volgende inhoud:
AZURE_OPENAI_ENDPOINT=<your endpoint> AZURE_OPENAI_API_KEY=<your key> AZURE_OPENAI_DEPLOYMENT="dall-e-3"Zoek deze informatie in het Azure OpenAI Foundry Portal voor je resource in de sectie "Deployments".
-
Verzamel de bovenstaande bibliotheken in een bestand genaamd requirements.txt zoals hieronder:
python-dotenv openai pillow requests -
Maak vervolgens een virtuele omgeving en installeer de bibliotheken:
python3 -m venv venv source venv/bin/activate pip install -r requirements.txtVoor Windows gebruik je de volgende commando's om je virtuele omgeving te maken en te activeren:
python3 -m venv venv venv\Scripts\activate.bat
-
Voeg de volgende code toe in een bestand genaamd 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)
Laten we deze code uitleggen:
-
Eerst importeren we de bibliotheken die we nodig hebben, waaronder de OpenAI-bibliotheek, de dotenv-bibliotheek, de requests-bibliotheek en de Pillow-bibliotheek.
import openai import os import requests from PIL import Image import dotenv
-
Vervolgens laden we de omgevingsvariabelen uit het .env-bestand.
# import dotenv dotenv.load_dotenv()
-
Daarna configureren we de Azure OpenAI-serviceclient.
# 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" )
-
Vervolgens genereren we de afbeelding:
# 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'] )
De bovenstaande code geeft een JSON-object terug dat de URL van de gegenereerde afbeelding bevat. We kunnen de URL gebruiken om de afbeelding te downloaden en op te slaan in een bestand.
-
Tot slot openen we de afbeelding en gebruiken we de standaard afbeeldingsviewer om deze weer te geven:
image = Image.open(image_path) image.show()
Laten we de code die de afbeelding genereert in meer detail bekijken:
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, is de tekstprompt die wordt gebruikt om de afbeelding te genereren. In dit geval gebruiken we de prompt "Konijn op paard, met een lolly, op een mistige weide waar narcissen groeien".
- size, is de grootte van de afbeelding die wordt gegenereerd. In dit geval genereren we een afbeelding van 1024x1024 pixels.
- n, is het aantal afbeeldingen dat wordt gegenereerd. In dit geval genereren we twee afbeeldingen.
- temperature, is een parameter die de willekeurigheid van de output van een Generatieve AI-model controleert. De temperatuur is een waarde tussen 0 en 1, waarbij 0 betekent dat de output deterministisch is en 1 betekent dat de output willekeurig is. De standaardwaarde is 0,7.
Er zijn meer dingen die je kunt doen met afbeeldingen, die we in de volgende sectie zullen behandelen.
Je hebt tot nu toe gezien hoe we een afbeelding konden genereren met een paar regels Python. Er zijn echter meer dingen die je kunt doen met afbeeldingen.
Je kunt ook het volgende doen:
- Bewerkingen uitvoeren. Door een bestaande afbeelding, een masker en een prompt te geven, kun je een afbeelding aanpassen. Bijvoorbeeld, je kunt iets toevoegen aan een deel van een afbeelding. Stel je onze konijn-afbeelding voor; je kunt een hoed toevoegen aan het konijn. Hoe je dat doet, is door de afbeelding, een masker (dat het deel van het gebied voor de wijziging identificeert) en een tekstprompt te geven om te zeggen wat er moet worden gedaan.
Let op: dit wordt niet ondersteund in DALL-E 3.
Hier is een voorbeeld met 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].urlDe basisafbeelding zou alleen de lounge met zwembad bevatten, maar de uiteindelijke afbeelding zou een flamingo hebben:
-
Variaties creëren. Het idee is dat je een bestaande afbeelding neemt en vraagt om variaties te creëren. Om een variatie te creëren, geef je een afbeelding en een tekstprompt en code zoals hieronder:
response = openai.Image.create_variation( image=open("bunny-lollipop.png", "rb"), n=1, size="1024x1024" ) image_url = response['data'][0]['url']
Let op, dit wordt alleen ondersteund door OpenAI.
Temperatuur is een parameter die de willekeurigheid van de output van een Generatieve AI-model controleert. De temperatuur is een waarde tussen 0 en 1, waarbij 0 betekent dat de output deterministisch is en 1 betekent dat de output willekeurig is. De standaardwaarde is 0,7.
Laten we een voorbeeld bekijken van hoe temperatuur werkt door deze prompt twee keer uit te voeren:
Prompt: "Konijn op paard, met een lolly, op een mistige weide waar narcissen groeien"
Nu voeren we dezelfde prompt opnieuw uit om te zien dat we niet twee keer dezelfde afbeelding krijgen:
Zoals je kunt zien, lijken de afbeeldingen op elkaar, maar zijn ze niet hetzelfde. Laten we proberen de temperatuurwaarde te veranderen naar 0,1 en kijken wat er gebeurt:
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
)Laten we proberen de respons meer deterministisch te maken. We konden uit de twee afbeeldingen die we genereerden observeren dat er in de eerste afbeelding een konijn is en in de tweede afbeelding een paard, dus de afbeeldingen variëren sterk.
Laten we daarom onze code veranderen en de temperatuur instellen op 0, zoals hieronder:
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
)Nu krijg je bij het uitvoeren van deze code de volgende twee afbeeldingen:
Hier kun je duidelijk zien hoe de afbeeldingen meer op elkaar lijken.
Met onze demo kunnen we al afbeeldingen genereren voor onze klanten. We moeten echter enkele grenzen stellen voor onze applicatie.
Bijvoorbeeld, we willen geen afbeeldingen genereren die niet geschikt zijn voor werk, of die niet geschikt zijn voor kinderen.
We kunnen dit doen met metaprompts. Metaprompts zijn tekstprompts die worden gebruikt om de output van een Generatieve AI-model te controleren. Bijvoorbeeld, we kunnen metaprompts gebruiken om de output te controleren en ervoor te zorgen dat de gegenereerde afbeeldingen geschikt zijn voor werk of geschikt zijn voor kinderen.
Hoe werken metaprompts?
Metaprompts zijn tekstprompts die worden gebruikt om de output van een Generatieve AI-model te controleren. Ze worden vóór de tekstprompt geplaatst en worden gebruikt om de output van het model te controleren en ingebed in applicaties om de output van het model te controleren. Ze combineren de promptinput en de metapromptinput in een enkele tekstprompt.
Een voorbeeld van een metaprompt zou het volgende zijn:
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)
Nu laten we zien hoe we metaprompts kunnen gebruiken in onze 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 imageUit de bovenstaande prompt kun je zien hoe alle afbeeldingen die worden gemaakt rekening houden met de metaprompt.
We hebben Edu4All geïntroduceerd aan het begin van deze les. Nu is het tijd om de studenten in staat te stellen afbeeldingen te genereren voor hun opdrachten.
De studenten zullen afbeeldingen maken voor hun opdrachten met monumenten. Welke monumenten ze kiezen, is aan hen. De studenten worden gevraagd hun creativiteit te gebruiken in deze taak om deze monumenten in verschillende contexten te plaatsen.
Hier is een mogelijke oplossing:
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)Na het voltooien van deze les, bekijk onze Generative AI Learning collectie om je kennis over Generatieve AI verder uit te breiden!
Ga naar Les 10, waar we gaan kijken hoe je AI-toepassingen kunt bouwen met low-code.
Disclaimer:
Dit document is vertaald met behulp van de AI-vertalingsservice Co-op Translator. Hoewel we streven naar nauwkeurigheid, dient u zich ervan bewust te zijn dat geautomatiseerde vertalingen fouten of onnauwkeurigheden kunnen bevatten. Het originele document in de oorspronkelijke taal moet worden beschouwd als de gezaghebbende bron. Voor cruciale informatie wordt professionele menselijke vertaling aanbevolen. Wij zijn niet aansprakelijk voor eventuele misverstanden of verkeerde interpretaties die voortvloeien uit het gebruik van deze vertaling.








