Stability.ai Diffusion 1.0 影像至影像 - Amazon Bedrock

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Stability.ai Diffusion 1.0 影像至影像

Stability.ai Diffusion 1.0 模型具有下列推論參數和模型回應,用於影像到影像推論呼叫。

請求與回應

要求主體會在要求body欄位中傳遞給InvokeModelInvokeModelWithResponseStream

如需詳細資訊,請參閱 https://platform.stability.ai/docs/api-reference#tag/v1generation/operation/ imageToImage

Request

Stability.ai Diffusion 1.0 模型具有下列推論參數,用於影像到影像推論呼叫。

{ "text_prompts": [ { "text": string, "weight": float } ], "init_image" : string , "init_image_mode" : string, "image_strength" : float, "cfg_scale": float, "clip_guidance_preset": string, "sampler": string, "samples" : int, "seed": int, "steps": int, "style_preset": string, "extras" : json object }

下列是必要的參數。

  • text_prompts — (必要) 用於生成的文字提示陣列。每個元素都是包含提示和權值的JSON物件。

    • text — 您要傳遞至模型的提示。

      下限 最大

      0

      2000

    • weight — (選用) 模型應套用至提示的權重。小於零的值會宣告負數提示。使用否定提示,告告模型避免某些概念。weight 的預設值為一。

  • init_image — (必要) 您要用來初始化擴散程序的 base64 編碼影像。

以下是選用參數。

  • init_image_mode — (選用) 決定是否要使用 image_strengthstep_schedule_* 控制 init_image 中的影像對結果的影響程度。可能的值為 IMAGE_STRENGTHSTEP_SCHEDULE。預設值為 IMAGE _ STRENGTH。

  • image_strength — (選用) 決定 init_image 中的來源影像手手對擴散程序的影響程度。接近 1 的值會產生與來源影像非常相似的影像。接近 0 的值會產生與來源影像截然不同的影像。

  • cfg_scale — (選用) 決定最終影像描繪提示的程度。使用較低的數字來增加產生的隨機性。

    預設 下限 最大

    7

    0

    35

  • clip_guidance_preset - (選用) 列舉:FAST_BLUE, FAST_GREEN, NONE, SIMPLE, SLOW, SLOWER, SLOWEST

  • sampler — (選用) 用於擴散處理的取樣器。如果省略此值,模型會自動為您選取適當的取樣器。

    列舉:DDIM DDPM, K_DPMPP_2M, K_DPMPP_2S_ANCESTRAL, K_DPM_2, K_DPM_2_ANCESTRAL, K_EULER, K_EULER_ANCESTRAL, K_HEUN K_LMS

  • sample — (選用) 要產生的影像數目。目前 Amazon Bedrock 支援產生一個影像。如果您提供 samples 的值,則該值必須為一。

    預設 下限 最大

    1

    1

    1

  • seed – (選用) seed 決定初始雜訊設定。使用與先前執行相同的種子和相同的設定,以允許推論建立相似的影像。如果您未設定此值,或值為 0,便會設定為隨機數。

    預設 下限 最大

    0

    0

    4294967295

  • steps – (選用) 產生步驟會決定影像取樣的次數。步驟越多,結果會更準確。

    預設 下限 最大

    30

    10

    50

  • style_preset — (選用) 將影像模型引導至特定樣式的樣式預設集。此樣式預設集清單會隨時變更。

    列舉:3d-model, analog-film, animé, cinematic, comic-book, digital-art, enhance, fantasy-art, isometric, line-art, low-poly, modeling-compound, neon-punk, origami, photographic, pixel-art, tile-texture

  • extras - (選用) 傳遞給引擎的額外參數。請謹慎使用。這些參數用於開發或實驗功能,並且可能隨時變更,恕不另行通知。

Response

Stability.ai Diffusion 1.0 模型會傳回以下用於文字轉影像推斷呼叫的欄位。

{ "result": string, "artifacts": [ { "seed": int, "base64": string, "finishReason": string } ] }
  • result — 操作的結果。如果成功,回應為 success

  • artifacts — 影像陣列,每個請求影像一個。

    • seed — 用於產生影像的種子值。

    • base64 — 模型產生的 Base64 編碼影像。

    • finishedReason— 影像產生程序的結果。有效的 值如下:

      • SUCCESS— 影像產生程序成功。

      • ERROR— 發生錯誤。

      • CONTENT_ FILTERED — 內容過濾器過濾了圖像,並且圖像可能會模糊。

程式碼範例

下列範例展示如何使用 Stability.ai Diffusion 1.0 模型和隨選輸送量執行推論。此範例將文字提示和參考影像提交至模型,從模型擷取回應,最後顯示影像。

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 """ Shows how to generate an image from a reference image with SDXL 1.0 (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 SDXL" 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 SDXL 1.0 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 SDXL 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()) print(response_body['result']) base64_image = response_body.get("artifacts")[0].get("base64") base64_bytes = base64_image.encode('ascii') image_bytes = base64.b64decode(base64_bytes) finish_reason = response_body.get("artifacts")[0].get("finishReason") if finish_reason == 'ERROR' or finish_reason == 'CONTENT_FILTERED': raise ImageError(f"Image generation error. Error code is {finish_reason}") logger.info("Successfully generated image withvthe SDXL 1.0 model %s", model_id) return image_bytes def main(): """ Entrypoint for SDXL example. """ logging.basicConfig(level = logging.INFO, format = "%(levelname)s: %(message)s") model_id='stability.stable-diffusion-xl-v1' prompt="""A space ship.""" # Read reference image from file and encode as base64 strings. with open("/path/to/image", "rb") as image_file: init_image = base64.b64encode(image_file.read()).decode('utf8') # Create request body. body=json.dumps({ "text_prompts": [ { "text": prompt } ], "init_image": init_image, "style_preset" : "isometric" }) 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 text with SDXL model {model_id}.") if __name__ == "__main__": main()