Java를 사용하여 Amazon Bedrock 및 Stable Diffusion XL로 이미지 생성하기
심층적인 논의
기술적
0 0 1
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을 애플리케이션에 구현하려는 개발자에게 실질적인 지침을 제공합니다.
Amazon Bedrock은 주요 AI 기업의 고성능 파운데이션 모델(FM)을 선택적으로 제공하는 완전 관리형 서비스입니다. Stability.ai에서 제공하는 Stable Diffusion XL은 텍스트 프롬프트에서 고품질 이미지를 생성할 수 있는 강력한 텍스트-이미지 모델입니다. 이 문서는 Java SDK를 사용하여 이미지 생성을 위해 Stable Diffusion XL을 호출하는 Amazon Bedrock 사용 과정을 안내합니다.
“ Java에서 Bedrock 런타임 클라이언트 설정
이미지 생성을 시작하기 전에 Java 환경에서 Bedrock 런타임 클라이언트를 설정해야 합니다. 여기에는 `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 런타임 클라이언트를 생성합니다.
// 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 런타임 클라이언트가 설정되고 요청 페이로드가 구성되면 `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 런타임으로 보냅니다.
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` 메서드를 사용했습니다. 선택한 UI 프레임워크 또는 이미지 라이브러리에 따라 이 메서드를 구현해야 합니다. 간단한 예는 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 런타임 클라이언트를 생성합니다.
// 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 런타임으로 보냅니다.
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/)
우리는 사이트 작동에 필수적인 쿠키를 사용합니다. 사이트를 개선하기 위해 방문자들의 사용 방식을 이해하고, 소셜 미디어 플랫폼에서의 트래픽을 측정하며, 개인화된 경험을 제공하는 데 도움이 되는 추가 쿠키를 사용하고자 합니다. 일부 쿠키는 제3자가 제공합니다. 모든 쿠키를 수락하려면 '수락'을 클릭하세요. 선택적 쿠키를 모두 거부하려면 '거부'를 클릭하세요.
댓글(0)