見出し画像

【ComfyUI】特定のオブジェクトのみを抽出する

今回は、画像の中で必要なオブジェクトのみを残し、それ以外を削除する方法を試したいと思います。以下の画像のように人、PC、ノート、机のみを抽出します。


1. 準備

カスタムノード

  • ComfyUI Segment Anything

    • ComfyUIでSegment Anythingを利用するためのカスタムノード

モデル

Segment Anythingで使用するGroundingDinoのモデルとコンフィグファイルを以下からダウンロードし、ConfigUI/models/grounding-dinoディレクトリに格納してください。(grounding-dinoディレクトリがない場合は、新規作成してください)

GroundingDinoのダウンロード箇所

こちらもSegment Anythingで使用するSAM (Segment Anything Model) を以下からダウンロードし、ComfyUI/models/samディレクトリに格納してください。(samディレクトリがない場合は、新規作成してください)

SAMのダウンロード箇所

2. ノード構成

以下がノードの全体構成になります。

ノードの全体構成

以下がSegmentの実施箇所です。SAMModelLoaderでSAMの読み込み、GroundingDinoModelLoaderでGroundingDinoモデルの読み込みを行います。その結果をGroundingDinoSAMSegmentに入力します。
今回は、SAMにsam_hq_vit_h、GroundingDinoにGroundingDINO_SwinBを選択しました。(おそらく選択できるモデルの中で最も性能が良いモデル)

抽出対象は、GroundingDinoSAMSegmentpromptにカンマ区切りで入力します。今回は、写真内のすべての物を対象にしたかったため、objectsと入力しました。thresholdは、調整した結果、0.02が最も良い結果が出たので、0.02を設定しています。

Segment実行部

GroundingDinoSAMSegmentの結果を以下の箇所で表示しています。MASKは、Convert Mask to Imageでマスクから画像に変換しています。

Segment結果表示部

GroundingDinoSAMSegmentで出力される画像は、マスクして抽出された箇所以外(今回では背景)が透明になっていないので、以下で透明にする処理をしています。
Join Image with Alphaは、マスクされた箇所(白)を透明にするので、InvertMaskでマスクを反転させてから、Join Image with Alphaに入力することで、目的の画像を出力できます。

画像の透明化

3. 生成結果

以下が生成結果です。少しオブジェクトの周りがジャギーになってしまっていますが、目的のオブジェクトを抽出できています。

生成結果

この記事でご紹介したAI技術の応用方法について、もっと詳しく知りたい方や、実際に自社のビジネスにAIを導入したいとお考えの方、私たちは、企業のAI導入をサポートするAIコンサルティングサービスを提供しています。以下のようなニーズにお応えします。

  • AIを使った業務効率化の実現

  • データ分析に基づくビジネス戦略の立案

  • AI技術の導入から運用までの全面サポート

  • 専門家によるカスタマイズされたAIソリューションの提案

初回相談無料ですので、お気軽にご相談ください。以下のリンクからお問い合わせください。


この記事が気に入ったらサポートをしてみませんか?