注:截止测试发起时Nova 2 Omni尚未GA没有拿到测试权限,因此只能拿1年多前的上一代模型的Nova Canvas测试,这对于6个月换一代的模型很不公平,但目前没有测试Nova 2 Omni的账号,后续拿到后会补上。
一、背景
本文测试文生图的场景,并提供sample代码用于快速测试。截止测试发起时Nova 2 Omni尚未GA没有拿到测试权限,因此只能拿上一代模型的Nova Canvas测试。
测试对象是:
- Bedrock上的Nova Canvas
- Bedrock上的Stable Diffusion Large
- Bedrock上的Stable Image Ultra
- Google Vertex AI上的Gemini 2.5 Flash Image
- Google Vertex AI上的Google Gemini 3 Pro Image Preview
测试方法如下:
- 分别测试中文和英文,对于不支持输入中文的Stable系列模型则使用英文Prompt
- Nova Canvas, Stable Diffusion Large/Ultra 均在Amazon Bedrock上的API调用
- 测试代码为Kiro IDE自动生成,参数全默认,未进行二次人工优化,以一次出图为准
- Google Gemini 系列模型为浏览器在Vertex AI的控制台网页界面直接提交Prompt,未使用API,参数全默认,未进行二次人工优化,以一次出图为准
开始测试。
二、测试代码和方法
1、调用Bedrock上的Nova Canvas模型的代码
运行如下代码,通过切换传入的prompt即可在当前目录下获得输出图片(注意文件名都叫output.png)。
import boto3
import json
import base64
from pathlib import Path
# 创建 Bedrock Runtime 客户端,使用本机 AWS CLI 配置,指定 us-east-1 区域
bedrock_runtime = boto3.client(
service_name='bedrock-runtime',
region_name='us-east-1'
)
# 定义提示词
prompt1cn = "4000米海拔的青藏高原上的公路,公路是黑色沥青没有积雪,两边的地面是积雪覆盖。背后是七千米7000米以上的雪山被太阳照亮,但是途中画面角度不直接看到太阳"
prompt2cn = "日照金山,画面地点在雪域高原,背后是8000米的雪山尖峰,金色的太阳光照亮了顶部"
prompt1en = "A black asphalt highway on the Tibetan Plateau at 4000 meters altitude, the road is clear without snow, both sides covered with snow. Behind are majestic snow-capped mountains over 7000 meters high illuminated by sunlight, but the sun is not directly visible in the frame. Photorealistic, high quality, dramatic landscape."
prompt2en = "Golden hour sunlight on mountain peaks, majestic 8000-meter snow-capped summits on the snowy plateau, golden sunlight illuminating the mountain tops, dramatic landscape photography"
prompt_submit = prompt1cn
# 准备请求体
request_body = {
"taskType": "TEXT_IMAGE",
"textToImageParams": {
"text": prompt_submit
},
"imageGenerationConfig": {
"numberOfImages": 1,
"quality": "standard",
"height": 1024,
"width": 1024,
"cfgScale": 8.0,
"seed": 0
}
}
# 调用 Nova Canvas 模型
model_id = "amazon.nova-canvas-v1:0"
print("正在调用 Nova Canvas 模型生成图片...")
print(f"提示词: {prompt_submit}")
response = bedrock_runtime.invoke_model(
modelId=model_id,
body=json.dumps(request_body)
)
# 解析响应
response_body = json.loads(response['body'].read())
# 获取生成的图片(base64 编码)
image_base64 = response_body['images'][0]
# 解码并保存图片
image_data = base64.b64decode(image_base64)
output_path = Path("output.png")
with open(output_path, "wb") as f:
f.write(image_data)
print(f"图片已成功生成并保存到: {output_path.absolute()}")
2、调用Bedrock上的Stable Diffusion模型的代码
运行如下代码,通过切换传入的prompt即可在当前目录下获得输出图片(注意文件名都叫output.png)。
替换代码中的模型ID,即可在Large和Ultra版本之间切换。Stable Diffusion 3.5 Large的model id是stability.sd3-5-large-v1:0,Stable Image Ultra的model id是stability.stable-image-ultra-v1:1。
import boto3
import json
import base64
from pathlib import Path
# 创建 Bedrock Runtime 客户端,使用本机 AWS CLI 配置,指定 us-west-2 区域
bedrock_runtime = boto3.client(
service_name='bedrock-runtime',
region_name='us-west-2'
)
# 定义提示词(使用英文以避免内容过滤)
prompt1 = "A black asphalt highway on the Tibetan Plateau at 4000 meters altitude, the road is clear without snow, both sides covered with snow. Behind are majestic snow-capped mountains over 7000 meters high illuminated by sunlight, but the sun is not directly visible in the frame. Photorealistic, high quality, dramatic landscape."
prompt2 = "Golden hour sunlight on mountain peaks, majestic 8000-meter snow-capped summits on the snowy plateau, golden sunlight illuminating the mountain tops, dramatic landscape photography"
prompt_submit = prompt1
# 准备请求体 - Stable Diffusion 3.5 Large 格式
request_body = {
"prompt": prompt_submit,
"mode": "text-to-image",
"aspect_ratio": "1:1",
"output_format": "png"
}
# 调用 Stable Diffusion 3.5 Large 模型
model_id = "stability.sd3-5-large-v1:0"
print("正在调用 Stable Diffusion 3.5 Large 模型生成图片...")
print(f"提示词: {prompt_submit}")
response = bedrock_runtime.invoke_model(
modelId=model_id,
body=json.dumps(request_body)
)
# 解析响应
response_body = json.loads(response['body'].read())
# 检查是否被内容过滤器拦截
if 'finish_reasons' in response_body and response_body['finish_reasons']:
finish_reason = response_body['finish_reasons'][0]
if finish_reason and ('Filter' in str(finish_reason) or 'CONTENT_FILTERED' in str(finish_reason)):
print(f"错误: 请求被内容过滤器拦截 - {finish_reason}")
print("建议: 尝试修改提示词或使用英文提示词")
exit(1)
# 获取生成的图片(base64 编码)
# Stable Diffusion 3.5 的响应格式可能是 'image' 而不是 'images'
if 'images' in response_body:
image_base64 = response_body['images'][0]
elif 'image' in response_body:
image_base64 = response_body['image']
elif 'artifacts' in response_body:
image_base64 = response_body['artifacts'][0]['base64']
else:
print("响应内容:", json.dumps(response_body, indent=2, ensure_ascii=False))
raise KeyError(f"无法在响应中找到图片数据。响应键: {list(response_body.keys())}")
# 解码并保存图片
image_data = base64.b64decode(image_base64)
output_path = Path("output_sd.png")
with open(output_path, "wb") as f:
f.write(image_data)
print(f"图片已成功生成并保存到: {output_path.absolute()}")
3、手工在Google Vertex AI控制台上发起测试
登陆到Google Vertex AI控制台,在右侧的弹出窗口中,可以选择要测试的Gemini的特定版本,然后提交Prompt即可发起测试。如下截图。

三、效果对比
再次备注:截止测试发起时Nova 2 Omni尚未GA没有拿到测试权限,因此只能拿1年多前的上一代模型的Nova Canvas测试,这对于6个月换一代的模型很不公平,但目前没有测试Nova 2 Omni的账号,后续拿到后会补上。
测试用例1-中文Prompt对比如下截图。

测试用例1-英文Prompt对比如下截图。

测试用例2-中文Prompt对比如下截图。

测试用例2-英文Prompt对比如下截图。

从以上结果中可看出:
- 对Nova模型使用英文Prompt效果好于优于中文Prompt,这可能与模型的训练数据和优化方向有关,其他模型差别不大
- Stable Diffusion系列模型对于中文Prompt有触发内容过滤风险,在Amazon Bedrock的API上调用出错,因此需要改用英文Prompt
- 测试用例1中Gemini系列模型效果最好,尤其是Gemini 3 Pro Image Preview取得了碾压性效果
- 测试用例2中Stable Image Ultra模型效果最好,碾压性优势
- 由于Nova Canvas模型太老了,效果确实不如另外的模型,期待已经官宣了的Nova 2 Omni尽快在Bedrock服务上开放API给广大用户。
四、成本测算
1、价格列表
| 模型 | 价格/张 |
|---|---|
| Google Gemini 2.5 Flash Image | $0.039 |
| Amazon Nova Canvas 标准质量 | $0.04 |
| Amazon Nova Canvas 高级质量 | $0.06 |
| Stable Diffusion 3.5 Large | $0.08 |
| Stable Image Ultra | $0.14 |
2、结论
在AWS云上生态的性价比选择:Nova Canvas标准质量。虽然列表价格和Google Gemini 2.5 Flash Image相近,但Nova可应用AWS折扣,因此调用模型的时间价格可能比Google Gemini 2.5 Flash Image更好。高质量需求则直接使用Stable Image Ultra。
再次备注:截止测试发起时Nova 2 Omni尚未GA没有拿到测试权限,因此只能拿1年多前的上一代模型的Nova Canvas测试,这对于6个月换一代的模型很不公平,但目前没有测试Nova 2 Omni的账号,后续拿到后会补上。
五、参考文档
Amazon Nova 模型价格:
https://aws.amazon.com/nova/pricing/
Amazon Bedrock 上的Stable Diffusion/Stable Image模型价格:
https://aws.amazon.com/bedrock/pricing/
Google Gemini Model Pricing:
https://cloud.google.com/vertex-ai/generative-ai/pricing
最后修改于 2025-12-10