이 가이드에서는 Photoshop과 같은 이미지 편집 소프트웨어에 의존하지 않고 Python 코드만 사용하여 이미지의 배경을 바꾸는 방법을 보여줍니다. 목표는 AI가 생성한 배경에서 교체하면서 피사체를 그대로 유지하는 것입니다.
이 접근 방식은 혁명적이지는 않지만 공통된 요구 사항을 해결하므로 비슷한 요구 사항을 가진 사람들에게 도움이 되기를 바랍니다.
결과부터 살펴보겠습니다.
아래 표시된 입력 이미지에서 다음 출력 이미지가 생성되었습니다.
API 호출을 처리하기 위한 요청을 설치합니다.
$ pip install requests
다음과 같이 버전을 확인했습니다.
$ pip list | grep -e requests requests 2.31.0
백그라운드 생성에는 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를 사용하는 것입니다. 이 방법은 단 한 번의 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()))
출력 이미지는 다음과 같습니다. 이 경우 추출의 정확도는 만족스러울 것 같습니다.
로컬 Stable Diffusion 환경을 구축하면 API 호출 비용을 없앨 수 있으니 필요에 따라 해당 옵션을 자유롭게 탐색해 보세요.
코드만으로 이를 달성할 수 있다는 점은 매우 편리합니다.
It’s exciting to witness the ongoing improvements in workflow efficiency.
Stable Diffusion의 Web API를 사용해 이미지상의 인물은 그대로 배경만을 AI 생성으로 바꿔 봤다
위 내용은 Stable Diffusion Web API를 활용하여 이미지의 배경만 AI 생성으로 교체의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!