在本系列的上篇中我们介绍了亚马逊自研模型Amazon Nova系列大模型的基本能力和满足各种多样化需求(理解、内容生成)的6个模型。在本系列的下篇中,小李哥将大家探索用Amazon Nova系列模型开发真实场景化AI应用及API调用的代码样例。

接下来小李哥将会带大家一起体验利用Nova进行文字分析、视频理解、视频生成、图片生成等4个场景。

使用Amazon Nova Pro进行文档分析

在展示文档分析的能力的场景中,我会使用亚马逊云科技官方文档PDF 文件 - “如何基于使用场景选择亚马逊云科技对应的AI产品”,文档中介绍了亚马逊云科技目前的主流AI服务,并介绍了对应的应用场景,帮助开发者选择适用于自己使用场景的服务。

系统提示词

首先我们在Amazon Bedrock服务的控制台的导航窗格中选择Model access并开启Amazon Nova 模型访问。然后我们在导航窗格的Playground中选择Chat/text(聊天/文本)窗口,并选择 Amazon Nova Pro模型。在聊天界面中我们上传刚才下载的文档,并提出以下请求:

Write a summary of this doc in 100 words. Then, build a decision tree.

“用 100 个单词总结这份文档,然后构建一棵决策树。”

模型输出

从下图的模型回复截图中可以看出,模型的输出严格按照我的提示词定义生成,输出中提供了结构化的决策树,让我在阅读文档之前就对其内容有了一个系统、全面的了解。

使用 Amazon Nova Pro 进行视频分析

为了展示Nova模型分析视频的能力,我们首先准备如下的实例视频,视频由两个短片拼接而成,是在海岸的一片悬崖上远眺大海。

接下来我使用亚马逊云科技提供的 Python SDK(Boto3),通过Amazon Bedrock的Converse API 调用Amazon Nova Pro模型,对视频进行分析。

API代码示例

我们使用如下的Python实例代码,通过API调用的方式,使用Amazon Nova Pro分析上传的视频,并生成对视频的描述,视频位置存储在Amazon S3存储桶中。

import boto3

AWS_REGION = "us-east-1"
MODEL_ID = "amazon.nova-pro-v1:0"
VIDEO_FILE = "the-sea.mp4"

bedrock_runtime = boto3.client("bedrock-runtime", region_name=AWS_REGION)
with open(VIDEO_FILE, "rb") as f:
    video = f.read()

user_message = "Describe this video."

messages = [ { "role": "user", "content": [
    {"video": {"format": "mp4", "source": {"bytes": video}}},
    {"text": user_message}
] } ]

response = bedrock_runtime.converse(
    modelId=MODEL_ID,
    messages=messages,
    inferenceConfig={"temperature": 0.0}
 )

response_text = response["output"]["message"]["content"][0]["text"]
print(response_text)

模型输出

通过命令行运行上述脚本后,得到如下结果:

The video begins with a view of a rocky shore on the ocean, and then transitions to a close-up of a large seashell resting on a sandy beach.

视频以一个岩石海岸的景象开头,接着转场到一只安置在沙滩上的大贝壳的特写画面。

我们除了简单的分析视频,还可以添加更详细的提示词,从视频中提取特定的信息,例如检测物体或识别文本。需要注意Amazon Nova当前是无法处理视频中的音频信息的。

使用Amazon Nova Reel进行视频生成 

接下来小李哥将通过Amazon Nova Reel生辰一段视频,首先我们从提示词开始生成。

由于生成视频需要几分钟时间,时间稍长,Amazon Bedrock API引入了以下三种新操作:

1. StartAsyncInvoke:启动异步调用。

2. GetAsyncInvoke:获取特定异步调用的当前状态。

3. ListAsyncInvokes:列出所有异步调用的状态,可选筛选条件包括状态或日期。

系统提示词

Amazon Nova Reel模型一个比较有意思的功能就是支持摄像机控制操作,例如缩放或移动镜头。下方就是我会使用的提示词,我接下来会根据这段文本提示生成一段视频:

Closeup of a large seashell in the sand. Gentle waves flow all around the shell. Sunset light. Camera zoom in very close.

“沙滩上的一个大贝壳特写。温柔的海浪围绕着贝壳流动。夕阳的光线洒满画面。镜头缓慢拉近,非常接近贝壳。”

我在脚本中定义了一段视频生成状态检测代码段,在运行后脚本会定期检查视频生成的状态,直到视频创建完成。我还为脚本添加了一个random seed,以确保每次运行代码时都会生成不同的结果。

import random
import time

import boto3

AWS_REGION = "us-east-1"
MODEL_ID = "amazon.nova-reel-v1:0"
SLEEP_TIME = 30
S3_DESTINATION_BUCKET = "<BUCKET>"

video_prompt = "Closeup of a large seashell in the sand. Gentle waves flow all around the shell. Sunset light. Camera zoom in very close."

bedrock_runtime = boto3.client("bedrock-runtime", region_name=AWS_REGION)
model_input = {
    "taskType": "TEXT_VIDEO",
    "textToVideoParams": {"text": video_prompt},
    "videoGenerationConfig": {
        "durationSeconds": 6,
        "fps": 24,
        "dimension": "1280x720",
        "seed": random.randint(0, 2147483648)
    }
}

invocation = bedrock_runtime.start_async_invoke(
    modelId=MODEL_ID,
    modelInput=model_input,
    outputDataConfig={"s3OutputDataConfig": {"s3Uri": f"s3://{S3_DESTINATION_BUCKET}"}}
)

invocation_arn = invocation["invocationArn"]
s3_prefix = invocation_arn.split('/')[-1]
s3_location = f"s3://{S3_DESTINATION_BUCKET}/{s3_prefix}"
print(f"\nS3 URI: {s3_location}")

while True:
    response = bedrock_runtime.get_async_invoke(
        invocationArn=invocation_arn
    )
    status = response["status"]
    print(f"Status: {status}")
    if status != "InProgress":
        break
    time.sleep(SLEEP_TIME)

if status == "Completed":
    print(f"\nVideo is ready at {s3_location}/output.mp4")
else:
    print(f"\nVideo generation status: {status}")

运行后脚本会自动输出目前运行的状态:

Status: InProgress
. . .
Status: Completed

Video is ready at s3://BUCKET/PREFIX/output.mp4

运行脚本几分钟后生得到“Completed”的字段则表示生成结束。脚本输出的视频的保存在Amazon S3中。随后我们使用亚马逊云科技命令行工具AWS CLI运行如下命令,下载生成的视频到本地。

aws s3 cp s3://BUCKET/PREFIX/output.mp4 ./output-from-text.mp4

模型输出:

打开视频后,可以看到生成的视频完全符合我们提示词中的定义:镜头逐渐拉近贝壳主体,并展现了温柔的海浪和夕阳的光影效果。

使用Amazon Nova Reel基于参考图片生成视频

为了使视频的生成的内容更精准、符合预期,我们可以为Amazon Nova Reel提供一张参考图像,在我们的例子中,我们使用下图作为参考图像:

系统提示词

我们这个场景下使用参考图片和提示词结合的形式生成视频,我们使用如下的提示词作为样例,在提示词中我们定义了摄像机移动的动作

drone view flying over a coastal landscape)
“无人机视角飞越沿海景观”

接下来我们通过以下Python脚本,将参考图像与文本提示结合起来,生成一段视频: 

import base64
import random
import time

import boto3

S3_DESTINATION_BUCKET = "<BUCKET>"
AWS_REGION = "us-east-1"
MODEL_ID = "amazon.nova-reel-v1:0"
SLEEP_TIME = 30
input_image_path = "seascape.png"
video_prompt = "drone view flying over a coastal landscape"

bedrock_runtime = boto3.client("bedrock-runtime", region_name=AWS_REGION)

# Load the input image as a Base64 string.
with open(input_image_path, "rb") as f:
    input_image_bytes = f.read()
    input_image_base64 = base64.b64encode(input_image_bytes).decode("utf-8")

model_input = {
    "taskType": "TEXT_VIDEO",
    "textToVideoParams": {
        "text": video_prompt,
        "images": [{ "format": "png", "source": { "bytes": input_image_base64 } }]
        },
    "videoGenerationConfig": {
        "durationSeconds": 6,
        "fps": 24,
        "dimension": "1280x720",
        "seed": random.randint(0, 2147483648)
    }
}

invocation = bedrock_runtime.start_async_invoke(
    modelId=MODEL_ID,
    modelInput=model_input,
    outputDataConfig={"s3OutputDataConfig": {"s3Uri": f"s3://{S3_DESTINATION_BUCKET}"}}
)

invocation_arn = invocation["invocationArn"]
s3_prefix = invocation_arn.split('/')[-1]
s3_location = f"s3://{S3_DESTINATION_BUCKET}/{s3_prefix}"

print(f"\nS3 URI: {s3_location}")

while True:
    response = bedrock_runtime.get_async_invoke(
        invocationArn=invocation_arn
    )
    status = response["status"]
    print(f"Status: {status}")
    if status != "InProgress":
        break
    time.sleep(SLEEP_TIME)
if status == "Completed":
    print(f"\nVideo is ready at {s3_location}/output.mp4")
else:
    print(f"\nVideo generation status: {status}")

在生成完成后,我门使用亚马逊云科技命令行工具AWS CLI,运行以下命令下载生成的视频到本地:

aws s3 cp s3://BUCKET/PREFIX/output.mp4 ./output-from-image.mp4

模型输出:

打开视频后发现,最终生成的视频完全符合我们提示词中的定义。镜头从参考图像的场景开始,随后向前移动,呈现了动态的沿海风景。

负责任地构建 AI

在安全与合规方面,Amazon Nova模型也做了很多配套的安全措施。亚马逊开发团队在模型开发过程中始终以AI的安全性、可靠性和可信赖为核心,为开发者提供了非常安全的使用体验和诸多安全控制选项,以支持开发者的各种使用场景。

目前Nova系列模型已全面内置了各项安全功能和内容审核功能,让开发者能够负责任地使用 AI。生成的每张图片和视频均包含数字水印,以帮助用户识别内容来源。此外Amazon Nova基础模型也扩展了安全策略来有效控制以下常见的AI生成内容的风险:

虚假信息传播:减少被AI生成内容误导的可能性。

儿童性虐待材料(CSAM):主动防止违法或不当内容的生成。

化学、生物、放射或核(CBRN)威胁:有效规避生成有潜在危险性的内容。

通过这些措施,Amazon Nova让开发者能够在享受强大功能的同时,确保 AI 的安全和负责任的使用。

Logo

科技之力与好奇之心,共建有温度的智能世界

更多推荐