Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Amazon Titan Image Generator G1
Das Titan Image Generator G1 Amazon-Modell unterstützt die folgenden Inferenzparameter und Modellantworten bei der Durchführung von Modellinferenzen.
Anforderungs- und Antwortformate
Wenn Sie über Amazon einen InvokeModelAnruf tätigenTitan Image Generator G1, ersetzen Sie das body
Feld der Anfrage durch das Format, das Ihrem Anwendungsfall entspricht. Alle Aufgaben haben ein gemeinsames imageGenerationConfig
-Objekt, aber jede Aufgabe hat ein für diese Aufgabe spezifisches Parameterobjekt. Die folgenden Anwendungsfälle werden unterstützt.
taskType |
Feld „Aufgabenparameter“ |
Aufgabentyp |
Definition |
TEXT_IMAGE |
textToImageParams |
Generation |
Generieren Sie ein Bild mithilfe einer Textaufforderung.
|
INPAINTING |
inPaintingParams |
Bearbeitung |
Bearbeiten Sie ein Bild, indem Sie das Innere einer Maske an den umgebenden Hintergrund anpassen.
|
OUTPAINTING |
outPaintingParams |
Bearbeitung |
Bearbeiten Sie ein Bild, indem Sie den durch die Maske definierten Bereich nahtlos erweitern. |
IMAGE_VARIATION |
imageVariationParams |
Bearbeitung |
Bearbeiten Sie ein Bild, indem Sie Variationen des Originalbilds erzeugen. |
Bearbeitungsaufgaben erfordern ein image
-Feld in der Eingabe. Dieses Feld besteht aus einer Zeichenfolge, die die Pixel im Bild definiert. Jedes Pixel wird durch 3 RGB-Kanäle definiert, von denen jeder im Bereich von 0 bis 255 liegt (z. B. würde (255 255 0) für die Farbe Gelb stehen). Diese Kanäle sind in Base64 kodiert.
Die Bilder müssen im JPEG- oder PNG-Format vorliegen.
Wenn Sie Inpainting oder Outpainting durchführen, definieren Sie auch eine Maske, einen oder mehrere Regionen, die Teile des zu bearbeitenden Bildes definieren. Sie können eine Maske auf zwei Arten definieren:
-
maskPrompt
: Schreiben Sie eine Eingabeaufforderung, um den zu maskierenden Teil des Bildes zu beschreiben.
-
maskImage
: Geben Sie eine base64-kodierte Zeichenfolge ein, die die maskierten Bereiche definiert, indem jedes Pixel im Eingabebild als (0 0 0) oder (255 255 255) markiert wird.
Sie können ein Bildbearbeitungswerkzeug verwenden, um Masken zu zeichnen. Anschließend können Sie das JPEG- oder PNG-Ausgabebild in die base64-Kodierung konvertieren, um es in dieses Feld einzugeben. Verwenden Sie andernfalls stattdessen das maskPrompt
-Feld, damit das Modell auf die Maske schließen kann.
Wählen Sie eine Registerkarte aus, um die Hauptteile der API-Anforderungen für verschiedene Anwendungsfälle zur Bildgenerierung und Erläuterungen der Felder anzuzeigen.
- Text-to-image generation (Request)
-
Eine Textaufforderung zum Generieren des Bildes muss <= 512 Zeichen lang sein. Auflösungen <= 1.408 auf der längeren Seite. I NegativeText (optional) — Eine Textaufforderung, um zu definieren, was nicht in das Bild aufgenommen werden soll -- <= 512 Zeichen. In der folgenden Tabelle finden Sie eine vollständige Liste der Auflösungen.
{
"taskType": "TEXT_IMAGE",
"textToImageParams": {
"text": "string",
"negativeText": "string"
},
"imageGenerationConfig": {
"numberOfImages": int,
"height": int,
"width": int,
"cfgScale": float,
"seed": int
}
}
Die textToImageParams
-Felder werden im Folgenden beschrieben.
-
text (erforderlich): Eine Textaufforderung zum Generieren des Bildes.
-
negativeText (optional): Eine Textaufforderung, um festzulegen, was nicht in das Bild aufgenommen werden soll.
Verwenden Sie in der negativeText
-Eingabeaufforderung keine negativen Wörter. Wenn Sie beispielsweise keine Spiegel in ein Bild aufnehmen möchten, geben Sie in der negativeText
Eingabeaufforderung mirrors
ein. Geben Sie nicht no mirrors
ein.
- Inpainting (Request)
-
text (optional): Eine Textaufforderung, um festzulegen, was innerhalb der Maske geändert werden soll. Wenn Sie dieses Feld nicht angeben, versucht das Modell, den gesamten Maskenbereich durch den Hintergrund zu ersetzen. Muss <= 512 Zeichen lang sein. negativeText (optional) — Eine Textaufforderung, um zu definieren, was nicht in das Bild aufgenommen werden soll. Muss <= 512 Zeichen lang sein. Die Größenbeschränkungen für das Eingabebild und die Eingabemaske liegen auf der längeren Seite des Bildes bei <= 1.408. Die Ausgabegröße entspricht der Eingabegröße.
{
"taskType": "INPAINTING",
"inPaintingParams": {
"image": "base64-encoded string",
"text": "string",
"negativeText": "string",
"maskPrompt": "string",
"maskImage": "base64-encoded string",
},
"imageGenerationConfig": {
"numberOfImages": int,
"height": int,
"width": int,
"cfgScale": float
}
}
Die inPaintingParams
-Felder werden im Folgenden beschrieben. Die Maske definiert den Teil des Bildes, den Sie bearbeiten möchten.
-
image (erforderlich): Das zu bearbeitende JPEG- oder PNG-Bild im Format einer Zeichenfolge, in der eine Folge von Pixeln angegeben ist, die jeweils in RGB-Werten definiert und in base64 kodiert sind. Beispiele dafür, wie Sie ein Bild in base64 kodieren und eine base64-kodierte Zeichenfolge dekodieren und in ein Bild umwandeln können, finden Sie in den Codebeispielen.
-
Hierzu müssen Sie eines (nicht beide) der folgenden Felder definieren.
-
text (optional): Eine Textaufforderung, um festzulegen, was innerhalb der Maske geändert werden soll. Wenn Sie dieses Feld nicht angeben, versucht das Modell, den gesamten Maskenbereich durch den Hintergrund zu ersetzen.
-
negativeText (optional): Eine Textaufforderung, um festzulegen, was nicht in das Bild aufgenommen werden soll.
Verwenden Sie in der negativeText
-Eingabeaufforderung keine negativen Wörter. Wenn Sie beispielsweise keine Spiegel in ein Bild aufnehmen möchten, geben Sie in der negativeText
Eingabeaufforderung mirrors
ein. Geben Sie nicht no mirrors
ein.
- Outpainting (Request)
-
text (erforderlich): Eine Textaufforderung, um festzulegen, was innerhalb der Maske geändert werden soll. Muss <= 512 Zeichen lang sein. negativeText (optional) — Eine Textaufforderung, um zu definieren, was nicht in das Bild aufgenommen werden soll. Muss <= 512 Zeichen lang sein. Die Größenbeschränkungen für das Eingabebild und die Eingabemaske liegen auf der längeren Seite des Bildes bei <= 1.408. Die Ausgabegröße entspricht der Eingabegröße.
{
"taskType": "OUTPAINTING",
"outPaintingParams": {
"text": "string",
"negativeText": "string",
"image": "base64-encoded string",
"maskPrompt": "string",
"maskImage": "base64-encoded string",
"outPaintingMode": "DEFAULT | PRECISE"
},
"imageGenerationConfig": {
"numberOfImages": int,
"height": int,
"width": int,
"cfgScale": float
}
}
Die outPaintingParams
-Felder werden im Folgenden definiert. Die Maske definiert den Bereich des Bildes, den Sie nicht bearbeiten möchten. Die Generierung erweitert den von Ihnen definierten Bereich nahtlos.
-
image (erforderlich): Das zu bearbeitende JPEG- oder PNG-Bild im Format einer Zeichenfolge, in der eine Folge von Pixeln angegeben ist, die jeweils in RGB-Werten definiert und in base64 kodiert sind. Beispiele dafür, wie Sie ein Bild in base64 kodieren und eine base64-kodierte Zeichenfolge dekodieren und in ein Bild umwandeln können, finden Sie in den Codebeispielen.
-
Hierzu müssen Sie eines (nicht beide) der folgenden Felder definieren.
-
text (erforderlich): Eine Textaufforderung, um festzulegen, was innerhalb der Maske geändert werden soll.
-
negativeText (optional): Eine Textaufforderung, um festzulegen, was nicht in das Bild aufgenommen werden soll.
Verwenden Sie in der negativeText
-Eingabeaufforderung keine negativen Wörter. Wenn Sie beispielsweise keine Spiegel in ein Bild aufnehmen möchten, geben Sie in der negativeText
Eingabeaufforderung mirrors
ein. Geben Sie nicht no mirrors
ein.
-
out PaintingMode — Gibt an, ob die Änderung der Pixel innerhalb der Maske zulässig ist oder nicht. Die folgenden Werte sind möglich.
-
STANDARD: Verwenden Sie diese Option, um Änderungen am Bild innerhalb der Maske zuzulassen, damit es mit dem wiederhergestellten Hintergrund in Einklang bleibt.
-
PRÄZISE: Verwenden Sie diese Option, um zu verhindern, dass das Bild innerhalb der Maske verändert wird.
- Image variation (Request)
-
Mithilfe von Bildvariationen können Sie Variationen Ihres Originalbilds auf der Grundlage der Parameterwerte erstellen. Die Größenbeschränkung für das Eingabebild liegt auf der längeren Seite des Bildes bei <= 1.408. In der Tabelle unten finden Sie eine vollständige Liste der Auflösungen.
-
text (optional): Eine Textaufforderung, mit der festgelegt werden kann, was im Bild beibehalten und was geändert werden soll. Muss <= 512 Zeichen lang sein.
-
negativeText (optional): Eine Textaufforderung, um festzulegen, was nicht in das Bild aufgenommen werden soll. Muss <= 512 Zeichen lang sein.
-
text (optional): Eine Textaufforderung, mit der festgelegt werden kann, was im Bild beibehalten und was geändert werden soll. Muss <= 512 Zeichen lang sein.
-
similarityStrength (optional) — Gibt an, wie ähnlich das generierte Bild den Eingabebildern sein soll. Verwenden Sie einen niedrigeren Wert, um die Generierung zufälliger zu gestalten. Der zulässige Bereich liegt zwischen 0,2 und 1,0 (beide einschließlich). Wenn dieser Parameter in der Anforderung fehlt, wird der Standardwert 0,7 verwendet.
{
"taskType": "IMAGE_VARIATION",
"imageVariationParams": {
"text": "string",
"negativeText": "string",
"images": ["base64-encoded string"],
"similarityStrength": 0.7, # Range: 0.2 to 1.0
},
"imageGenerationConfig": {
"numberOfImages": int,
"height": int,
"width": int,
"cfgScale": float
}
}
Die imageVariationParams
-Felder werden im Folgenden definiert.
-
images (erforderlich): Eine Liste von Bildern, für die Variationen generiert werden sollen. Sie können 1 bis 5 Bilder hinzufügen. Ein Bild ist als Base64-kodierte Bildzeichenfolge definiert. Beispiele dafür, wie Sie ein Bild in base64 kodieren und eine base64-kodierte Zeichenfolge dekodieren und in ein Bild umwandeln können, finden Sie in den Codebeispielen.
-
text (optional): Eine Textaufforderung, mit der festgelegt werden kann, was im Bild beibehalten und was geändert werden soll.
-
SimilarityStrength (optional) — Gibt an, wie ähnlich das generierte Bild den Eingabebildern sein soll. Der Bereich liegt zwischen 0,2 und 1,0, wobei niedrigere Werte für mehr Zufälligkeit verwendet werden.
-
negativeText (optional): Eine Textaufforderung, um festzulegen, was nicht in das Bild aufgenommen werden soll.
Verwenden Sie in der negativeText
-Eingabeaufforderung keine negativen Wörter. Wenn Sie beispielsweise keine Spiegel in ein Bild aufnehmen möchten, geben Sie in der negativeText
Eingabeaufforderung mirrors
ein. Geben Sie nicht no mirrors
ein.
- Response body
-
{
"images": [
"base64-encoded string",
...
],
"error": "string"
}
Der Antworttext ist ein Streaming-Objekt, das eines der folgenden Felder enthält.
-
images
: Wenn die Anforderung erfolgreich ist, gibt sie dieses Feld zurück, eine Liste von base64-kodierten Zeichenfolgen, die jeweils ein generiertes Bild definieren. Jedes Bild ist als Zeichenfolge formatiert, die eine Folge von Pixeln angibt, die jeweils in RGB-Werten definiert und in base64 kodiert sind. Beispiele dafür, wie Sie ein Bild in base64 kodieren und eine base64-kodierte Zeichenfolge dekodieren und in ein Bild umwandeln können, finden Sie in den Codebeispielen.
-
error
: Wenn die Anfrage in einer der folgenden Situationen gegen die Richtlinien zur Inhaltsmoderation verstößt, wird in diesem Feld eine Meldung zurückgegeben.
-
Wenn der eingegebene Text, das Bild oder das Maskenbild von der Richtlinie zur Inhaltsmoderation gekennzeichnet wird.
-
Wenn mindestens ein Ausgabebild von der Richtlinie zur Inhaltsmoderation gekennzeichnet wird.
Die gemeinsam genutzte und optionale imageGenerationConfig
enthält die folgenden Felder. Wenn Sie dieses Objekt nicht einschließen, werden die Standardkonfigurationen verwendet.
-
Zahl OfImages (optional) — Die Anzahl der zu generierenden Bilder.
Minimum |
Maximum |
Standard |
1 |
5 |
1 |
-
cfgScale (optional): Gibt an, inwiefern das generierte Bild der Eingabeaufforderung entsprechen soll. Verwenden Sie einen niedrigeren Wert, um der Zufälligkeit bei der Generierung einen höheren Stellenwert zu geben.
Minimum |
Maximum |
Standard |
1.1 |
10.0 |
8.0 |
-
Die folgenden Parameter definieren die Größe, die das Ausgabebild haben soll. Weitere Informationen zur Preisgestaltung nach Bildgröße finden Sie unter Amazon Bedrock – Preise.
Die folgenden Größen sind zulässig.
Width |
Höhe |
Seitenverhältnis |
Preis äquivalent mit |
1024 |
1024 |
1:1 |
1024 x 1024 |
768 |
768 |
1:1 |
512 x 512 |
512 |
512 |
1:1 |
512 x 512 |
768 |
1 152 |
2:3 |
1024 x 1024 |
384 |
576 |
2:3 |
512 x 512 |
1 152 |
768 |
3:2 |
1024 x 1024 |
576 |
384 |
3:2 |
512 x 512 |
768 |
1280 |
3:5 |
1024 x 1024 |
384 |
640 |
3:5 |
512 x 512 |
1280 |
768 |
5:3 |
1024 x 1024 |
640 |
384 |
5:3 |
512 x 512 |
896 |
1 152 |
7:9 |
1024 x 1024 |
448 |
576 |
7:9 |
512 x 512 |
1 152 |
896 |
9:7 |
1024 x 1024 |
576 |
448 |
9:7 |
512 x 512 |
768 |
1 408 |
6:11 |
1024 x 1024 |
384 |
704 |
6:11 |
512 x 512 |
1 408 |
768 |
11:6 |
1024 x 1024 |
704 |
384 |
11:6 |
512 x 512 |
640 |
1 408 |
5:11 |
1024 x 1024 |
320 |
704 |
5:11 |
512 x 512 |
1 408 |
640 |
11:5 |
1024 x 1024 |
704 |
320 |
11:5 |
512 x 512 |
1 152 |
640 |
9:5 |
1024 x 1024 |
1173 |
640 |
16:9 |
1024 x 1024 |
-
seed (optional): Wird verwendet, um Ergebnisse zu kontrollieren und zu reproduzieren. Bestimmt die anfängliche Einstellung für das Rauschen. Verwenden Sie denselben Startwert und dieselben Einstellungen wie bei einem vorherigen Lauf, damit Inferenzen ein ähnliches Bild erzeugen können.
Minimum |
Maximum |
Standard |
0 |
2.147.483.646 |
0 |
Codebeispiele
Die folgenden Beispiele zeigen, wie das Titan Image Generator G1 Amazon-Modell mit On-Demand-Durchsatz im Python-SDK aufgerufen wird. Wählen Sie eine Registerkarte aus, um ein Beispiel für jeden Anwendungsfall anzuzeigen. In jedem Beispiel wird das Bild am Ende angezeigt.
- Text-to-image generation
-
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
Shows how to generate an image from a text prompt with the Amazon Titan Image Generator G1 model (on demand).
"""
import base64
import io
import json
import logging
import boto3
from PIL import Image
from botocore.exceptions import ClientError
class ImageError(Exception):
"Custom exception for errors returned by Amazon Titan Image Generator G1"
def __init__(self, message):
self.message = message
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)
def generate_image(model_id, body):
"""
Generate an image using Amazon Titan Image Generator G1 model on demand.
Args:
model_id (str): The model ID to use.
body (str) : The request body to use.
Returns:
image_bytes (bytes): The image generated by the model.
"""
logger.info(
"Generating image with Amazon Titan Image Generator G1 model %s", model_id)
bedrock = boto3.client(service_name='bedrock-runtime')
accept = "application/json"
content_type = "application/json"
response = bedrock.invoke_model(
body=body, modelId=model_id, accept=accept, contentType=content_type
)
response_body = json.loads(response.get("body").read())
base64_image = response_body.get("images")[0]
base64_bytes = base64_image.encode('ascii')
image_bytes = base64.b64decode(base64_bytes)
finish_reason = response_body.get("error")
if finish_reason is not None:
raise ImageError(f"Image generation error. Error is {finish_reason}")
logger.info(
"Successfully generated image with Amazon Titan Image Generator G1 model %s", model_id)
return image_bytes
def main():
"""
Entrypoint for Amazon Titan Image Generator G1 example.
"""
logging.basicConfig(level=logging.INFO,
format="%(levelname)s: %(message)s")
model_id = 'amazon.titan-image-generator-v1'
prompt = """A photograph of a cup of coffee from the side."""
body = json.dumps({
"taskType": "TEXT_IMAGE",
"textToImageParams": {
"text": prompt
},
"imageGenerationConfig": {
"numberOfImages": 1,
"height": 1024,
"width": 1024,
"cfgScale": 8.0,
"seed": 0
}
})
try:
image_bytes = generate_image(model_id=model_id,
body=body)
image = Image.open(io.BytesIO(image_bytes))
image.show()
except ClientError as err:
message = err.response["Error"]["Message"]
logger.error("A client error occurred: %s", message)
print("A client error occured: " +
format(message))
except ImageError as err:
logger.error(err.message)
print(err.message)
else:
print(
f"Finished generating image with Amazon Titan Image Generator G1 model {model_id}.")
if __name__ == "__main__":
main()
- Inpainting
-
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
Shows how to use inpainting to generate an image from a source image with
the Amazon Titan Image Generator G1 model (on demand).
The example uses a mask prompt to specify the area to inpaint.
"""
import base64
import io
import json
import logging
import boto3
from PIL import Image
from botocore.exceptions import ClientError
class ImageError(Exception):
"Custom exception for errors returned by Amazon Titan Image Generator G1"
def __init__(self, message):
self.message = message
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)
def generate_image(model_id, body):
"""
Generate an image using Amazon Titan Image Generator G1 model on demand.
Args:
model_id (str): The model ID to use.
body (str) : The request body to use.
Returns:
image_bytes (bytes): The image generated by the model.
"""
logger.info(
"Generating image with Amazon Titan Image Generator G1 model %s", model_id)
bedrock = boto3.client(service_name='bedrock-runtime')
accept = "application/json"
content_type = "application/json"
response = bedrock.invoke_model(
body=body, modelId=model_id, accept=accept, contentType=content_type
)
response_body = json.loads(response.get("body").read())
base64_image = response_body.get("images")[0]
base64_bytes = base64_image.encode('ascii')
image_bytes = base64.b64decode(base64_bytes)
finish_reason = response_body.get("error")
if finish_reason is not None:
raise ImageError(f"Image generation error. Error is {finish_reason}")
logger.info(
"Successfully generated image with Amazon Titan Image Generator G1 model %s", model_id)
return image_bytes
def main():
"""
Entrypoint for Amazon Titan Image Generator G1 example.
"""
try:
logging.basicConfig(level=logging.INFO,
format="%(levelname)s: %(message)s")
model_id = 'amazon.titan-image-generator-v1'
# Read image from file and encode it as base64 string.
with open("/path/to/image", "rb") as image_file:
input_image = base64.b64encode(image_file.read()).decode('utf8')
body = json.dumps({
"taskType": "INPAINTING",
"inPaintingParams": {
"text": "Modernize the windows of the house",
"negativeText": "bad quality, low res",
"image": input_image,
"maskPrompt": "windows"
},
"imageGenerationConfig": {
"numberOfImages": 1,
"height": 512,
"width": 512,
"cfgScale": 8.0
}
})
image_bytes = generate_image(model_id=model_id,
body=body)
image = Image.open(io.BytesIO(image_bytes))
image.show()
except ClientError as err:
message = err.response["Error"]["Message"]
logger.error("A client error occurred: %s", message)
print("A client error occured: " +
format(message))
except ImageError as err:
logger.error(err.message)
print(err.message)
else:
print(
f"Finished generating image with Amazon Titan Image Generator G1 model {model_id}.")
if __name__ == "__main__":
main()
- Outpainting
-
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
Shows how to use outpainting to generate an image from a source image with
the Amazon Titan Image Generator G1 model (on demand).
The example uses a mask image to outpaint the original image.
"""
import base64
import io
import json
import logging
import boto3
from PIL import Image
from botocore.exceptions import ClientError
class ImageError(Exception):
"Custom exception for errors returned by Amazon Titan Image Generator G1"
def __init__(self, message):
self.message = message
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)
def generate_image(model_id, body):
"""
Generate an image using Amazon Titan Image Generator G1 model on demand.
Args:
model_id (str): The model ID to use.
body (str) : The request body to use.
Returns:
image_bytes (bytes): The image generated by the model.
"""
logger.info(
"Generating image with Amazon Titan Image Generator G1 model %s", model_id)
bedrock = boto3.client(service_name='bedrock-runtime')
accept = "application/json"
content_type = "application/json"
response = bedrock.invoke_model(
body=body, modelId=model_id, accept=accept, contentType=content_type
)
response_body = json.loads(response.get("body").read())
base64_image = response_body.get("images")[0]
base64_bytes = base64_image.encode('ascii')
image_bytes = base64.b64decode(base64_bytes)
finish_reason = response_body.get("error")
if finish_reason is not None:
raise ImageError(f"Image generation error. Error is {finish_reason}")
logger.info(
"Successfully generated image with Amazon Titan Image Generator G1 model %s", model_id)
return image_bytes
def main():
"""
Entrypoint for Amazon Titan Image Generator G1 example.
"""
try:
logging.basicConfig(level=logging.INFO,
format="%(levelname)s: %(message)s")
model_id = 'amazon.titan-image-generator-v1'
# Read image and mask image from file and encode as base64 strings.
with open("/path/to/image", "rb") as image_file:
input_image = base64.b64encode(image_file.read()).decode('utf8')
with open("/path/to/mask_image", "rb") as mask_image_file:
input_mask_image = base64.b64encode(
mask_image_file.read()).decode('utf8')
body = json.dumps({
"taskType": "OUTPAINTING",
"outPaintingParams": {
"text": "Draw a chocolate chip cookie",
"negativeText": "bad quality, low res",
"image": input_image,
"maskImage": input_mask_image,
"outPaintingMode": "DEFAULT"
},
"imageGenerationConfig": {
"numberOfImages": 1,
"height": 512,
"width": 512,
"cfgScale": 8.0
}
}
)
image_bytes = generate_image(model_id=model_id,
body=body)
image = Image.open(io.BytesIO(image_bytes))
image.show()
except ClientError as err:
message = err.response["Error"]["Message"]
logger.error("A client error occurred: %s", message)
print("A client error occured: " +
format(message))
except ImageError as err:
logger.error(err.message)
print(err.message)
else:
print(
f"Finished generating image with Amazon Titan Image Generator G1 model {model_id}.")
if __name__ == "__main__":
main()
- Image variation
-
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
"""
Shows how to generate an image variation from a source image with the
Amazon Titan Image Generator G1 model (on demand).
"""
import base64
import io
import json
import logging
import boto3
from PIL import Image
from botocore.exceptions import ClientError
class ImageError(Exception):
"Custom exception for errors returned by Amazon Titan Image Generator G1"
def __init__(self, message):
self.message = message
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)
def generate_image(model_id, body):
"""
Generate an image using Amazon Titan Image Generator G1 model on demand.
Args:
model_id (str): The model ID to use.
body (str) : The request body to use.
Returns:
image_bytes (bytes): The image generated by the model.
"""
logger.info(
"Generating image with Amazon Titan Image Generator G1 model %s", model_id)
bedrock = boto3.client(service_name='bedrock-runtime')
accept = "application/json"
content_type = "application/json"
response = bedrock.invoke_model(
body=body, modelId=model_id, accept=accept, contentType=content_type
)
response_body = json.loads(response.get("body").read())
base64_image = response_body.get("images")[0]
base64_bytes = base64_image.encode('ascii')
image_bytes = base64.b64decode(base64_bytes)
finish_reason = response_body.get("error")
if finish_reason is not None:
raise ImageError(f"Image generation error. Error is {finish_reason}")
logger.info(
"Successfully generated image with Amazon Titan Image Generator G1 model %s", model_id)
return image_bytes
def main():
"""
Entrypoint for Amazon Titan Image Generator G1 example.
"""
try:
logging.basicConfig(level=logging.INFO,
format="%(levelname)s: %(message)s")
model_id = 'amazon.titan-image-generator-v1'
# Read image from file and encode it as base64 string.
with open("/path/to/image", "rb") as image_file:
input_image = base64.b64encode(image_file.read()).decode('utf8')
body = json.dumps({
"taskType": "IMAGE_VARIATION",
"imageVariationParams": {
"text": "Modernize the house, photo-realistic, 8k, hdr",
"negativeText": "bad quality, low resolution, cartoon",
"images": [input_image],
"similarityStrength": 0.7, # Range: 0.2 to 1.0
},
"imageGenerationConfig": {
"numberOfImages": 1,
"height": 512,
"width": 512,
"cfgScale": 8.0
}
})
image_bytes = generate_image(model_id=model_id,
body=body)
image = Image.open(io.BytesIO(image_bytes))
image.show()
except ClientError as err:
message = err.response["Error"]["Message"]
logger.error("A client error occurred: %s", message)
print("A client error occured: " +
format(message))
except ImageError as err:
logger.error(err.message)
print(err.message)
else:
print(
f"Finished generating image with Amazon Titan Image Generator G1 model {model_id}.")
if __name__ == "__main__":
main()