Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Menggantikan Hanya Latar Belakang Imej dengan Penjanaan AI Menggunakan API Web Resapan Stabil

Menggantikan Hanya Latar Belakang Imej dengan Penjanaan AI Menggunakan API Web Resapan Stabil

Patricia Arquette
Patricia Arquetteasal
2024-11-10 02:52:02844semak imbas

pengenalan

Panduan ini menunjukkan cara menggantikan latar belakang imej menggunakan kod Python sahaja, tanpa bergantung pada perisian penyuntingan imej seperti Photoshop. Matlamatnya adalah untuk memastikan subjek tetap utuh sambil bertukar-tukar dalam latar belakang yang dijana AI.

Walaupun pendekatan ini mungkin tidak revolusioner, ia menangani keperluan biasa, jadi saya harap ia akan membantu mereka yang mempunyai keperluan yang serupa.

Imej Input dan Output

Mari kita mulakan dengan keputusan.

Imej output berikut dijana daripada imej input yang ditunjukkan di bawah.

Imej Input

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

Imej Keluaran

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

Perpustakaan

Pasang permintaan untuk mengendalikan panggilan API.

$ pip install requests

Saya mengesahkan versi seperti berikut:

$ pip list | grep -e requests
requests                  2.31.0

Kunci API

Untuk penjanaan latar belakang, kami akan menggunakan API Web Stability AI.

Untuk mengakses API ini, anda perlu mendapatkan Kunci API daripada Platform Pembangun mereka. Untuk harga, rujuk halaman Harga.

Untuk memastikan kunci anda selamat, simpannya sebagai pembolehubah persekitaran dan bukannya pengekodan keras dalam kod anda.

Dalam persekitaran saya, saya menggunakan fail tetapan zshrc.

$ open ~/.zshrc

Saya menyimpan kunci di bawah nama KESTABILAN_API_KEY.

export STABILITY_API_KEY=your_api_key_here

Kod

Di sini, kami menggunakan API Alih Keluar Latar Belakang untuk mengasingkan subjek. Kami kemudian menghantar imej yang diekstrak ke Inpaint API untuk mencipta latar belakang baharu.

Gesaan yang digunakan ialah "Tingkap kaca besar dengan pemandangan kota metropolis di belakang"

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()))

Menggunakan rembg

Satu lagi pendekatan untuk mengalih keluar latar belakang ialah menggunakan rembg. Kaedah ini hanya memerlukan satu panggilan API, menjadikannya lebih menjimatkan kos, walaupun ia mungkin menyebabkan perbezaan dalam ketepatan pengekstrakan.

Mula-mula, pasang rembg.

$ pip install rembg

Saya mengesahkan versi seperti berikut:

$ pip list | grep -e rembg
rembg                     2.0.59

Berikut ialah kod untuk pendekatan ini:

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()))

Berikut ialah imej output. Dalam kes ini, ketepatan pengekstrakan nampaknya memuaskan.

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

Jika anda menyediakan persekitaran Stable Diffusion setempat, anda boleh menghapuskan kos panggilan API, jadi jangan ragu untuk meneroka pilihan itu jika ia sesuai dengan keperluan anda.

Kesimpulan

Mampu mencapai ini melalui kod sahaja adalah sangat mudah.

Sangat menarik untuk menyaksikan peningkatan berterusan dalam kecekapan aliran kerja.

Artikel Asal Jepun

Saya menggunakan API Web Stable Diffusion untuk menggantikan hanya latar belakang dengan penjanaan AI sambil membiarkan orang dalam imej seperti sedia ada.

Atas ialah kandungan terperinci Menggantikan Hanya Latar Belakang Imej dengan Penjanaan AI Menggunakan API Web Resapan Stabil. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn