当前位置: 首页 > article >正文

玩转Amazon Bedrock基础模型:解锁图像风格混搭的无限可能

介绍

什么是Amazon Bedrock

  • 亚马逊 Bedrock 是亚马逊网络服务(AWS)的旗舰产品,是一项完全托管的服务,旨在推动各行业对生成性人工智能(AI)的采用。其功能的核心是提供由顶级 AI 公司如 AI21 Labs、Anthropic、Cohere、Meta、Mistral AI、Stability AI 和亚马逊自身开发的多样化基础模型(FMs)。这些 FMs 作为各种 AI 应用的基石,每个模型都针对特定的用例和行业需求进行了优化。
  • 亚马逊 Bedrock 的独特之处在于其通过单一 API 对模型访问的统一方法。这简化了开发过程,使用户能够无缝地与多个 FMs 进行交互,而无需进行大量的代码修改。此外,该服务提供强大的定制能力,使用户能够根据特定领域或任务微调预训练模型,从而提高性能和准确性。

架构图

 

实验步骤

1.验证对 Bedrock 基础模型的访问权限

1. 确保您位于美国东部(北弗吉尼亚)us-east-1 区域。

2. 通过点击顶部的服务 菜单,导航到基岩 ,然后点击基岩

3. 点击 开始 按钮。

4. 在 Bedrock 页面的左侧菜单中选择 模型访问 

5. 在模型访问页面验证以下Amazon (7)模型的访问权限已授予

 

 

2.创建一个 SageMaker 笔记本实例

1. 确保您位于美国东部(北弗吉尼亚)us-east-1 区域。在顶部搜索栏中搜索Amazon SageMaker并导航到SageMaker服务。

2. 在SageMaker仪表板上,从左侧菜单中选择Notebook,然后选择 Notebook 实例。

3. 点击创建笔记本实例按钮。

4. 对于笔记本实例

  • 名称:SageMakerInstance
  • 笔记本实例类型:ml.t2.medium
  • 平台标识符:Amazon Linux 2, Jupyter Lab 3 
  • 对于 IAM 角色选择:SageMakerInstanceRole 
  • 将其余所有设置保持为默认。
  • 点击 创建笔记本实例 按钮。

 

5. 等待状态变为“InService”,因为笔记本实例的创建可能需要 5 分钟。

6. 在操作部分点击 打开 Jupyter 以访问 Notebook 实例。

 

3.图像风格融合

在这一步中,我们将用一只猫替换演示狗图像中的狗,以了解如何使用 Amazon Bedrock 服务 替换图像中的对象

1. 下载 image1.png 和 image2.png

 注意:确保文件名为image1.png image2.png

2. 在Jupyter中点击上传按钮并选择您刚刚下载的图片

3. 点击上传按钮

4. 在 JupyterLab 中点击 新建 按钮,并从下拉框中选择 conda_python3 笔记本。

5. 点击 文件重命名 按钮,将笔记本重命名为 Whiz_blend_image_style

6. 请将以下代码粘贴到 Jupyter Notebook 中提供的代码块中以导入所需的库。

import os
import boto3
import json
import base64
from io import BytesIO
from random import randint
from IPython.display import display, Image
import ipywidgets as widgets

 

7. 通过粘贴下面的代码配置 AWS 凭证和区域。

  • 将 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 替换为 自己的值。
  • 输入 AWS 区域为 us-east-1
    # Set AWS credentials and region
    os.environ["AWS_ACCESS_KEY_ID"] = "AWS_ACCESS_KEY_ID"
    os.environ["AWS_SECRET_ACCESS_KEY"] = "AWS_SECRET_ACCESS_KEY"
    os.environ["AWS_REGION"] = "AWS_REGION"
    

8. 粘贴以下代码以定义 Titan 模型 API 调用的辅助函数。 

# Get a BytesIO object from file bytes
def get_bytesio_from_bytes(image_bytes):
    image_io = BytesIO(image_bytes)
    return image_io

# Get a base64-encoded string from file bytes
def get_base64_from_bytes(image_bytes):
    resized_io = get_bytesio_from_bytes(image_bytes)
    img_str = base64.b64encode(resized_io.getvalue()).decode("utf-8")
    return img_str

# Load the bytes from a file on disk
def get_bytes_from_file(file_path):
    with open(file_path, "rb") as image_file:
        file_bytes = image_file.read()
    return file_bytes

# Get the stringified request body for the InvokeModel API call
def get_titan_image_variation_request_body(prompt, similarity, image_bytes1=None, image_bytes2=None):
    input_image1_base64 = get_base64_from_bytes(image_bytes1)
    input_image2_base64 = get_base64_from_bytes(image_bytes2)

    body = {  # Create the JSON payload to pass to the InvokeModel API
        "taskType": "IMAGE_VARIATION",
        "imageVariationParams": {
            "images": [input_image1_base64, input_image2_base64],
            "text": prompt,
            "similarityStrength": similarity,
        },
        "imageGenerationConfig": {
            "numberOfImages": 1,  # Number of variations to generate
            "quality": "premium",  # Allowed values are "standard" or "premium"
            "height": 512,
            "width": 512,
            "cfgScale": 8.0,
            "seed": randint(0, 100000),  # Use a random seed
        },
    }

    return json.dumps(body)

# Get a BytesIO object from the Titan Image Generator response
def get_titan_response_image(response):
    response = json.loads(response['body'].read())
    images = response.get('images')
    image_data = base64.b64decode(images[0])
    return BytesIO(image_data)

# Generate an image using Amazon Titan Image Generator
def get_image_from_model(prompt_content, similarity_strength, image_bytes1, image_bytes2):
    session = boto3.Session()
    bedrock = session.client(service_name='bedrock-runtime')  # Creates a Bedrock client

    body = get_titan_image_variation_request_body(prompt_content, similarity_strength, image_bytes1, image_bytes2)

    response = bedrock.invoke_model(
        body=body,
        modelId="amazon.titan-image-generator-v1",
        contentType="application/json",
        accept="application/json"
    )

    output = get_titan_response_image(response)
    return output

9. 粘贴以下代码以创建提示和前端。

# Paths to the input images
image_path1 = "image1.png"
image_path2 = "image2.png"

# Widgets for text input
prompt_text = widgets.Text(
    value="a cat using art style",
    description="Prompt:"
)

# Widget for slider input
similarity_strength = widgets.FloatSlider(
    value=0.9,
    min=0.2,
    max=1.0,
    step=0.1,
    description="Similarity:"
)

# Button for generating the image
generate_button = widgets.Button(description="Generate")

# Output widget to display images
output = widgets.Output()

# Display widgets
display(prompt_text)
display(similarity_strength)
display(generate_button)
display(output)

# Function to handle button click
def on_generate_button_clicked(b):
    with output:
        output.clear_output()

        image_bytes1 = get_bytes_from_file(image_path1)
        image_bytes2 = get_bytes_from_file(image_path2)

        generated_image = get_image_from_model(
            prompt_content=prompt_text.value,
            similarity_strength=float(similarity_strength.value),
            image_bytes1=image_bytes1,
            image_bytes2=image_bytes2,
        )

        display(Image(generated_image.read()))

# Attach the click event handler to the button
generate_button.on_click(on_generate_button_clicked)

10. 点击 运行 按钮以运行代码。

注意:提示是 一只使用艺术风格的猫(通过融合图像 1 和图像 2 的艺术风格生成图像),而相似度让你决定想要融合的图像艺术风格的百分比。 

11. 点击生成按钮。

 

12. 执行成功后,您将收到输出图像

你可以注意到两种图像风格融合成了一种。 

你知道吗?
使用 Titan 图像生成器模型,您可以通过提供两张图像并指定期望结果的提示来创建惊人的视觉艺术。这种创新的方法利用先进的人工智能无缝融合两张图像中的元素,产生全新且富有创意的艺术作品。无论您是寻找灵感的艺术家,还是探索人工智能在艺术中可能性的开发者,Bedrock 都为您的创作工作提供了令人兴奋的工具集。 

 总结

通过本次实践,我们深入体验了 Amazon Bedrock 和 Amazon SageMaker 的强大功能。借助 Amazon Bedrock 提供的基础模型,我们实现了图像风格的融合,为图像创作提供了新的思路和方法;而 Amazon SageMaker 的笔记本实例则为我们提供了便捷的开发环境,让代码的编写、调试与运行一气呵成。

在实际操作过程中,从登录 AWS 管理控制台、验证模型访问权限,到创建 SageMaker Notebook 进行图像风格混合,每个步骤都紧密相连,环环相扣。这不仅考验了我们对 AWS 服务的熟悉程度,也提升了我们在机器学习和图像领域的实践能力。

希望本文能为各位开发者在使用 AWS 服务进行图像相关的开发工作时提供有益的参考。在未来,随着技术的不断发展,相信 Amazon Bedrock 和 Amazon SageMaker 还会带来更多创新功能和应用场景。让我们持续关注,积极探索,在人工智能与云计算的领域中不断挖掘新的可能性,创造出更多优秀的作品和应用。


http://www.kler.cn/a/534859.html

相关文章:

  • 在Debian 12上安装VNC服务器
  • HTTP和HTTPS协议详解
  • 云原生周刊:K8s引领潮流
  • 四.4 Redis 五大数据类型/结构的详细说明/详细使用( zset 有序集合数据类型详解和使用)
  • 【2025】camunda API接口介绍以及REST接口使用(3)
  • 中国通信企业协会 通信网络安全服务能力评定 风险评估二级要求准则
  • 【论文复现】基于适应度-距离平衡的自适应引导差分进化算法用于考虑可再生能源的安全约束最优潮流问题
  • 【Go语言快速上手】第一部分:Go 语言基础
  • Angular-hello world
  • 青少年编程与数学 02-008 Pyhon语言编程基础 22课题、类的定义和使用
  • C++【深入 STL--list 之 迭代器与反向迭代器】
  • 【鸿蒙HarmonyOS Next实战开发】视频压缩库VideoCompressor
  • Vue混入(Mixins)与插件开发深度解析
  • 常用抓包工具tcpdump、Fiddler、Charles、Wireshark 和 Sniffmaster 下载地址
  • 使用 CMake 自动管理 C/C++ 项目
  • C语言程序设计P6-5【应用指针进行程序设计 | 第五节】——指针与函数
  • OCR--光学字符识别
  • WebSocket推送数据快,条数多导致前端卡顿问题解决
  • 《Linux基础优化与常用软件包》
  • 【大数据技术】词频统计样例(hadoop+mapreduce+yarn)
  • Vue 3 30天精进之旅:Day 16 - 组合式API进阶
  • 用DeepSeek做网络系统规划方案
  • C++编程语言实现某一个具体算法
  • 数据库迁移后在密码不知道的情况下重建DBLINK
  • 游戏引擎学习第89天
  • 大模型 RAG 优化之预生成qa对