>  기사  >  백엔드 개발  >  Stable Diffusion Web API를 활용하여 이미지의 배경만 AI 생성으로 교체

Stable Diffusion Web API를 활용하여 이미지의 배경만 AI 생성으로 교체

Patricia Arquette
Patricia Arquette원래의
2024-11-10 02:52:02852검색

소개

이 가이드에서는 Photoshop과 같은 이미지 편집 소프트웨어에 의존하지 않고 Python 코드만 사용하여 이미지의 배경을 바꾸는 방법을 보여줍니다. 목표는 AI가 생성한 배경에서 교체하면서 피사체를 그대로 유지하는 것입니다.

이 접근 방식은 혁명적이지는 않지만 공통된 요구 사항을 해결하므로 비슷한 요구 사항을 가진 사람들에게 도움이 되기를 바랍니다.

입력 및 출력 이미지

결과부터 살펴보겠습니다.

아래 표시된 입력 이미지에서 다음 출력 이미지가 생성되었습니다.

입력 이미지

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

로컬 Stable Diffusion 환경을 구축하면 API 호출 비용을 없앨 수 있으니 필요에 따라 해당 옵션을 자유롭게 탐색해 보세요.

결론

코드만으로 이를 달성할 수 있다는 점은 매우 편리합니다.

It’s exciting to witness the ongoing improvements in workflow efficiency.

Original Japanese Article

Stable Diffusion의 Web API를 사용해 이미지상의 인물은 그대로 배경만을 AI 생성으로 바꿔 봤다

위 내용은 Stable Diffusion Web API를 활용하여 이미지의 배경만 AI 생성으로 교체의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.