首页 > 后端开发 > Python教程 > 使用稳定扩散 Web API 通过 AI 生成仅替换图像的背景

使用稳定扩散 Web API 通过 AI 生成仅替换图像的背景

Patricia Arquette
发布: 2024-11-10 02:52:02
原创
879 人浏览过

介绍

本指南演示了如何仅使用Python代码替换图像的背景,而不依赖于Photoshop等图像编辑软件。目标是在交换人工智能生成的背景时保持主体完整。

虽然这种方法可能不是革命性的,但它解决了一个常见的需求,所以我希望它对那些有类似需求的人有所帮助。

输入和输出图像

让我们从结果开始。

以下输出图像是根据下面所示的输入图像生成的。

输入图像

Replacing Only the Background of an Image with AI Generation Using the Stable Diffusion Web API

输出图像

Replacing Only the Background of an Image with AI Generation Using the Stable Diffusion Web API

图书馆

安装请求来处理 API 调用。

$ pip install requests
登录后复制

我验证版本如下:

$ pip list | grep -e requests
requests                  2.31.0
登录后复制

API密钥

对于后台生成,我们将使用 Stability AI 的 Web API。

要访问此 API,您需要从其开发者平台获取 API 密钥。有关定价,请参阅定价页面。

为了确保密钥安全,请将其保存为环境变量,而不是将其硬编码到代码中。

在我的环境中,我使用 zshrc 设置文件。

$ open ~/.zshrc
登录后复制

我将密钥保存在名称 STABILITY_API_KEY 下。

export STABILITY_API_KEY=your_api_key_here
登录后复制

代码

在这里,我们使用删除背景 API 来隔离主题。然后,我们将提取的图像传递给 Inpaint API 以创建新的背景。

使用的提示是“大玻璃窗,可以看到后面的大都市

import os
import requests

# File paths
input_path = './input.png'  # Original image
mask_path = './mask.png'  # Mask image (temporarily generated)
output_path = './output.png'  # Output image

# Check for API Key
api_key = os.getenv("STABILITY_API_KEY")
if api_key is None:
    raise Exception("Missing Stability API key.")

headers = {
    "Accept": "image/*",
    "Authorization": f"Bearer {api_key}"
}

# Call Remove Background API
response = requests.post(
    f"https://api.stability.ai/v2beta/stable-image/edit/remove-background",
    headers=headers,
    files={
        "image": open(input_path, "rb")
    },
    data={
        "output_format": "png"
    },
)

# Save mask image
if response.status_code == 200:
    with open(mask_path, 'wb') as file:
        file.write(response.content)
else:
    raise Exception(str(response.json()))

# Call Inpaint API
response = requests.post(
    "https://api.stability.ai/v2beta/stable-image/edit/inpaint",
    headers=headers,
    files={
        "image": open(mask_path, "rb"),
    },
    data={
        "prompt": "Large glass windows with a view of the metropolis behind",
        "output_format": "png",
        "grow_mask": 0,  # Disable blurring around the mask
    },
)

# Delete mask image
os.remove(mask_path)

# Save output image
if response.status_code == 200:
    with open(output_path, "wb") as file:
        file.write(response.content)
else:
    raise Exception(str(response.json()))
登录后复制

使用 rembg

背景去除的另一种方法是使用 rembg。这种方法只需要调用一次API,成本效益更高,但可能会导致提取精度的差异。

首先,安装rembg。

$ pip install rembg
登录后复制

我验证版本如下:

$ pip list | grep -e rembg
rembg                     2.0.59
登录后复制

这是此方法的代码:

from rembg import remove
import os
import requests

# File paths
input_path = './input.png'  # Input image path
mask_path = './mask.png'  # Mask image path (temporarily generated)
output_path = './output.png'  # Output image path

# Generate mask image with background removed
with open(input_path, 'rb') as i:
    with open(mask_path, 'wb') as o:
        input_image = i.read()
        mask_image = remove(input_image)
        o.write(mask_image)

# Check for API Key
api_key = os.getenv("STABILITY_API_KEY")
if api_key is None:
    raise Exception("Missing Stability API key.")

# Call Inpaint API
response = requests.post(
    "https://api.stability.ai/v2beta/stable-image/edit/inpaint",
    headers={
        "Accept": "image/*",
        "Authorization": f"Bearer {api_key}"
    },
    files={
        "image": open(mask_path, "rb"),
    },
    data={
        "prompt": "Large glass windows with a view of the metropolis behind",
        "output_format": "png",
        "grow_mask": 0,
    },
)

# Delete mask image
os.remove(mask_path)

# Save output image
if response.status_code == 200:
    with open(output_path, "wb") as file:
        file.write(response.content)
else:
    raise Exception(str(response.json()))
登录后复制

这是输出图像。在这种情况下,提取的准确性似乎令人满意。

Replacing Only the Background of an Image with AI Generation Using the Stable Diffusion Web API

如果您设置本地稳定扩散环境,则可以消除 API 调用成本,因此,如果该选项适合您的需求,请随意探索。

结论

仅通过代码即可实现这一点,非常方便。

很高兴见证工作流程效率的持续改进。

日本原创文章

我使用 Stable Diffusion 的 Web API 仅用 AI 生成替换背景,同时保留图像中的人物原样。

以上是使用稳定扩散 Web API 通过 AI 生成仅替换图像的背景的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板