Lernpfad
Vor ein paar Wochen ging ChatGPT mit seinem neuen Modell zur Bilderzeugung viral. Dieses Modell ist mit Abstand das beste, das ich gesehen habe. Seine Fähigkeit, Bilder zu bearbeiten, ist das, was es auszeichnet. Es ist unglaublich genau und macht es extrem einfach, die Fantasie zum Leben zu erwecken. Andere Modelle können das auch, aber nicht mit demselben Grad an Genauigkeit.
Das Erzeugen von Bildern in ihrer Schnittstelle ist einfach, da wir nur eine Textaufforderung angeben müssen. Aber als Programmierer wollte ich unbedingt, dass es eine API gibt, mit der ich programmatisch arbeiten kann. Dieser Tag ist nun endlich gekommen, und ich schreibe diesen Blog, um dir zu zeigen, wie du ihn mit Python nutzen kannst.
Wenn du nur daran interessiert bist, zu lernen, wie man es im Chat-Interface benutzt, habe ich schon einmal diese GPT-4o Anleitung zur Bilderzeugung mit acht praktischen Beispielen.
KI-Anwendungen entwickeln
GPT-Image-1 API Einrichtung
Das neue GPT-Abbildmodell ist geschützt, d.h. es sind zusätzliche Überprüfungen erforderlich, um es verwenden zu können. In diesem Abschnitt beschreiben wir, wie du die API einrichtest. Wenn du bereits einen API-Schlüssel hast, kannst du den ersten Schritt überspringen.
Schritt 1: Generiere einen API-Schlüssel
Der erste Schritt besteht darin, einen API-Schlüssel zu erstellen. Wir können einen erstellen, indem wir uns auf der Plattform anmelden und zur Seite API-Schlüssel-Seite. Dann klicken wir auf die Schaltfläche "Neuen geheimen Schlüssel erstellen".
Sobald der Schlüssel generiert ist, erstellst du eine Datei namens .env
und kopierst sie im folgenden Format:
OPENAI_API_KEY=<paste_your_api_key_here>
Schritt 2: Überprüfen unserer Organisation
Ein großer Unterschied zu den anderen OpenAI-Modellen ist, dass wir bei der Verwendung der GPT-Image-API unsere Organisation verifizieren müssen. Der Grund dafür ist, dass GPT-Image-1 realistische und detaillierte Bilder erzeugen kann, was Bedenken hinsichtlich eines möglichen Missbrauchs, z. B. zur Erstellung von Deepfakes oder unangemessenen Inhalten, aufkommen lässt. Durch die Verifizierung von Organisationen kann OpenAI die Nutzung besser überwachen und seine Sicherheitsrichtlinien durchsetzen.
Du kannst deine Organisation verifizieren, auch wenn du kein Unternehmen hast. Beachte jedoch, dass du dafür deinen Personalausweis vorlegen und eine Gesichtsverifizierung durchführen musst.
Um die Überprüfung durchzuführen, navigieren Sie zum allgemeinen Registerkarte der OpenAI API-Plattform und klicke auf die Schaltfläche unter dem Abschnitt "Überprüfungen".
Der Prozess wird von einer dritten Partei durchgeführt und besteht aus:
- Hochladen eines Bildes von einem Ausweisdokument.
- Verwende die Kamera deines Mobilgeräts, um zu überprüfen, ob deine Identität mit dem vorgelegten Dokument übereinstimmt.
Es dauert nur ein paar Minuten, bis der Vorgang abgeschlossen ist, und dann etwa 15 Minuten, bis er bearbeitet wird.
Python einrichten
Für diesen Lehrgang werden wir die folgenden Python-Pakete installieren:
openai
: Das offizielle OpenAI-Paket, das es uns ermöglicht, mit ihrer API zu interagieren.dotenv
: Ein Python-Paket, mit dem du den API-Schlüssel sicher aus der oben erstellten Datei.env
laden kannst.
Wir können diese mit dem Befehl installieren:
pip install openai dotenv
Erzeugen unseres ersten Bildes mit GPT-Image-1
Schauen wir uns an, wie wir mit gpt-image-1
ein Bild erzeugen können. Beginne damit, eine neue Python-Datei zu erstellen, z.B. generate_image.py
, im selben Ordner wie die .env-Datei.
Importiere dann die benötigten Pakete:
# Import the packages
from openai import OpenAI
from dotenv import load_dotenv
import os
import base64
import time
Beachte, dass os
und base64
integrierte Python-Pakete sind und nicht installiert werden müssen.
Als nächstes laden wir den API-Schlüssel und initialisieren den OpenAI-Client:
# Load the API key
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")
# Initialize the OpenAI client
client = OpenAI(api_key=api_key)
Dann bitten wir den Benutzer, eine Texteingabe mit der eingebauten Funktion input()
einzugeben und eine Anfrage zur Bilderzeugung an die API zu senden:
# Ask the user to input a prompt in the terminal
print("What do you want to generate?")
prompt = input("> ")
print("Generating image...")
# Send the prompt to the API
img = client.images.generate(
model="gpt-image-1",
prompt=prompt,
background="auto",
n=1,
quality="high",
size="1024x1024",
output_format="png",
moderation="auto",
)
Zum Schluss speichern wir das erzeugte Bild in einer Datei:
# Save the image into a file
image_bytes = base64.b64decode(img.data[0].b64_json)
with open(f"output_{int(time.time())}.png", "wb") as f:
f.write(image_bytes)
Das vollständige Skript findest du hier. Um dieses Skript auszuführen, verwende den Befehl:
python generate_image.py
Hier ist ein Beispiel mit der Ausgabe:
GPT-Image 1-Parameter
In diesem Abschnitt beschreiben wir die wichtigsten Parameter des gpt-image-1
Modells:
prompt
: Die textliche Anweisung, die beschreibt, welches Bild das Modell erzeugen soll.background
: Die Art des Hintergrunds für das Bild. Er muss einer der folgenden sein:"transparent"
,"opaque"
oder"auto"
. Der Standardwert ist"auto"
, bei dem das Modell auf der Grundlage des Inhalts entscheidet, was der beste Hintergrundtyp ist. Beachte, dass JPEG-Bilder keine transparenten Hintergründe unterstützen.n
: Die Anzahl der zu erzeugenden Bilder. Muss eine Zahl von 1 bis 10 sein.quality
: Die Qualität des erzeugten Bildes. Er muss einer der Werte"high"
,"medium"
oder"low"
sein, wobei der Standardwert"high"
ist.size
: Die Größe des Bildes in Pixeln. Er muss einer der folgenden sein:"1024x1024"
(quadratisch),"1536x1024"
(Querformat),"1024x1536"
(Hochformat).output_format
: Das Bildformat. Er muss einer der folgenden sein:"png"
,"jpeg"
oder"webp"
. Die Standardeinstellung ist"png"
.moderation
: Das Niveau der Inhaltsmoderation. Muss entweder"low"
für einen weniger restriktiven Filter oder"auto"
sein, was die Standardeinstellung ist.
Wir haben uns mit den wichtigsten Parametern beschäftigt, die für das Modell gpt-image-1
verfügbar sind. Weitere Details und eine vollständige Liste der Parameter findest du in der offiziellen API-Dokumentation.
Auswirkungen des Qualitätsparameters
Hier siehst du einen Vergleich von Bildern, die mit demselben Prompt und in unterschiedlicher Qualität erstellt wurden:
Wir sehen, dass die erste Katze (mit der niedrigsten Qualität) einige Artefakte um die Augen herum hat und dass das Bild mit steigender Qualität deutlich realistischer wird.
Hier ist ein weiteres Beispiel mit einer Ausgabe im Cartoon-Stil:
Auch in diesem Fall gilt: Je höher die Qualität, desto besser ist das Bild. Meiner Meinung nach ist dies jedoch weniger relevant für Inhalte, die nicht realistisch sein sollen.
Denke daran, dass je höher die Qualität, desto höher die Kosten und die Berechnungszeit sind. Ich empfehle, die Parameter von niedrig bis hoch auszuprobieren, um den Mindestwert zu finden, der für jeden Anwendungsfall akzeptable Ergebnisse liefert.
Hintergrundparameter
In meinen Experimenten habe ich festgestellt, dass das Modell diesen Parameter meist ignoriert. Hier sind einige Beispiele, bei denen ich die background
Parameter und die Transparenzanweisungen in der Eingabeaufforderung variiert habe:
Im ersten Beispiel wurde der Transparenzparameter ignoriert. In der zweiten habe ich die Transparenzanweisungen in die Eingabeaufforderung eingefügt, und es hat etwas besser funktioniert. Im letzten Fall habe ich um einen undurchsichtigen Hintergrund gebeten, aber in der Eingabeaufforderung angegeben, dass ich einen Aufkleber haben möchte, und einen transparenten Hintergrund erhalten.
Ich empfehle immer noch, den Parameter so zu verwenden, dass er dem entspricht, was du willst, aber achte darauf, dass du das gewünschte Ergebnis auch in der Eingabeaufforderung angibst, um es zu verstärken.
Bearbeiten von Bildern mit GPT-Image-1
Wie ich bereits in der Einleitung erwähnt habe, ist das Spannendste an GPT-Image-1 die Möglichkeit, Bilder zu bearbeiten. Beginnen wir damit, zu lernen, wie du ein Bild bearbeiten kannst, und erkunden dann einige Anwendungsfälle.
Um Bilder zu bearbeiten, kann der Großteil des Codes wiederverwendet werden. Der einzige Teil, der sich ändert, ist, dass wir statt der Funktion client.images.generate()
die Funktion client.images.edit()
verwenden.
Hier ist ein Beispiel:
img = client.images.edit(
model="gpt-image-1",
image=[
open("my-image.jpg", "rb"),
],
prompt=prompt,
n=1,
quality="high",
size="1024x1536",
)
Der neue Parameter ist image
. Dies ist eine Liste von Eingabebildern, die bei der Bearbeitung verwendet werden sollen. In diesem Fall stellen wir nur ein Bild mit dem Namen my-image.jpg
bereit, das sich im selben Ordner wie das Skript befindet.
Hier ist ein Beispiel für die Bearbeitung eines meiner Fotos mit GPT Image 1:
Da das Originalbild ein Hochformat hat, habe ich die Hochformatgröße 1024x1536
verwendet. Das ist jedoch nicht dasselbe Verhältnis wie beim Originalbild. Auch im Bearbeitungsmodus kann das Modell nur Bilder in den drei oben angegebenen Größen ausgeben.
Das vollständige Bearbeitungsskript findest du hier.
Masken verwenden
Der Bearbeitungsmodus bietet einen mask
Parameter, mit dem wir die Bereiche festlegen können, in denen das Bild bearbeitet werden soll. Die Maske muss ein PNG-Bild von höchstens 4 MB sein und die gleiche Größe wie das Bild haben. Bereiche mit 100% Transparenz entsprechen den Bereichen, die GPT Image 1 bearbeiten darf.
Wir stellen die Maske auf die gleiche Weise wie das Bild zur Verfügung, nur dass es sich in diesem Fall nicht um eine Liste handelt:
img = client.images.edit(
model="gpt-image-1",
image=[
open(sys.argv[1], "rb"),
],
# We provide the mask like this
mask=open("mask.png", "rb"),
prompt=prompt,
n=1,
quality="high",
size="1536x1024",
)
Als ich damit experimentierte, funktionierte es jedoch nicht sehr gut, und ich habe im Internet Berichte von Leuten gesehen, die ähnliche Probleme hatten.
Hier ist ein Beispiel:
Ich habe auch versucht, damit Elemente an bestimmten Stellen hinzuzufügen, aber das hat nicht immer funktioniert. Genau wie bei der Verwendung des Parameters background
für die Bilderzeugung habe ich festgestellt, dass es am besten funktioniert, wenn ich in der Eingabeaufforderung beschreibe, was ich will.
Mehrere Bilder verwenden
Das Modell kann mehrere Bilder auf einmal verarbeiten und kombinieren. Im folgenden Beispiel verwenden wir es, um ein Marketingposter zu erstellen, das die Bilder dieser drei einzelnen Getränke kombiniert:
Wir geben die drei Bilder als Liste im Parameter image
an, wie folgt:
prompt = """
Create a vibrant and eye-catching marketing poster to
promote the cold drinks offerings at our coffee shop.
"""
img = client.images.edit(
model="gpt-image-1",
# We can provide multiple images at once
image=[
open("latte.png", "rb"),
open("americano.png", "rb"),
open("icetea.png", "rb"),
],
prompt=prompt,
size="1536x1024",
)
Hier ist das Ergebnis:
GPT-Image-1 Preisgestaltung
Das Erzeugen von Bildern wird auf der Grundlage von:
- Die Anzahl der Token in der Textaufforderung.
- Die Anzahl der Token in den Eingabebildern.
- Die Anzahl der Token im Ausgabebild.
Manchmal ist es schwierig, eine Vorstellung davon zu bekommen, wie hoch diese Kosten sind, weil wir nicht wissen, aus wie vielen Token ein Bild besteht.
Da die Abmessungen der Ausgabebilder bekannt sind, wissen wir, wie viele Token für jedes einzelne benötigt werden, sodass wir genaue Werte für den Preis der Ausgabebild-Token angeben können (was der teuerste Teil ist):
Der Preis hängt von der Qualität des Bildes und der Größe ab. Weitere Details findest du auf der GPT Image 1 Preisseite.
Wenn wir ein Bild erzeugen, gibt die API die Anzahl der verwendeten Token zurück, sodass wir sie mit den oben genannten Informationen kombinieren können, um genau zu wissen, wie viel es kostet.
Wir können die Anzahl der verwendeten Token anzeigen, indem wir das Feld usage
des Ergebnisses ausdrucken:
img = client.images.generate(
model="gpt-image-1",
prompt=prompt,
background="transparent",
n=1,
quality="medium",
size="1024x1024",
moderation="auto",
output_format="png",
)
# Add this to see the usage
print("Prompt tokens:", img.usage.input_tokens_details.text_tokens)
print("Input images tokens:", img.usage.input_tokens_details.image_tokens)
print("Output image tokens:", img.usage.output_tokens)
Ausgabe:
Prompt tokens: 8
Input images tokens: 0
Output image tokens: 272
Fazit
Trotz einiger Unzulänglichkeiten der API, wie z. B. dass Maskierung und Transparenz nicht zuverlässig genug sind, kann das Modell die Anweisungen in der Eingabeaufforderung mit hoher Präzision ausführen.
Ich denke, dieses Modell eröffnet viele Möglichkeiten, um darauf aufzubauen. In diesem Tutorium haben wir die Grundlagen gelernt, wie man es benutzt. Hier sind ein paar Ideen, mit denen du auf dem hier Gelernten aufbauen kannst:
- Rationalisierung der Umwandlung von Handy-Fotos in schöne Food-Fotos, die von Restaurants für ihre Speisekarten verwendet werden können.
- Erstelle auf der Grundlage eines Fotos eines Freundes oder eines Selfies ein Stickerpaket, das verschiedene Emotionen ausdrückt und in Chat-Apps verwendet werden kann.
- Erstelle ein Tool, das aus den Beschreibungen einzelner Szenen einen Comic-Strip erstellt.