使用 Java 和 Amazon Bedrock 以及 Stable Diffusion XL 生成图像
Stable Diffusion
Black Technology LTD
本文档提供了 Amazon Bedrock 的全面用户指南,详细介绍了其核心功能、API 用法以及使用 Stability.ai Stable Diffusion XL 模型生成图像的实际示例。它包含多种编程语言的代码片段,并讨论了模型调用、参数和错误处理。
• 主要观点 1
全面涵盖 Amazon Bedrock 的功能
2
详细的代码示例,便于实际操作
3
清晰解释模型调用和参数
• 独特见解 • 实际应用 • 关键主题 1
Amazon Bedrock 功能
2
使用 Stable Diffusion 生成图像
3
API 用法和错误处理
• 核心洞察 1
图像生成的逐步代码示例
2
详细解释模型参数及其影响
3
侧重于实际实现和故障排除
• 学习成果
示例
教程
代码示例
可视化内容
基础知识
高级内容
实用技巧
最佳实践
“ 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
Black Technology LTD
评论(0)