以下は、Pythonの「rembg」ライブラリを使用して、生成した画像から背景を削除するサンプルコードです。
ComfyUIで画像生成した後、生成画像(例:generated_image.png
)をこのスクリプトで処理することで、背景を除去した画像(例:generated_image_no_background.png
)を出力できます。
なお、以下のコードはコピペでそのまま動作確認できるようになっています。
最初にこちらの依存ライブラリをインストールしてください。
1 |
pip install rembg pillow |
続いてがコードサンプル。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
import io from PIL import Image from rembg import remove class RemoveBackgroundNode: @classmethod def INPUT_TYPES(cls): return {"required": {"input_image": "IMAGE"}} RETURN_TYPES = ("IMAGE",) FUNCTION = "remove_background" CATEGORY = "Image Processing" def remove_background(self, input_image): # PIL画像をPNG形式のバイト列に変換 buffered = io.BytesIO() input_image.save(buffered, format="PNG") input_bytes = buffered.getvalue() # rembgライブラリで背景除去処理を実行 output_bytes = remove(input_bytes) # バイト列からPIL画像を生成(RGBAに変換して透明度情報を保持) output_image = Image.open(io.BytesIO(output_bytes)).convert("RGBA") return (output_image,) NODE_CLASS_MAPPINGS = { "RemoveBackgroundNode": RemoveBackgroundNode } |
remove_background_node.pyという名前で保存し、custom_nodesディレクトリに配置します。
(例:ComfyUI/custom_nodes/remove_background_node.py)
このノードは一度生成された画像から背景部分を除去して透過にするという処理を行っています。画像生成のタイミングで背景処理まで出来るのが一番ですが、StableDiffusionは通常、透明度情報を持つ画像を直接生成する設計ではなく、そういった画像のデータセットでの学習モデルというのも一般的ではありません。
コメント