ComfyUIとImpact Packで画像から人物を簡単抽出!マスク生成からInpaintまで

3分で読了
更新日
Progress 15 / 15
目次

この記事ではComfyUIとその拡張機能Impact Packを使用して、画像から自動でマスク生成を行う方法について紹介します。簡単のため画像から人物を抽出して処理を行う方法にフォーカスを置いて説明しますが、使用するモデルを変えれば、人物の抽出以外にも使える方法のため、そういったタスクに興味がある方はぜひ読んでいってください。

例えば以下のような用途で使えます。

  • 画像の一部や背景のみトリミングして他で使いたい
  • 背景のみinpaintで入れ替えたい
  • 画像の一部のみinpaintで描き換えたい(消したい)

使用する拡張

GitHub - ltdrdata/ComfyUI-Impact-Pack: Custom nodes pack for ComfyUI This custom node helps to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, and more.

Custom nodes pack for ComfyUI This custom node helps to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, and more. - ltdrdata/ComfyUI-Impact-Pack

github.com
GitHub - ltdrdata/ComfyUI-Inspire-Pack: This repository offers various extension nodes for ComfyUI. Nodes here have different characteristics compared to those in the ComfyUI Impact Pack. The Impact Pack has become too large now...

This repository offers various extension nodes for ComfyUI. Nodes here have different characteristics compared to those in the ComfyUI Impact Pack. The Impact Pack has become too large now... - ltd...

github.com

ワークフロー

以下の流れで処理します。

  1. 物体検出モデル(YOLO)で画像内の人物すべてを抽出
  2. 確信度の最も高い(画像内でメインとなる)人物のみ抜き出す
  3. Segment Anythingでセマンティックセグメンテーション
  4. 最も面積が大きいマスクのみ抜き出す(小さいドットを除く)

マスクを生成したい画像の性質によってフィルタリング方法は変わるかもしれませんが、人物が一人の場合は以下で問題なく生成できるはずです。複数人いたりする場合はSEGS Filterなどの値を調整します。

ワークフロー
ワークフロー

マスク生成結果

マスク生成結果
マスク生成結果

(左から)元画像、検出された物体、一番確信度の高い物体(画像の中でメインとして映っている人物)、セグメンテーションで得られたマスク、元画像とマスクを重ねた画像

少しぼやけがありますが、最近Metaから発表されたSAM2に入れ替えたらもう少し精度が良くなるかもしれません。

背景をinpaintする

このマスクを使って実際に背景を書き換えてみます。現状人物が描き換え対象になっている状態なのでマスクの反転をしてからinpaintします。

Detailerで背景を変えるワークフロー
Detailerで背景を変えるワークフロー

※左上はマスク生成のワークフローにつながっています

背景の描き替え
背景の描き替え

人物をinpaintする

人物をinpaintする場合は人物以外が生成されることを防ぐためにControlNetを組み込むのがおすすめです(なくても問題ないが、失敗を減らすため)。

Detailerで人物を変えるワークフロー
Detailerで人物を変えるワークフロー

※左上はマスク生成のワークフローにつながっています

ControlNetの前処理でよく使用されるControlNet Auxiliary Preprocessorsを使用したい場合は以下のようにcontrol_imageに入力すれば使用可能です。

ControlNet Auxiliary Preprocessorsを使用する場合のワークフロー
ControlNet Auxiliary Preprocessorsを使用する場合のワークフロー
人物の書き換え(Segmentation)
人物の書き換え(Segmentation)
人物の書き換え(Anime LineArt)
人物の書き換え(Anime LineArt)

最後に

いかがだったでしょうか?人物だけでなく顔/手/服/肌など別の物体をターゲットとして検出できるモデルなどもあるため、人物に限らず物体を抽出したい場合はこの方法を検討してみると良いでしょう。

ComfyUI Managerをインストール済の場合は以下のようにModel Managerから学習済モデルをダウンロード可能です。

Model Manager
Model Manager