一、Bedrock 简介
Amazon Bedrock
是
Amazon Web Services
提供的一种生成式 AI 服务。通过
Bedrock
,用户可以方便地使用多种基础模型(
Foundation Models
),包括
OpenAI
的
GPT
、
Anthropic
的
Claude
等。这些模型可以用于各种生成式 AI 应用,包括文生图任务。本文将介绍如何使用
Amazon Bedrock
的
SDXL模型
的
API
实现文生图。
二、开通Bedrock相应模型的使用权限
访问 亚马逊官网,登录账号后,服务菜单里选择
Machine Learning
,选择
Amazon Bedrock
。
选择
Stable Diffusion
。
首次使用需要开通相应模型的使用权限。点击
"请求模型访问权限"
。
点击
"启用特定模型"
。
勾选
Claude
里的
Claude 3 Sonnet
、
Claude 3 Haiku
、
Claude
、
Claude Instant
四个模型。
再勾选
Stability Al
里的
SDXL 1.0
。
填写
Anthropic
的应用场景详细信息。
点击提交。
提交完之后,我们刚刚勾选的五个模型会变成
"正在进行"
状态,需要等待几分钟。
几分钟后,模型状态正常,变为
"已授予访问权限"
状态。
三、SDXL模型支持的几种模式
操场里点击图像,选择模型。类别选择
Stability AI
,模型选择
SDXL 1.0
,推理默认
按需
即可。选择好点击
应用
。
我们进入到了图像操场页面,在这里我们可以通过调整配置生成满足不同要求的图片。
配置解释:
操作内容模式模型生成新图像(生成)或编辑(编辑)在参考图像中提供的图像否定提示不希望模型生成的项目或概念,例如卡通或暴力推理图像上传图像作为图像生成或编辑的参考响应图像生成图像的输出设置,例如质量、方向、大小和要生成的图像数量高级配置要传递给模型的推理参数
下面是
SDXL 1.0 模型
支持的几种模式:
1. 文生图
调整配置为:
- 操作: 生成图像
- 提示词: a serene beach at sunset
- 提示强度: 10
- 生成步骤: 30
- 种子: 10
点击运行,生成效果如图:
2. 图生图
点击图片,操作里选择编辑功能。
可以看到右侧推理图像已经填入我们刚刚生成的图像。将
操作
选择为
生成变体
。
调整配置为:
- 操作: 生成变体
- 提示词: add vibrant hues to the sky, enhance reflections on the water
- 负面提示词: dull colors, lack of sunset details, unrealistic sky gradients, poorly rendered reflections
- 提示强度: 30
- 生成步骤: 50
- 种子: 321
点击运行,生成效果如图:
3. 图像编辑
我们重新生成一个绿色茶园的背景图。
操作选择
编辑
,选择需要替换的区域,输入提示词、选择提示强度,生成图片。
比如,我们要增加一只羊。
调整配置为:
- 操作: 编辑
- 提示词: add a sheep
- 提示强度: 10
通过
Amazon Bedrock Stability AI SDXL 1.0
的
文生图
、
图生图
、
图像编辑
功能,我们可以开启简洁高效的视觉创作之旅,让创意变得触手可及。
四、调用Bedrock里Stability的API
我们使用
Jupyter
来实现
Bedrock
里
Stability
的API调用。
1. 创建访问密钥
在
控制台
的
安全凭证
里申请
安全密钥
。
保存好我们的
访问密钥
。
2. 安装相关环境
创建一个python环境,执行下面命令:
cd ~/environment/
curl'https://dev-media.amazoncloud.cn/doc/workshop.zip' --output workshop.zip
unzip workshop.zip
解压完成后,安装需要的包:
pip3 install -r ~/environment/workshop/setup/requirements.txt -U
配置访问密钥:
aws configure
按提示输入以下信息:
- Access Key ID
- Secret Access Key
- 默认区域名称(如
us-east-1
) - 输出格式(如
json
,也可以直接为None
)
3. 编写代码并调用
我们需要传一个
JSON
串,官网示例参数如下:
{"modelId":"stability.stable-diffusion-xl-v1","contentType":"application/json","accept":"application/json","body":"{\"text_prompts\":[{\"text\":\"this is where you place your input text\",\"weight\":1}],\"cfg_scale\":10,\"seed\":0,\"steps\":50,\"width\":512,\"height\":512}"}
其中,
body
的参数含义如下:
参数值含义作用text_prompts
[{ "text": "this is where you place your input text", "weight": 1 }]
文本提示-
"text"
: 输入的描述文字,模型将根据这个文字生成图像。
"weight"
: 权重,控制模型对文本的关注程度。cfg_scale
10
引导强度数值越高,生成的图像越严格按照文本提示进行;数值较低时生成内容更具创造性和自由度。seed
0
随机种子控制生成的随机性;相同种子和相同输入生成一致图像,不同种子生成不同结果。steps
50
迭代步骤数步骤数越多,生成的图像质量越高,但耗时越长。width
512
图像宽度(像素)设置生成图像的横向分辨率。height
512
图像高度(像素)设置生成图像的纵向分辨率。
下面我们来编写代码:
选择
workshop/labs/api/bedrock_api.py
编写代码:
import json
import boto3
import base64
import os
from PIL import Image
import io
session = boto3.Session()
bedrock = session.client(service_name='bedrock-runtime')#creates a Bedrock client
bedrock_model_id ="stability.stable-diffusion-xl-v1"# set the foundation model
prompt ="a beautiful mountain landscape"# the prompt to send to the model
seed =10
body = json.dumps({"text_prompts":[{"text": prompt}],"seed": seed,"cfg_scale":10,"steps":30,})# build the request payload# send the payload to Bedrock
response = bedrock.invoke_model(
body=body, modelId=bedrock_model_id, accept='application/json', contentType='application/json')# read the response
response_body = json.loads(response.get('body').read())
base64_image_data = response_body.get("artifacts")[0]["base64"]print(f"{base64_image_data[0:80]}...")# Convert base64 image data to an image and save it to a file
image_data = base64.b64decode(base64_image_data)
os.makedirs("data", exist_ok=True)
image = Image.open(io.BytesIO(image_data))
image.save('data/sd_generated_image.jpg')
调用这段代码:
python3 bedrock_api.py
调用成功后,我们可以看到,
workshop/labs/api/data/
目录下生成了图片:
sd_generated_image.jpg
。
4. 调试和优化
① 检查输入提示
生成的图片质量与输入提示(Prompt)的清晰度和详细程度密切相关。建议:
- 描述尽可能具体,例如 “A detailed painting of a dragon flying over a mountain during sunset”。
- 包含图片风格关键词,如 “realistic”, “abstract”, “oil painting”。
② 设置参数
根据需求,调整以下参数,可以优化生成结果:
- 分辨率:通过设置
width
和height
参数调整图像的宽高分辨率(单位:像素)。提高分辨率(如从默认的512x512
提升到更高值)可以增加图像细节,但可能会延长生成时间。 - 文本提示和权重:使用
text_prompts
参数提供描述性文字(如场景或风格),并通过weight
调整对该提示的关注程度。权重值越高,生成图像将越贴近描述。 - 引导强度:通过
cfg_scale
控制模型对文本提示的遵循程度。较高的值(如10
或以上)会更严格地匹配输入描述;较低的值可能允许更具创造性的生成。 - 随机种子:设置
seed
参数固定生成的随机性,确保相同的输入条件下产生一致的图像结果。使用不同的种子值可以生成多样化的结果。 - 迭代次数:调整
steps
参数来控制图像生成的细化过程。更多的迭代(如从50
提升到更高)通常会提升图像质量,但可能需要更长时间。
前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技 中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。
五、总结
Amazon Bedrock 为文生图功能提供了高效且灵活的解决方案,整合了多个顶尖的基础模型(如 Stable Diffusion SDXL 1.0),能够满足从创意设计到生产应用的多样化需求。通过其直观的 API 接口,开发者可以轻松调用模型,快速实现图像生成,并结合参数优化获得高质量的输出。
版权归原作者 Damon小智 所有, 如有侵权,请联系我们删除。