ComfyUI FaceTools 插件保姆级教程
1. 插件简介
插件地址: https://github.com/dchatel/comfyui_facetools
ComfyUI FaceTools 是一个专门处理人脸的超级工具箱!想象一下,这个插件就像一个专业的美容师工作台,里面有各种各样的工具来处理人脸:
- 人脸检测器:就像一个火眼金睛的侦探,能在照片里找到所有的人脸
- 人脸裁剪器:就像一把精准的剪刀,能把人脸从照片里完美地剪出来
- 人脸贴回器:就像一个拼图高手,能把处理好的人脸完美地贴回原照片
- 各种面具制作器:就像化妆师的面具,能精确地标记出脸部的不同区域
这个插件能给我们带来什么效果?
这个插件特别适合做人脸相关的图片处理:
- 人脸修复:把模糊的脸变清晰
- 人脸替换:把一个人的脸换成另一个人的脸
- 人脸美化:只对脸部进行美化处理,不影响背景
- 性别筛选:从多个人脸中筛选出男性或女性
- 人脸大小排序:按照脸的大小来排列处理
2. 如何安装
安装前准备
在安装插件之前,你需要下载一些模型文件(就像给工具箱添加专用工具):
-
下载人脸对齐模型:
- 去 HuggingFace 下载 FaceAlignment 模型
- 放到
ComfyUI/models/landmarks文件夹里
-
下载BiSeNet模型(可选,用于精确面部分割):
- 去 Google Drive 下载 BiSeNet 模型
- 放到
ComfyUI/models/bisenet文件夹里
插件安装方法
方法一:通过ComfyUI管理器安装(推荐)
- 打开 ComfyUI
- 点击 "Manager"(管理器)
- 选择 "Custom Nodes Manager"(自定义节点管理器)
- 搜索 "facetools"
- 点击 "Install"(安装)
方法二:通过Git地址安装
- 打开 ComfyUI
- 点击 "Manager"(管理器)
- 选择 "Install via Git URL"(通过Git地址安装)
- 输入:
https://github.com/dchatel/comfyui_facetools.git - 点击安装
安装完成后重启 ComfyUI 即可使用。
3. 节点详细解析
3.1 DetectFaces 节点 - 人脸侦探
这个节点就像一个专业的"人脸侦探",能在照片里找到所有的人脸,不管人脸是大是小、是正是歪。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| image | image | 图片输入 | 必须连接 | 输入要检测人脸的照片,就像给侦探一张要搜查的照片 | 输入待检测的图像数据 | 连接LoadImage节点或其他图片源 |
| threshold | threshold | 0.0-1.0小数 | 0.5 | 检测敏感度,就像调节侦探的"眼力",数值越高要求越严格 | 人脸检测的置信度阈值,过滤低置信度检测结果 | 0.3检测更多可能的脸,0.7只检测很确定的脸 |
| min_size | min_size | 整数 | 64 | 最小人脸尺寸,就像告诉侦探"太小的脸不用管" | 检测的最小人脸像素尺寸 | 设为32能检测很小的脸,设为128只检测较大的脸 |
| max_size | max_size | 整数 | 512 | 最大人脸尺寸,就像告诉侦探"太大的脸也不用管" | 检测的最大人脸像素尺寸 | 通常设为512够用,特殊情况可以调更大 |
| mask | mask | 遮罩输入 | 可选 | 搜索区域限制,就像给侦探划定搜查范围 | 可选的遮罩,限制检测区域 | 连接遮罩可以只在特定区域检测人脸 |
输出接口:
faces:找到的所有人脸信息,包含位置、大小等数据
3.2 CropFaces 节点 - 人脸剪刀手
这个节点就像一个精准的"剪刀手",能把检测到的人脸从照片里完美地剪出来,还能制作各种类型的面具。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| faces | faces | 人脸数据 | 来自DetectFaces | 接收侦探找到的人脸信息,就像接收要剪切的目标清单 | 接收人脸检测结果进行裁剪处理 | 必须连接DetectFaces节点的faces输出 |
| crop_size | crop_size | 512-1024整数 | 512 | 剪出来的人脸图片大小,就像选择相框的尺寸 | 裁剪后的人脸图像尺寸(正方形) | 512适合一般处理,1024用于高质量处理 |
| crop_factor | crop_factor | 1.0-3.0小数 | 1.5 | 剪切范围扩大倍数,就像决定要不要把脖子和头发也剪进来 | 裁剪时的扩展因子,包含更多面部周围区域 | 1.0只剪脸部,2.0会包含更多头发和背景 |
| mask_type | mask_type | 下拉选择 | simple_square | 面具类型,就像选择不同形状的面具来标记脸部区域 | 生成遮罩的方法,用于后续处理 | simple_square最快,BiSeNet最精确 |
可选的面具类型:
simple_square:简单方框,速度最快convex_hull:凸包形状,比较精确BiSeNet:AI智能分割,最精确但需要额外模型jonathandinu:另一种AI分割,精确度高但占用内存多
输出接口:
crops:剪出来的人脸图片masks:对应的面具(标记哪些区域是脸)warps:变形信息(用于后面贴回原图)
3.3 WarpFacesBack 节点 - 人脸拼图师
这个节点就像一个专业的"拼图师",能把处理好的人脸完美地贴回到原来的照片里,就像从来没有动过一样。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| images | images | 图片输入 | 原始图片 | 原始照片,就像拼图的底板 | 原始图像,作为人脸贴回的目标 | 通常连接最开始的原图 |
| face | face | 人脸数据 | 来自DetectFaces | 人脸位置信息,就像拼图的位置说明书 | 人脸检测结果,提供位置信息 | 连接DetectFaces的faces输出 |
| crop | crop | 处理后图片 | 来自处理节点 | 处理好的人脸图片,就像要贴上去的拼图块 | 经过处理的人脸图像 | 连接经过美化或修复的人脸图片 |
| mask | mask | 面具数据 | 来自CropFaces | 贴合面具,告诉拼图师哪些地方要贴哪些地方不贴 | 遮罩信息,控制融合区域 | 连接CropFaces的masks输出 |
| warp | warp | 变形数据 | 来自CropFaces | 变形说明书,告诉拼图师怎么调整角度和大小 | 仿射变换矩阵,用于几何对齐 | 连接CropFaces的warps输出 |
输出接口:
IMAGE:贴好人脸的完整照片
3.4 BiSeNetMask 节点 - 精密面具制作师
这个节点就像一个"精密面具制作师",能为人脸的每个部位制作专门的面具,比如只要眼睛、只要嘴巴等等。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| crop | crop | 人脸图片 | 来自CropFaces | 剪出来的人脸图片,就像要制作面具的模特照片 | 裁剪后的人脸图像用于语义分割 | 连接CropFaces的crops输出 |
| skin | skin | 开关 | True | 是否包含皮肤区域,就像决定面具要不要覆盖皮肤 | 是否在遮罩中包含面部皮肤区域 | True包含皮肤,False不包含皮肤 |
| left_brow | left_brow | 开关 | True | 是否包含左眉毛,就像决定面具要不要覆盖左眉毛 | 是否在遮罩中包含左眉毛区域 | True包含左眉毛,False不包含 |
| right_brow | right_brow | 开关 | True | 是否包含右眉毛,就像决定面具要不要覆盖右眉毛 | 是否在遮罩中包含右眉毛区域 | True包含右眉毛,False不包含 |
| left_eye | left_eye | 开关 | True | 是否包含左眼,就像决定面具要不要覆盖左眼 | 是否在遮罩中包含左眼区域 | True包含左眼,False不包含 |
| right_eye | right_eye | 开关 | True | 是否包含右眼,就像决定面具要不要覆盖右眼 | 是否在遮罩中包含右眼区域 | True包含右眼,False不包含 |
| eyeglasses | eyeglasses | 开关 | True | 是否包含眼镜,就像决定面具要不要覆盖眼镜 | 是否在遮罩中包含眼镜区域 | True包含眼镜,False不包含 |
| left_ear | left_ear | 开关 | True | 是否包含左耳,就像决定面具要不要覆盖左耳 | 是否在遮罩中包含左耳区域 | True包含左耳,False不包含 |
| right_ear | right_ear | 开关 | True | 是否包含右耳,就像决定面具要不要覆盖右耳 | 是否在遮罩中包含右耳区域 | True包含右耳,False不包含 |
| earring | earring | 开关 | True | 是否包含耳环,就像决定面具要不要覆盖耳环 | 是否在遮罩中包含耳环区域 | True包含耳环,False不包含 |
| nose | nose | 开关 | True | 是否包含鼻子,就像决定面具要不要覆盖鼻子 | 是否在遮罩中包含鼻子区域 | True包含鼻子,False不包含 |
| mouth | mouth | 开关 | True | 是否包含嘴巴,就像决定面具要不要覆盖嘴巴 | 是否在遮罩中包含嘴部区域 | True包含嘴巴,False不包含 |
| upper_lip | upper_lip | 开关 | True | 是否包含上嘴唇,就像决定面具要不要覆盖上嘴唇 | 是否在遮罩中包含上唇区域 | True包含上嘴唇,False不包含 |
| lower_lip | lower_lip | 开关 | True | 是否包含下嘴唇,就像决定面具要不要覆盖下嘴唇 | 是否在遮罩中包含下唇区域 | True包含下嘴唇,False不包含 |
| neck | neck | 开关 | False | 是否包含脖子,就像决定面具要不要覆盖脖子 | 是否在遮罩中包含颈部区域 | 通常False,除非需要处理脖子 |
| necklace | necklace | 开关 | False | 是否包含项链,就像决定面具要不要覆盖项链 | 是否在遮罩中包含项链区域 | 通常False,除非需要处理项链 |
| cloth | cloth | 开关 | False | 是否包含衣服,就像决定面具要不要覆盖衣服 | 是否在遮罩中包含服装区域 | 通常False,除非需要处理衣服 |
| hair | hair | 开关 | False | 是否包含头发,就像决定面具要不要覆盖头发 | 是否在遮罩中包含头发区域 | 需要处理头发时设为True |
| hat | hat | 开关 | False | 是否包含帽子,就像决定面具要不要覆盖帽子 | 是否在遮罩中包含帽子区域 | 需要处理帽子时设为True |
输出接口:
MASK:制作好的精密面具
3.5 JonathandinuMask 节点 - 高精度面具制作师
这个节点就像一个"高精度面具制作师",比BiSeNet更精确,但也更耗费电脑资源,就像用更高级的工具制作更精细的面具。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| crop | crop | 人脸图片 | 来自CropFaces | 剪出来的人脸图片,就像要制作高精度面具的模特照片 | 裁剪后的人脸图像用于高精度语义分割 | 连接CropFaces的crops输出 |
| skin | skin | 开关 | True | 是否包含皮肤区域,就像决定高精度面具要不要覆盖皮肤 | 是否在遮罩中包含面部皮肤区域 | True包含皮肤,False不包含皮肤 |
| nose | nose | 开关 | True | 是否包含鼻子,就像决定高精度面具要不要覆盖鼻子 | 是否在遮罩中包含鼻子区域 | True包含鼻子,False不包含 |
| eyeglasses | eyeglasses | 开关 | False | 是否包含眼镜,就像决定高精度面具要不要覆盖眼镜 | 是否在遮罩中包含眼镜区域 | 有眼镜时设为True |
| left_eye | left_eye | 开关 | True | 是否包含左眼,就像决定高精度面具要不要覆盖左眼 | 是否在遮罩中包含左眼区域 | True包含左眼,False不包含 |
| right_eye | right_eye | 开关 | True | 是否包含右眼,就像决定高精度面具要不要覆盖右眼 | 是否在遮罩中包含右眼区域 | True包含右眼,False不包含 |
| left_brow | left_brow | 开关 | True | 是否包含左眉毛,就像决定高精度面具要不要覆盖左眉毛 | 是否在遮罩中包含左眉毛区域 | True包含左眉毛,False不包含 |
| right_brow | right_brow | 开关 | True | 是否包含右眉毛,就像决定高精度面具要不要覆盖右眉毛 | 是否在遮罩中包含右眉毛区域 | True包含右眉毛,False不包含 |
| left_ear | left_ear | 开关 | True | 是否包含左耳,就像决定高精度面具要不要覆盖左耳 | 是否在遮罩中包含左耳区域 | True包含左耳,False不包含 |
| right_ear | right_ear | 开关 | True | 是否包含右耳,就像决定高精度面具要不要覆盖右耳 | 是否在遮罩中包含右耳区域 | True包含右耳,False不包含 |
| mouth | mouth | 开关 | True | 是否包含嘴巴,就像决定高精度面具要不要覆盖嘴巴 | 是否在遮罩中包含嘴部区域 | True包含嘴巴,False不包含 |
| upper_lip | upper_lip | 开关 | True | 是否包含上嘴唇,就像决定高精度面具要不要覆盖上嘴唇 | 是否在遮罩中包含上唇区域 | True包含上嘴唇,False不包含 |
| lower_lip | lower_lip | 开关 | True | 是否包含下嘴唇,就像决定高精度面具要不要覆盖下嘴唇 | 是否在遮罩中包含下唇区域 | True包含下嘴唇,False不包含 |
| hair | hair | 开关 | False | 是否包含头发,就像决定高精度面具要不要覆盖头发 | 是否在遮罩中包含头发区域 | 需要处理头发时设为True |
| hat | hat | 开关 | False | 是否包含帽子,就像决定高精度面具要不要覆盖帽子 | 是否在遮罩中包含帽子区域 | 需要处理帽子时设为True |
| earring | earring | 开关 | False | 是否包含耳环,就像决定高精度面具要不要覆盖耳环 | 是否在遮罩中包含耳环区域 | 有耳环时设为True |
| necklace | necklace | 开关 | False | 是否包含项链,就像决定高精度面具要不要覆盖项链 | 是否在遮罩中包含项链区域 | 有项链时设为True |
| neck | neck | 开关 | False | 是否包含脖子,就像决定高精度面具要不要覆盖脖子 | 是否在遮罩中包含颈部区域 | 需要处理脖子时设为True |
| cloth | cloth | 开关 | False | 是否包含衣服,就像决定高精度面具要不要覆盖衣服 | 是否在遮罩中包含服装区域 | 需要处理衣服时设为True |
输出接口:
MASK:制作好的高精度面具
3.6 GenderFaceFilter 节点 - 性别筛选器
这个节点就像一个"性别识别专家",能从多个人脸中筛选出男性或女性的脸,就像在人群中找出特定性别的人。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| faces | faces | 人脸数据 | 来自DetectFaces | 要筛选的人脸清单,就像给专家一堆照片让他挑选 | 输入的人脸检测结果 | 连接DetectFaces的faces输出 |
| gender | gender | 下拉选择 | man | 要筛选的性别,就像告诉专家你要找男的还是女的 | 目标性别类别 | 选man筛选男性,选woman筛选女性 |
输出接口:
filtered:筛选出来的目标性别人脸rest:剩下的其他人脸
3.7 OrderedFaceFilter 节点 - 人脸排序筛选器
这个节点就像一个"人脸管理员",能按照脸的大小来排序,然后选出你想要的几个,就像从大到小排队然后选前几名。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| faces | faces | 人脸数据 | 来自DetectFaces | 要排序的人脸清单,就像给管理员一堆要排队的人 | 输入的人脸检测结果 | 连接DetectFaces的faces输出 |
| criteria | criteria | 下拉选择 | area | 排序标准,就像告诉管理员按什么来排队 | 排序的依据标准 | 目前只支持area(按面积大小排序) |
| order | order | 下拉选择 | descending | 排序方向,就像决定是从大到小还是从小到大排队 | 排序的顺序方向 | descending从大到小,ascending从小到大 |
| take_start | take_start | 整数 | 0 | 从第几个开始选,就像告诉管理员从队伍的第几个人开始选 | 开始选择的索引位置 | 0从第一个开始,1从第二个开始 |
| take_count | take_count | 整数 | 1 | 选几个人,就像告诉管理员要选几个人出来 | 选择的人脸数量 | 1选一个,3选三个 |
输出接口:
filtered:选出来的人脸rest:剩下的人脸
3.8 MergeWarps 节点 - 变形数据合并器
这个节点就像一个"数据整理员",能把两组人脸处理数据合并成一组,方便一起处理。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| crop0 | crop0 | 人脸图片 | 第一组数据 | 第一组剪出来的人脸图片,就像第一堆要整理的照片 | 第一组裁剪后的人脸图像 | 连接第一个CropFaces的crops输出 |
| mask0 | mask0 | 面具数据 | 第一组数据 | 第一组面具数据,就像第一堆面具 | 第一组遮罩数据 | 连接第一个CropFaces的masks输出 |
| warp0 | warp0 | 变形数据 | 第一组数据 | 第一组变形数据,就像第一堆变形说明书 | 第一组仿射变换矩阵 | 连接第一个CropFaces的warps输出 |
| crop1 | crop1 | 人脸图片 | 第二组数据 | 第二组剪出来的人脸图片,就像第二堆要整理的照片 | 第二组裁剪后的人脸图像 | 连接第二个CropFaces的crops输出 |
| mask1 | mask1 | 面具数据 | 第二组数据 | 第二组面具数据,就像第二堆面具 | 第二组遮罩数据 | 连接第二个CropFaces的masks输出 |
| warp1 | warp1 | 变形数据 | 第二组数据 | 第二组变形数据,就像第二堆变形说明书 | 第二组仿射变换矩阵 | 连接第二个CropFaces的warps输出 |
输出接口:
IMAGE:合并后的人脸图片MASK:合并后的面具数据WARP:合并后的变形数据
4. 使用技巧和建议
4.1 基础人脸处理工作流
- DetectFaces → 检测照片中的人脸
- CropFaces → 剪出人脸并制作面具
- 处理节点(如放大、美化等)→ 处理剪出来的人脸
- WarpFacesBack → 把处理好的人脸贴回原图
4.2 性能优化建议
-
面具选择:
- 速度优先:选择
simple_square - 质量优先:选择
BiSeNet或jonathandinu - 平衡选择:选择
convex_hull
- 速度优先:选择
-
检测参数调整:
- 照片人脸很清晰:threshold 设为 0.7
- 照片人脸模糊:threshold 设为 0.3
- 只要大脸:min_size 设大一点
- 要检测小脸:min_size 设小一点
4.3 常用组合技巧
- 只处理最大的脸:DetectFaces → OrderedFaceFilter(设为descending,take_count=1)
- 只处理女性的脸:DetectFaces → GenderFaceFilter(设为woman)
- 精确面部美化:使用BiSeNetMask只选择皮肤、眼睛、嘴巴等部位
4.4 内存节省技巧
- 避免同时使用BiSeNet和Jonathandinu两种精确面具
- 处理大量人脸时,先用OrderedFaceFilter筛选出需要的人脸
- crop_size不要设置过大,512通常够用
5. 常见问题解答
Q1:为什么检测不到人脸?
A1: 可能的原因和解决方法:
- threshold设置太高:降低到0.3-0.5试试
- 人脸太小:降低min_size参数
- 人脸角度太偏:这个插件对侧脸检测能力有限
- 图片质量太差:尝试先提高图片质量
Q2:BiSeNet面具不工作?
A2: 检查以下几点:
- 确保下载了BiSeNet模型文件
- 模型文件放在正确的位置:
ComfyUI/models/bisenet/79999_iter.pth - 确保有足够的显存(GPU内存)
Q3:处理后的人脸贴回去有明显边界?
A3: 尝试以下解决方法:
- 增加crop_factor参数,包含更多周围区域
- 使用更精确的面具类型(BiSeNet或jonathandinu)
- 在处理人脸时添加边缘羽化效果
Q4:性别筛选不准确?
A4: 这是正常现象:
- 性别识别本身就不是100%准确的
- 可以手动筛选或使用OrderedFaceFilter按大小筛选
- 考虑使用其他更专业的性别识别工具
Q5:内存不够用怎么办?
A5: 内存优化建议:
- 使用simple_square面具而不是BiSeNet
- 减小crop_size参数
- 一次处理较少的人脸
- 关闭其他占用内存的程序
6. 实际应用场景
6.1 人像修复工作流
原图 → DetectFaces → CropFaces → 人脸修复模型 → WarpFacesBack → 修复完成
6.2 批量人脸美化
原图 → DetectFaces → OrderedFaceFilter → CropFaces → 美化处理 → WarpFacesBack → 美化完成
6.3 精确面部化妆
原图 → DetectFaces → CropFaces → BiSeNetMask → 化妆处理 → WarpFacesBack → 化妆完成
6.4 性别特定处理
原图 → DetectFaces → GenderFaceFilter → CropFaces → 特定处理 → WarpFacesBack → 处理完成
7. 总结
ComfyUI FaceTools 插件是一个功能强大的人脸处理工具箱,包含8个专业节点:
- DetectFaces:人脸侦探,找出所有人脸
- CropFaces:人脸剪刀手,精确剪出人脸
- WarpFacesBack:人脸拼图师,完美贴回处理后的人脸
- BiSeNetMask:精密面具制作师,制作详细的面部区域面具
- JonathandinuMask:高精度面具制作师,更精确但更耗资源
- GenderFaceFilter:性别筛选器,按性别筛选人脸
- OrderedFaceFilter:人脸排序筛选器,按大小排序并筛选
- MergeWarps:变形数据合并器,合并多组处理数据
这个插件特别适合需要精确处理人脸的场景,比如人像修复、美颜处理、人脸替换等。通过合理组合这些节点,你可以创建出非常专业的人脸处理工作流!
记住:选择合适的面具类型和参数设置是成功的关键,多尝试不同的组合,找到最适合你需求的配置。