今回は、Impact Pack(Subpack含む)とComfyUI標準ノードを使ってモザイクを掛けるツールを作ってみます。
※検索すればモザイクを掛けてくれるカスタムノードは見つかりますが、敢えて自作する所にComfyUIを使う醍醐味?があると思いますw
最初に書いておきますが、このツールは 100%の検出は出来ません。
ツールを使用した後は、必ず自分の目で確認して必要な場合は手修正を行うなど、自己責任でお使い下さい。
なお、このツールを作成するにあたり、下記サイトを参考にさせて頂きました。
ありがとうございます。
hira1875様「ComfyUI自動モザイクのワークフロー2」
https://note.com/hira_1875/n/ncb00656a496a
※記事中のフローでは多くのカスタムノードが使われていましたが、標準ノードで代替できる物は標準ノードに変更しています。
また、モザイクのブロックサイズは、ちちぷいのガイドラインに沿う様に自動計算する様にしました。
合わせて、フローが出来るだけ簡潔に成るように心がけました。
今回作るのは、一つのファイルのみ処理できるツールです。
画像1:ツールの全体像です(分る人はこれだけで作れると思います)。
画像2:動作の例です、流石にあの手の画像は出せないので、顔を検出する様に設定してますw
画像8~9に元絵とモザイク画像を載せておきます。
-----------------------------------------------------------------
以降で各部の説明をしていきます。
画像3:画像読み込みと、モザイクサイズを指定する部分です。
「画像を読み込む」と「整数」はComfyUI標準のノードです。
「整数」には画像の長辺の何分の1にするかを入力します。
ちちぷいのガイドライン↓では、長辺の1/100pix以上にする様に指定されていますので、100を設定しています。
https://www.chichi-pui.com/R18-guideline/
※この値を小さくするとブロックサイズが大きくなります。
-----------------------------------------------------------------
画像4:モザイク画像を生成する部分です。
「ImpactMinMax」は Impact Pack
「画像サイズ取得」「数式」「画像を拡大」「画像プレビュー」はComfyUI標準のノードです。
※モザイク画像の作成原理
画像を一度縮小し、元のサイズに戻すと画像がブロック化してモザイク状態になります。
「画像を読み込む」の画像から画像のサイズと長辺の値を取得しブロックサイズを計算します。
※この際、端数を切り捨てると1/100以上に成らないので、切り上げる必要があります。
例.1536pixの場合、15.36pixに成りますが、端数を切り上げて 16pixにします。
切り上げるための計算式:ceil(a / b) *a:長辺のpix、b:分割数(100)
※ブロックサイズの下限(4pix)のチェックは行っていませんが、追加する事は可能です。
ブロックサイズを元に縮小する際の width と height を計算します。
「画像を拡大」を2段階で縮小、元のサイズに戻す作業を行っています。
「画像をプレビュー」で結果を表示させています。
-----------------------------------------------------------------
画僧5:モザイクを掛る部分を検出する部分です。
「UltralyticsDetectorProvider」は Impact Subpack
「SEGM Detector (SEGS)」「SEGS to MASK (combined)」は Impact Pack
「MaskPreview」はComfyUI標準のノードです。
「UltralyticsDetectorProvider」「SEGM Detector (SEGS)」はDetailerで使ったので、大丈夫ですねw
※「SEGM Detector (SEGS)」の入力項目について
「labels」には、認識させる場所を指定します。
nipples, pussy, anus, penis, testicles, x-ray, cross-section が指定できます。
「dilation」には検出サイスを広げるpix数を指定をします。
このツールでは、ブロックサイスを入力して、1ブロック分広げています。
Detailerでは「SEGM Detector (SEGS)」の出力をDetailerノードに渡しましたが、今回はマスクに変換します。
※使用するモデルはGoogleや↓から探してみて下さい。
Anime NSFW Detection / ADetailer All-in-One
https://civitai.com/models/1313556/anime-nsfw-detection-adetailer-all-in-one
インストール先はDetailerの時と同じです。
-----------------------------------------------------------------
画像6:元画像とマスク・モザイク画像を合成する部分です。
「Gaussian Blur Mask」は Impact Subpack
「マスクされた画像合成」「MaskPreview」はComfyUI標準のノードです。
「Gaussian Blur Mask」ではマスクの周辺をぼかす指定ですので、無くても問題ありません。
「マスクされた画像合成」で最終的に画像を作成します。
宛先:元画像(画像3からの出力)
ソース:モザイク画像(画像4からの出力)
マスク:検出箇所のマスク(画像5からの出力)
-----------------------------------------------------------------
画像7:最終画像のプレビューと保存部分です。
「画像プレビュー」「画像ほ保存」はComfyUI標準のノードです。
これは特に説明は要らないですねw
-----------------------------------------------------------------
ここまでで、ツールのメイン部分が出来ましたので、後は自分なりに機能を拡張してみてください。
拡張のポイント
・検出率を上げる(今の状態よりは多少良く成る程度は上がりますw)
・複数ファイルを処理する…私は複数ファイルと1ファイルの処理を切り替えて使える様にしています。
等