首頁 > 後端開發 > Python教學 > 使用穩定擴散 Web API 透過 AI 產生僅替換影像的背景

使用穩定擴散 Web API 透過 AI 產生僅替換影像的背景

Patricia Arquette
發布: 2024-11-10 02:52:02
原創
859 人瀏覽過

介紹

本指南示範如何僅使用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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板