LLMs können mehr als nur Text generieren. Es ist auch möglich, Bilder aus Textbeschreibungen zu erzeugen. Bilder als Modalität zu haben, kann in vielen Bereichen sehr nützlich sein, von MedTech, Architektur, Tourismus, Spieleentwicklung und mehr. In diesem Kapitel schauen wir uns die zwei beliebtesten Bildgenerierungsmodelle an: DALL-E und Midjourney.
In dieser Lektion behandeln wir:
- Bildgenerierung und warum sie nützlich ist.
- DALL-E und Midjourney: Was sie sind und wie sie funktionieren.
- Wie man eine Bildgenerierungsanwendung erstellt.
Nach Abschluss dieser Lektion wirst du in der Lage sein:
- Eine Bildgenerierungsanwendung zu erstellen.
- Grenzen für deine Anwendung mit Metaprompts zu definieren.
- Mit DALL-E und Midjourney zu arbeiten.
Bildgenerierungsanwendungen sind eine großartige Möglichkeit, die Fähigkeiten von Generativer KI zu erkunden. Sie können beispielsweise verwendet werden für:
-
Bildbearbeitung und -synthese. Du kannst Bilder für verschiedene Anwendungsfälle generieren, wie Bildbearbeitung und Bildsynthese.
-
Anwendung in verschiedenen Branchen. Sie können auch genutzt werden, um Bilder für verschiedene Branchen zu erzeugen, wie MedTech, Tourismus, Spieleentwicklung und mehr.
Im Rahmen dieser Lektion arbeiten wir weiterhin mit unserem Startup Edu4All. Die Schüler erstellen Bilder für ihre Aufgaben. Welche Bilder genau, entscheiden die Schüler selbst – es könnten Illustrationen für ihr eigenes Märchen sein, ein neuer Charakter für ihre Geschichte oder eine Visualisierung ihrer Ideen und Konzepte.
So könnten die Schüler von Edu4All zum Beispiel Bilder generieren, wenn sie im Unterricht an Denkmälern arbeiten:
mit einem Prompt wie
"Hund neben dem Eiffelturm im frühen Morgenlicht"
DALL-E und Midjourney sind zwei der beliebtesten Bildgenerierungsmodelle, mit denen du Bilder anhand von Prompts erzeugen kannst.
Beginnen wir mit DALL-E, einem Generativen KI-Modell, das Bilder aus Textbeschreibungen erzeugt.
DALL-E ist eine Kombination aus zwei Modellen, CLIP und diffused attention.
-
CLIP ist ein Modell, das Embeddings erzeugt, also numerische Darstellungen von Daten, aus Bildern und Text.
-
Diffused attention ist ein Modell, das Bilder aus Embeddings generiert. DALL-E wurde mit einem Datensatz aus Bildern und Text trainiert und kann Bilder aus Textbeschreibungen erzeugen. Zum Beispiel kann DALL-E Bilder von einer Katze mit Hut oder einem Hund mit Irokesenschnitt generieren.
Midjourney funktioniert ähnlich wie DALL-E und erzeugt Bilder aus Textprompts. Midjourney kann ebenfalls Bilder generieren, z. B. „eine Katze mit Hut“ oder „ein Hund mit Irokesenschnitt“.
Bildquelle Wikipedia, Bild generiert von Midjourney
Zuerst DALL-E. DALL-E ist ein Generatives KI-Modell, das auf der Transformer-Architektur basiert und einen autoregressiven Transformer verwendet.
Ein autoregressiver Transformer definiert, wie ein Modell Bilder aus Textbeschreibungen generiert: Es erzeugt Pixel für Pixel, wobei jeder neue Pixel auf den bereits generierten Pixeln basiert. Dabei durchläuft es mehrere Schichten in einem neuronalen Netzwerk, bis das Bild fertiggestellt ist.
Mit diesem Verfahren steuert DALL-E Attribute, Objekte, Eigenschaften und mehr im generierten Bild. DALL-E 2 und 3 bieten dabei noch mehr Kontrolle über das erzeugte Bild.
Was braucht man, um eine Bildgenerierungsanwendung zu bauen? Du benötigst folgende Bibliotheken:
- python-dotenv: Es wird dringend empfohlen, diese Bibliothek zu verwenden, um deine Geheimnisse in einer .env-Datei vom Code getrennt zu halten.
- openai: Diese Bibliothek nutzt du, um mit der OpenAI API zu interagieren.
- pillow: Zum Arbeiten mit Bildern in Python.
- requests: Um HTTP-Anfragen zu stellen.
-
Erstelle eine Datei .env mit folgendem Inhalt:
AZURE_OPENAI_ENDPOINT=<your endpoint> AZURE_OPENAI_API_KEY=<your key>Diese Informationen findest du im Azure-Portal für deine Ressource im Bereich „Keys and Endpoint“.
-
Sammle die oben genannten Bibliotheken in einer Datei namens requirements.txt wie folgt:
python-dotenv openai pillow requests -
Erstelle anschließend eine virtuelle Umgebung und installiere die Bibliotheken:
python3 -m venv venv source venv/bin/activate pip install -r requirements.txtFür Windows verwende folgende Befehle, um die virtuelle Umgebung zu erstellen und zu aktivieren:
python3 -m venv venv venv\Scripts\activate.bat
-
Füge folgenden Code in eine Datei namens app.py ein:
import openai import os import requests from PIL import Image import dotenv # import dotenv dotenv.load_dotenv() # Get endpoint and key from environment variables openai.api_base = os.environ['AZURE_OPENAI_ENDPOINT'] openai.api_key = os.environ['AZURE_OPENAI_API_KEY'] # Assign the API version (DALL-E is currently supported for the 2023-06-01-preview API version only) openai.api_version = '2023-06-01-preview' openai.api_type = 'azure' try: # Create an image by using the image generation API generation_response = openai.Image.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, ) # 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)
Erklärung des Codes:
-
Zuerst importieren wir die benötigten Bibliotheken, darunter die OpenAI-Bibliothek, dotenv, requests und Pillow.
import openai import os import requests from PIL import Image import dotenv
-
Danach laden wir die Umgebungsvariablen aus der .env-Datei.
# import dotenv dotenv.load_dotenv()
-
Anschließend setzen wir den Endpunkt, den Schlüssel für die OpenAI API, Version und Typ.
# Get endpoint and key from environment variables openai.api_base = os.environ['AZURE_OPENAI_ENDPOINT'] openai.api_key = os.environ['AZURE_OPENAI_API_KEY'] # add version and type, Azure specific openai.api_version = '2023-06-01-preview' openai.api_type = 'azure'
-
Danach generieren wir das Bild:
# Create an image by using the image generation API generation_response = openai.Image.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, )
Der obige Code liefert ein JSON-Objekt mit der URL des generierten Bildes. Diese URL können wir nutzen, um das Bild herunterzuladen und zu speichern.
-
Zum Schluss öffnen wir das Bild und zeigen es mit dem Standardbildbetrachter an:
image = Image.open(image_path) image.show()
Schauen wir uns den Code zur Bildgenerierung genauer an:
generation_response = openai.Image.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,
)- prompt ist der Textprompt, der zur Bildgenerierung verwendet wird. In diesem Fall: „Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils“.
- size ist die Größe des generierten Bildes. Hier erzeugen wir ein Bild mit 1024x1024 Pixeln.
- n ist die Anzahl der generierten Bilder. Hier erzeugen wir zwei Bilder.
- temperature ist ein Parameter, der die Zufälligkeit der Ausgabe eines Generativen KI-Modells steuert. Der Wert liegt zwischen 0 und 1, wobei 0 eine deterministische Ausgabe bedeutet und 1 eine zufällige. Der Standardwert ist 0,7.
Es gibt noch weitere Möglichkeiten mit Bildern, die wir im nächsten Abschnitt behandeln.
Du hast bisher gesehen, wie wir mit wenigen Zeilen Python-Code ein Bild generieren konnten. Es gibt jedoch noch mehr, was du mit Bildern machen kannst.
Du kannst außerdem:
-
Bearbeitungen durchführen. Indem du ein bestehendes Bild, eine Maske und einen Prompt angibst, kannst du ein Bild verändern. Zum Beispiel kannst du einem Teil eines Bildes etwas hinzufügen. Stell dir unser Kaninchenbild vor: Du könntest dem Kaninchen einen Hut aufsetzen. Dazu gibst du das Bild, eine Maske (die den Bereich für die Änderung markiert) und einen Textprompt an, der beschreibt, was gemacht werden soll.
response = openai.Image.create_edit( image=open("base_image.png", "rb"), mask=open("mask.png", "rb"), prompt="An image of a rabbit with a hat on its head.", n=1, size="1024x1024" ) image_url = response['data'][0]['url']
Das Ausgangsbild enthält nur das Kaninchen, das Endbild zeigt das Kaninchen mit Hut.
-
Variationen erstellen. Die Idee ist, ein bestehendes Bild zu nehmen und Variationen davon zu erzeugen. Um eine Variation zu erstellen, gibst du ein Bild und einen Textprompt an und nutzt Code wie diesen:
response = openai.Image.create_variation( image=open("bunny-lollipop.png", "rb"), n=1, size="1024x1024" ) image_url = response['data'][0]['url']
Hinweis: Dies wird nur von OpenAI unterstützt.
Temperature ist ein Parameter, der die Zufälligkeit der Ausgabe eines Generativen KI-Modells steuert. Der Wert liegt zwischen 0 und 1, wobei 0 eine deterministische Ausgabe bedeutet und 1 eine zufällige. Der Standardwert ist 0,7.
Schauen wir uns ein Beispiel an, wie Temperature wirkt, indem wir diesen Prompt zweimal ausführen:
Prompt: "Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils"
Nun führen wir denselben Prompt noch einmal aus, um zu sehen, dass wir nicht zweimal dasselbe Bild erhalten:
Wie du siehst, sind die Bilder ähnlich, aber nicht identisch. Versuchen wir, den Temperature-Wert auf 0,1 zu setzen und schauen, was passiert:
generation_response = openai.Image.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
)Versuchen wir also, die Ausgabe deterministischer zu machen. Bei den zwei generierten Bildern sieht man, dass im ersten Bild ein Kaninchen zu sehen ist, im zweiten ein Pferd – die Bilder unterscheiden sich stark.
Ändern wir daher unseren Code und setzen die Temperature auf 0, so:
generation_response = openai.Image.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
)Wenn du diesen Code ausführst, erhältst du diese zwei Bilder:
Hier sieht man deutlich, wie sich die Bilder stärker ähneln.
Mit unserer Demo können wir bereits Bilder für unsere Kunden generieren. Allerdings müssen wir Grenzen für unsere Anwendung setzen.
Zum Beispiel wollen wir keine Bilder erzeugen, die nicht jugendfrei sind oder für Kinder ungeeignet.
Das erreichen wir mit Metaprompts. Metaprompts sind Textprompts, die verwendet werden, um die Ausgabe eines Generativen KI-Modells zu steuern. So können wir sicherstellen, dass die generierten Bilder jugendfrei oder kindgerecht sind.
Wie funktionieren Metaprompts?
Metaprompts sind Textprompts, die vor dem eigentlichen Textprompt stehen und die Ausgabe des Modells steuern. Sie werden in Anwendungen eingebettet, um die Ausgabe zu kontrollieren, indem sie den eigentlichen Prompt und den Metaprompt in einem einzigen Textprompt zusammenfassen.
Ein Beispiel für einen Metaprompt wäre:
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)
Schauen wir uns nun an, wie wir Metaprompts in unserer Demo verwenden können.
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 imageAus dem obigen Prompt siehst du, wie alle generierten Bilder den Metaprompt berücksichtigen.
Wir haben Edu4All zu Beginn dieser Lektion vorgestellt. Jetzt ist es an der Zeit, die Schüler zu befähigen, Bilder für ihre Aufgaben zu generieren.
Die Schüler sollen Bilder mit Denkmälern für ihre Aufgaben erstellen. Welche Denkmäler genau, entscheiden die Schüler selbst. Sie werden aufgefordert, ihre Kreativität einzusetzen und die Denkmäler in verschiedenen Kontexten darzustellen.
Hier ist eine mögliche Lösung:
import openai
import os
import requests
from PIL import Image
import dotenv
# import dotenv
dotenv.load_dotenv()
# Get endpoint and key from environment variables
openai.api_base = "<replace with endpoint>"
openai.api_key = "<replace with api key>"
# Assign the API version (DALL-E is currently supported for the 2023-06-01-preview API version only)
openai.api_version = '2023-06-01-preview'
openai.api_type = 'azure'
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 = openai.Image.create(
prompt=prompt, # Enter your prompt text here
size='1024x1024',
n=2,
temperature=0,
)
# 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)Nach Abschluss dieser Lektion schau dir unsere Generative AI Learning collection an, um dein Wissen über Generative KI weiter auszubauen!
Gehe weiter zu Lektion 10, in der wir uns anschauen, wie man KI-Anwendungen mit Low-Code entwickelt.
Haftungsausschluss:
Dieses Dokument wurde mit dem KI-Übersetzungsdienst Co-op Translator übersetzt. Obwohl wir uns um Genauigkeit bemühen, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner Ursprungssprache gilt als maßgebliche Quelle. Für wichtige Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die aus der Nutzung dieser Übersetzung entstehen.





