このガイドでは、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 呼び出しが 1 回だけ必要なため、コスト効率が高くなりますが、抽出精度に差が生じる可能性があります。
まず、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()))
これが出力画像です。この場合、抽出の精度は満足できるものと思われます。
ローカルの安定した拡散環境をセットアップすると、API 呼び出しコストを削減できるため、ニーズに合ったオプションを自由に検討してください。
コードだけでこれを実現できるのは非常に便利です。
It’s exciting to witness the ongoing improvements in workflow efficiency.
Stable DiffusionのWeb APIを用いて画像上の人物はそのままに背景だけをAI生成で入れ替えてみた
以上が安定拡散Web APIを利用したAI生成で画像の背景のみを置き換えるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。