AiToolGo的标志

使用 Java 和 Amazon Bedrock 以及 Stable Diffusion XL 生成图像

深入讨论
技术性
 0
 0
 1
Stable Diffusion的标志

Stable Diffusion

Black Technology LTD

本文档提供了 Amazon Bedrock 的全面用户指南,详细介绍了其核心功能、API 用法以及使用 Stability.ai Stable Diffusion XL 模型生成图像的实际示例。它包含多种编程语言的代码片段,并讨论了模型调用、参数和错误处理。
  • 主要观点
  • 独特见解
  • 实际应用
  • 关键主题
  • 核心洞察
  • 学习成果
  • 主要观点

    • 1
      全面涵盖 Amazon Bedrock 的功能
    • 2
      详细的代码示例,便于实际操作
    • 3
      清晰解释模型调用和参数
  • 独特见解

    • 1
      Stable Diffusion 在图像生成方面的创新应用
    • 2
      深入探讨 API 错误处理和故障排除
  • 实际应用

    • 本文档为希望在其应用程序中实现 Amazon Bedrock 的开发人员提供了实用的指导,包含可操作的代码示例和最佳实践。
  • 关键主题

    • 1
      Amazon Bedrock 功能
    • 2
      使用 Stable Diffusion 生成图像
    • 3
      API 用法和错误处理
  • 核心洞察

    • 1
      图像生成的逐步代码示例
    • 2
      详细解释模型参数及其影响
    • 3
      侧重于实际实现和故障排除
  • 学习成果

    • 1
      了解如何使用 Amazon Bedrock 调用模型
    • 2
      学习使用 Stability.ai Stable Diffusion 模型生成图像
    • 3
      深入了解 API 错误处理和故障排除
示例
教程
代码示例
可视化内容
基础知识
高级内容
实用技巧
最佳实践

Amazon Bedrock 和 Stable Diffusion XL 简介

Amazon Bedrock 是一项全托管服务,提供来自领先人工智能公司的多种高性能基础模型 (FM)。Stability.ai 提供的 Stable Diffusion XL 是一款强大的文本到图像模型,能够根据文本提示生成高质量图像。本文将指导您如何使用 Amazon Bedrock 调用 Stable Diffusion XL,并通过 Java SDK 生成图像。

在 Java 中设置 Bedrock Runtime 客户端

在开始生成图像之前,您需要在 Java 环境中设置 Bedrock Runtime 客户端。这包括创建一个 `BedrockRuntimeClient` 实例,并使用您的 AWS 凭证和所需的 AWS 区域进行配置。操作方法如下: ```java import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.bedrockruntime.BedrockRuntimeClient; // 在您要使用的 AWS 区域中创建 Bedrock Runtime 客户端。 // 将 DefaultCredentialsProvider 替换为您首选的凭证提供程序。 var client = BedrockRuntimeClient.builder() .credentialsProvider(DefaultCredentialsProvider.create()) .region(Region.US_EAST_1) .build(); ``` 请确保您的项目中已添加 AWS SDK for Java 2.x 作为依赖项。

构建图像生成请求

`InvokeModel` API 需要 Stable Diffusion XL 模型能够理解的特定载荷格式。此载荷包含文本提示、样式预设和种子等参数。您可以使用以下模板创建一个表示此载荷的 JSON 字符串: ```java var nativeRequestTemplate = """ { "text_prompts": [{ "text": "{{prompt}}" }], "style_preset": "{{style}}", "seed": {{seed}} }"""; // 定义图像生成的提示。 var prompt = "一张风格化的可爱老式蒸汽朋克机器人图片"; // 获取用于图像生成的随机 32 位种子(最大值为 4,294,967,295)。 var seed = new BigInteger(31, new SecureRandom()); // 选择一个样式预设。 var style = "cinematic"; // 将提示、种子和样式嵌入模型的原生请求载荷中。 String nativeRequest = nativeRequestTemplate .replace("{{prompt}}", prompt) .replace("{{seed}}", seed.toString()) .replace("{{style}}", style); ``` 自定义 `prompt`、`style` 和 `seed` 变量以生成不同的图像。

调用 Stable Diffusion XL 模型

设置好 Bedrock Runtime 客户端并构建好请求载荷后,您现在可以使用 `invokeModel` 方法调用 Stable Diffusion XL 模型: ```java import software.amazon.awssdk.core.SdkBytes; import software.amazon.awssdk.core.exception.SdkClientException; // 设置模型 ID,例如 Stable Diffusion XL v1。 var modelId = "stability.stable-diffusion-xl-v1"; try { // 对请求进行编码并发送到 Bedrock Runtime。 var response = client.invokeModel(request -> request .body(SdkBytes.fromUtf8String(nativeRequest)) .modelId(modelId) ); // 解码响应体。 var responseBody = new JSONObject(response.body().asUtf8String()); // 从模型的响应中检索生成的图像数据。 var base64ImageData = new JSONPointer("/artifacts/0/base64") .queryFrom(responseBody) .toString(); return base64ImageData; } catch (SdkClientException e) { System.err.printf("错误:无法调用 '%s'。原因:%s", modelId, e.getMessage()); throw new RuntimeException(e); } ``` 此代码将请求发送到 Amazon Bedrock 并检索响应。

解码图像生成响应

`invokeModel` 方法的响应包含 base64 格式的生成图像数据。您需要解码这些数据才能显示图像。下面的代码片段展示了如何从响应中提取 base64 图像数据: ```java import org.json.JSONObject; import org.json.JSONPointer; // 解码响应体。 var responseBody = new JSONObject(response.body().asUtf8String()); // 从模型的响应中检索生成的图像数据。 var base64ImageData = new JSONPointer("/artifacts/0/base64") .queryFrom(responseBody) .toString(); ```

显示生成的图像

一旦获得 base64 图像数据,您就可以使用合适的图像显示方法来显示它。原始代码使用了一个 `displayImage` 方法。您需要根据您选择的用户界面框架或图像库来实现此方法。一个简单的示例可能涉及将 base64 字符串转换为字节数组,然后使用图像库进行显示。 ```java // 假设您有一个 displayImage 方法 displayImage(base64ImageData); ```

完整的 Java 代码示例

以下是调用 Amazon Bedrock 上的 Stable Diffusion XL 的完整 Java 代码示例: ```java import org.json.JSONObject; import org.json.JSONPointer; import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider; import software.amazon.awssdk.core.SdkBytes; import software.amazon.awssdk.core.exception.SdkClientException; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.bedrockruntime.BedrockRuntimeClient; import java.math.BigInteger; import java.security.SecureRandom; import static com.example.bedrockruntime.libs.ImageTools.displayImage; public class InvokeModel { public static String invokeModel() { // 在您要使用的 AWS 区域中创建 Bedrock Runtime 客户端。 // 将 DefaultCredentialsProvider 替换为您首选的凭证提供程序。 var client = BedrockRuntimeClient.builder() .credentialsProvider(DefaultCredentialsProvider.create()) .region(Region.US_EAST_1) .build(); // 设置模型 ID,例如 Stable Diffusion XL v1。 var modelId = "stability.stable-diffusion-xl-v1"; // InvokeModel API 使用模型的原生载荷。 // 了解有关可用推理参数和响应字段的更多信息,请访问: // https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-diffusion-1-0-text-image.html var nativeRequestTemplate = """ { "text_prompts": [{ "text": "{{prompt}}" }], "style_preset": "{{style}}", "seed": {{seed}} }"""; // 定义图像生成的提示。 var prompt = "一张风格化的可爱老式蒸汽朋克机器人图片"; // 获取用于图像生成的随机 32 位种子(最大值为 4,294,967,295)。 var seed = new BigInteger(31, new SecureRandom()); // 选择一个样式预设。 var style = "cinematic"; // 将提示、种子和样式嵌入模型的原生请求载荷中。 String nativeRequest = nativeRequestTemplate .replace("{{prompt}}", prompt) .replace("{{seed}}", seed.toString()) .replace("{{style}}", style); try { // 对请求进行编码并发送到 Bedrock Runtime。 var response = client.invokeModel(request -> request .body(SdkBytes.fromUtf8String(nativeRequest)) .modelId(modelId) ); // 解码响应体。 var responseBody = new JSONObject(response.body().asUtf8String()); // 从模型的响应中检索生成的图像数据。 var base64ImageData = new JSONPointer("/artifacts/0/base64") .queryFrom(responseBody) .toString(); return base64ImageData; } catch (SdkClientException e) { System.err.printf("错误:无法调用 '%s'。原因:%s", modelId, e.getMessage()); throw new RuntimeException(e); } } public static void main(String[] args) { System.out.println("正在生成图像。这可能需要几秒钟..."); String base64ImageData = invokeModel(); displayImage(base64ImageData); } } ```

Amazon Bedrock 和 AWS SDK 的其他资源

有关 Amazon Bedrock、AWS SDK for Java 和 Stable Diffusion XL 的更多信息,请参阅以下资源: * [Amazon Bedrock 文档](https://docs.aws.amazon.com/bedrock/latest/userguide/) * [AWS SDK for Java 2.x API 参考](https://sdk.amazonaws.com/java/api/latest/) * [GitHub 上的 AWS 代码示例存储库](https://github.com/awsdocs/aws-doc-sdk-examples) * [Stable Diffusion XL 文档](https://stability.ai/)

 原始链接:https://docs.aws.amazon.com/zh_cn/bedrock/latest/userguide/bedrock-runtime_example_bedrock-runtime_InvokeModel_StableDiffusion_section.html

Stable Diffusion的标志

Stable Diffusion

Black Technology LTD

评论(0)

user's avatar

    相关工具