本文最后更新于 2024-08-14,

若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益, 请联系我 删除。

本站只有Telegram群组为唯一交流群组, 点击加入

文章内容有误?申请成为本站文章修订者或作者? 向站长提出申请


本篇教程为第三篇——肤色与修复,主要介绍如何在comfyui中实现蒙版肤色自动提取,以及修复局部重绘后的图像细节。

第一篇——基础篇:https://poiblog.com/archives/KcnfGQpQ

第二篇——自动识别:https://poiblog.com/archives/UGD2qaQ5

终极版:https://poiblog.com/archives/aceWNvQG


肤色提取

在之前的工作流中,皮肤蒙版的颜色需要我们手动输入,那么如何实现肤色自动提取?

通常情况下我们手动提取肤色需要借助额外的软件,对人像中皮肤裸露部位进行颜色吸取,因此我首先想到的是靠算法对图像中的皮肤像素取一个平均或者中位数。但如何让模型识别出皮肤像素呢?

记得在之前的工作流中,我们得到了人物的面部遮罩,虽然不能保证万无一失,但我们导入的图片中人物面部大概率是裸露的~~。如此一来我们可以对面部遮罩内的像素进行进一步筛选,我的方法是调用WAS节点的{选择颜色},先筛选出大致肤色颜色范围,然后对这些像素的颜色取均值,如图

1715372518944.webp

这里我对节点进行了一些修改,让节点能够直接输出RGB颜色数值,同时我又对像素添加了可调节选项,使得最终输出的颜色只取red值最高的n%(节点修改文件我会在后面分享),最终的筛选结果参考如下

1715372530467.webp

除此以外如果你还有其他更可靠的自动提取肤色的方法,欢迎分享。

修复

即便你的设置再合理,在局部重绘之后图像仍旧大概率会出现颜色与纹理与遮罩外原图不匹配,甚至有残留色块,因此一个全局重绘以修复图像是不可或缺的,一个最简单的方法就是将图像以低重绘幅度再采样一遍(不要直接传递latent,之前的噪波遮罩还在)

1715372570562.webp

如此一来虽然会细微改变原图,但可以有效修复重绘细节。

高清修复

如果你原先导入的图像分辨率很高,但经过缩放后丢失了大量细节,你或许想将重绘后的图像再放大回原来的分辨率而不是简单的修复。

你可能会想到使用各种图像高清放大插件,但是直接对重绘后图像进行高清放大只会增加不合理的细节,最终结果跟原图想去甚远。

因此,你可以将局部重绘区域经过简单缩放后再与原图合并,再对合并后图像进行全局重绘,这样有效避免了图像放大给非重绘区域带来不必要细节。如图,我用{SD放大(不放大)}节点对合并后图像进行了分块重绘,以避免显存爆炸,同时还串联了新的controlnet节点保证一致性(不要用controlnet tiletile可能会将要修复的错误色块保留下来)。

1715372592263.webp当然,如果你的原图实在太高清(>4K),可能不太适合直接放大回原分辨率,除了过于耗时之外,分块放大时每个小分块里可能没有有半点图像细节,模型压根不知道要采样什么东西。

值得注意的是我在全局修复重绘这一块也使用了controlnet inpaint,它的作用是尽量保证遮罩外区域不变,如此一来即便是全局重绘,也不会过多改变包括人物面部在内的区域。

首先,inpainting大模型与controlnet inpaint功能兼容性很糟糕,两者一起使用可能导致图像崩坏。

在前面的局部重绘部分,你可以不依靠controlnet inpaint而是利用inpainting大模型达到近似效果,但是在全局重绘这里只能通过controlnet inpaint来控制不同区域的重绘幅度,这也是为什么我在基础篇教程里提到不建议使用inpainting后缀的大模型来进行局部重绘。

如此,我们终于实现了完整版的“一键AI去衣”工作流

1715372641542.webp

工作流分享

无肤色提取:https://mega.nz/file/gOF3ARIS#qxiNErVqHbDiC-skRLF5v_zzr7GTrHeKJ98Wbz6ZHKY

完整版(需要应用下面节点修改):https://mega.nz/file/0CEVUTbJ#5L0IJdjBNsnl7LTQPfqYifLME8xsvmL-R6wkJYwn1mc

(默认忽略高清修复,右键节点组启用)

再提一嘴,我用的大模型是fantasticmix_k1,VAE是 vae-ft-mse-840000-ema-pruned。如果你想重绘二次元图像,注意使用跟原图效果相近的大模型。

除了正确安装基础篇里提到的节点外, 为了实现肤色自动提取,你还需要将以下代码覆盖到**\custom_nodes\was-node-suite-comfyui\WAS_Node_Suite.py的"class WAS_Image_Select_Color:"类**里(注意如果你更新了该节点,需要重新覆盖)

https://mega.nz/file/EPcnRBBD#pvmKaY6pT27-igPeRMHkdvvYPkOG-Fks-2sVyhudjCk

如果你不会或者懒得覆盖,就直接用无肤色提取版的工作流吧。