LLMs können mehr als nur Texte generieren. Es ist auch möglich, Bilder aus Textbeschreibungen zu erstellen. Bilder als Modalität können in vielen Bereichen äußerst nützlich sein, von MedTech über Architektur, Tourismus bis hin zur Spieleentwicklung und mehr. In diesem Kapitel werden wir uns die beiden beliebtesten Modelle zur Bildgenerierung, DALL-E und Midjourney, genauer ansehen.
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 Anwendung zur Bildgenerierung erstellt.
Nach Abschluss dieser Lektion wirst du in der Lage sein:
- Eine Anwendung zur Bildgenerierung zu erstellen.
- Grenzen für deine Anwendung mit Metaprompts zu definieren.
- Mit DALL-E und Midjourney zu arbeiten.
Anwendungen zur Bildgenerierung sind eine großartige Möglichkeit, die Fähigkeiten von Generativer KI zu erkunden. Sie können beispielsweise für Folgendes verwendet werden:
-
Bildbearbeitung und Synthese. Du kannst Bilder für verschiedene Anwendungsfälle wie Bildbearbeitung und Bildsynthese erstellen.
-
Anwendbar in verschiedenen Branchen. Sie können auch verwendet werden, um Bilder für verschiedene Branchen wie MedTech, Tourismus, Spieleentwicklung und mehr zu generieren.
Im Rahmen dieser Lektion werden wir weiterhin mit unserem Startup Edu4All arbeiten. Die Schüler werden Bilder für ihre Aufgaben erstellen. Welche Bilder sie erstellen, bleibt ihnen überlassen, aber sie könnten beispielsweise Illustrationen für ihr eigenes Märchen anfertigen, einen neuen Charakter für ihre Geschichte entwerfen oder ihre Ideen und Konzepte visualisieren.
Hier ist ein Beispiel dafür, was die Schüler von Edu4All erstellen könnten, 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 Modelle zur Bildgenerierung. Sie ermöglichen es, mithilfe von Prompts Bilder zu erstellen.
Beginnen wir mit DALL-E, einem Generativen KI-Modell, das Bilder aus Textbeschreibungen generiert.
DALL-E ist eine Kombination aus zwei Modellen, CLIP und diffused attention.
-
CLIP ist ein Modell, das Einbettungen (numerische Darstellungen von Daten) aus Bildern und Text generiert.
-
Diffused attention ist ein Modell, das Bilder aus Einbettungen generiert. DALL-E wird mit einem Datensatz aus Bildern und Text trainiert und kann verwendet werden, um Bilder aus Textbeschreibungen zu erstellen. Zum Beispiel kann DALL-E Bilder von einer Katze mit Hut oder einem Hund mit Irokesen generieren.
Midjourney funktioniert ähnlich wie DALL-E und generiert Bilder aus Text-Prompts. Midjourney kann ebenfalls verwendet werden, um Bilder mit Prompts wie „eine Katze mit Hut“ oder „ein Hund mit Irokesen“ zu erstellen.
Bildquelle Wikipedia, Bild generiert von Midjourney
Zunächst 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 erstellt ein Pixel nach dem anderen und verwendet die generierten Pixel, um das nächste Pixel zu erzeugen. Dabei durchläuft es mehrere Schichten in einem neuronalen Netzwerk, bis das Bild vollständig ist.
Mit diesem Prozess kann DALL-E Attribute, Objekte, Eigenschaften und mehr im generierten Bild steuern. DALL-E 2 und 3 bieten jedoch noch mehr Kontrolle über das generierte Bild.
Was wird benötigt, um eine Anwendung zur Bildgenerierung zu erstellen? Du brauchst die folgenden Bibliotheken:
- python-dotenv, diese Bibliothek wird dringend empfohlen, um deine Geheimnisse in einer .env-Datei vom Code fernzuhalten.
- openai, diese Bibliothek wird verwendet, um mit der OpenAI-API zu interagieren.
- pillow, um mit Bildern in Python zu arbeiten.
- requests, um HTTP-Anfragen zu stellen.
Falls noch nicht geschehen, folge den Anweisungen auf der Microsoft Learn-Seite, um eine Azure OpenAI-Ressource und ein Modell zu erstellen. Wähle DALL-E 3 als Modell aus.
-
Erstelle eine Datei .env mit folgendem Inhalt:
AZURE_OPENAI_ENDPOINT=<your endpoint> AZURE_OPENAI_API_KEY=<your key> AZURE_OPENAI_DEPLOYMENT="dall-e-3"Diese Informationen findest du im Azure OpenAI Foundry Portal für deine Ressource im Abschnitt "Deployments".
-
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 die folgenden Befehle, um deine virtuelle Umgebung zu erstellen und zu aktivieren:
python3 -m venv venv venv\Scripts\activate.bat
-
Füge den folgenden Code in eine Datei namens app.py ein:
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)
Erklärung des Codes:
-
Zuerst importieren wir die benötigten Bibliotheken, einschließlich der OpenAI-Bibliothek, der dotenv-Bibliothek, der requests-Bibliothek und der Pillow-Bibliothek.
import openai import os import requests from PIL import Image import dotenv
-
Als Nächstes laden wir die Umgebungsvariablen aus der .env-Datei.
# import dotenv dotenv.load_dotenv()
-
Danach konfigurieren wir den Azure OpenAI-Service-Client.
# 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" )
-
Anschließend generieren wir das Bild:
# 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'] )
Der obige Code gibt ein JSON-Objekt zurück, das die URL des generierten Bildes enthält. Wir können die URL verwenden, um das Bild herunterzuladen und in einer Datei zu speichern.
-
Schließlich öffnen wir das Bild und verwenden den Standard-Bildbetrachter, um es anzuzeigen:
image = Image.open(image_path) image.show()
Schauen wir uns den Code zur Bildgenerierung genauer an:
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 ist der Text-Prompt, der zur Generierung des Bildes verwendet wird. In diesem Fall verwenden wir den Prompt "Hase auf Pferd, hält einen Lutscher, auf einer nebligen Wiese, auf der Narzissen wachsen".
- size ist die Größe des generierten Bildes. In diesem Fall generieren wir ein Bild mit 1024x1024 Pixeln.
- n ist die Anzahl der generierten Bilder. In diesem Fall generieren wir zwei Bilder.
- temperature ist ein Parameter, der die Zufälligkeit der Ausgabe eines Generativen KI-Modells steuert. Die Temperatur ist ein Wert zwischen 0 und 1, wobei 0 bedeutet, dass die Ausgabe deterministisch ist, und 1 bedeutet, dass die Ausgabe zufällig ist. Der Standardwert ist 0,7.
Es gibt noch mehr, was du mit Bildern machen kannst, und das werden wir im nächsten Abschnitt behandeln.
Du hast bisher gesehen, wie wir mit wenigen Zeilen in Python ein Bild generieren konnten. Es gibt jedoch noch weitere Dinge, die du mit Bildern machen kannst.
Du kannst auch Folgendes tun:
- Bearbeitungen durchführen. Indem du ein bestehendes Bild, eine Maske und einen Prompt bereitstellst, kannst du ein Bild ändern. Zum Beispiel kannst du etwas zu einem Teil eines Bildes hinzufügen. Stell dir unser Hasenbild vor: Du könntest dem Hasen einen Hut hinzufügen. Dazu würdest du das Bild, eine Maske (die den Bereich für die Änderung identifiziert) und einen Text-Prompt bereitstellen, der angibt, was geändert werden soll.
Hinweis: Dies wird in DALL-E 3 nicht unterstützt.
Hier ist ein Beispiel mit 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].urlDas Basisbild würde nur die Lounge mit Pool enthalten, aber das endgültige Bild hätte einen Flamingo:
-
Variationen erstellen. Die Idee ist, dass du ein bestehendes Bild nimmst und Variationen davon erstellen lässt. Um eine Variation zu erstellen, gibst du ein Bild und einen Text-Prompt an und verwendest Code wie folgt:
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.
Die Temperatur ist ein Parameter, der die Zufälligkeit der Ausgabe eines Generativen KI-Modells steuert. Die Temperatur ist ein Wert zwischen 0 und 1, wobei 0 bedeutet, dass die Ausgabe deterministisch ist, und 1 bedeutet, dass die Ausgabe zufällig ist. Der Standardwert ist 0,7.
Schauen wir uns ein Beispiel an, wie die Temperatur funktioniert, indem wir diesen Prompt zweimal ausführen:
Prompt: "Hase auf Pferd, hält einen Lutscher, auf einer nebligen Wiese, auf der Narzissen wachsen"
Nun führen wir denselben Prompt erneut aus, um zu sehen, dass wir nicht zweimal dasselbe Bild erhalten:
Wie du sehen kannst, sind die Bilder ähnlich, aber nicht identisch. Lass uns versuchen, den Temperaturwert auf 0,1 zu ändern und sehen, was passiert:
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
)Lass uns versuchen, die Antwort deterministischer zu machen. Wir konnten aus den beiden generierten Bildern beobachten, dass im ersten Bild ein Hase und im zweiten Bild ein Pferd vorhanden ist, sodass die Bilder stark variieren.
Ändern wir daher unseren Code und setzen die Temperatur auf 0, wie folgt:
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
)Wenn du diesen Code jetzt ausführst, erhältst du diese beiden Bilder:
Hier kannst du deutlich sehen, wie die Bilder sich stärker ähneln.
Mit unserer Demo können wir bereits Bilder für unsere Kunden generieren. Allerdings müssen wir einige Grenzen für unsere Anwendung schaffen.
Zum Beispiel möchten wir keine Bilder generieren, die nicht jugendfrei sind oder für Kinder ungeeignet sind.
Das können wir mit Metaprompts tun. Metaprompts sind Text-Prompts, die verwendet werden, um die Ausgabe eines Generativen KI-Modells zu steuern. Zum Beispiel können wir Metaprompts verwenden, um die Ausgabe zu kontrollieren und sicherzustellen, dass die generierten Bilder jugendfrei oder für Kinder geeignet sind.
Wie funktionieren Metaprompts?
Metaprompts sind Text-Prompts, die verwendet werden, um die Ausgabe eines Generativen KI-Modells zu steuern. Sie werden vor dem Text-Prompt positioniert und dienen dazu, die Ausgabe des Modells zu kontrollieren. Sie werden in Anwendungen eingebettet, um die Ausgabe des Modells zu steuern, indem der Eingabe-Prompt und der Metaprompt in einem einzigen Text-Prompt zusammengefasst werden.
Ein Beispiel für einen Metaprompt wäre das Folgende:
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)
Nun sehen wir uns 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 kannst du sehen, wie alle erstellten 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 werden Bilder für ihre Aufgaben erstellen, die Denkmäler enthalten. Welche Denkmäler sie wählen, bleibt ihnen überlassen. Die Schüler werden aufgefordert, ihre Kreativität bei dieser Aufgabe einzusetzen, um diese Denkmäler in verschiedenen Kontexten zu platzieren.
Hier ist eine mögliche Lösung:
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)Nachdem Sie diese Lektion abgeschlossen haben, schauen Sie sich unsere Generative AI Learning Collection an, um Ihr Wissen über Generative KI weiter auszubauen!
Gehen Sie zu Lektion 10, wo wir uns ansehen, wie man KI-Anwendungen mit Low-Code erstellt.
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 ursprünglichen Sprache sollte als maßgebliche Quelle betrachtet werden. Für kritische Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die sich aus der Nutzung dieser Übersetzung ergeben.








