楼主: 独孤求败

[切脸辅助] 【独孤求败】编辑DF人脸座标_V8版本

[复制链接]

2335

积分

166

帖子

556

符石

化神丹师

Rank: 5

积分
2335
发表于 前天 14:22 | 显示全部楼层
独孤求败 发表于 2025-12-5 02:53
已更新DF人脸地标编辑V7

好的,已下载尝试

缩略预览,如果考虑从几千张dst、src中挑选出错误的landmarks,统一颜色会看得清楚一点
如果只是考虑预览src中,几张、几十张错误的landmarks,那不统一颜色也没有关系
毕竟一个src当中,错误的landmarks一般都是只有几十张而已
回复

使用道具 举报

1万

积分

227

帖子

220

符石

玉皇大帝

Rank: 16Rank: 16Rank: 16Rank: 16

积分
19586

隐藏大神突出贡献论坛元老咸鱼勋章

 楼主| 发表于 前天 18:32 | 显示全部楼层
ntremok 发表于 2025-12-5 14:22
好的,已下载尝试

缩略预览,如果考虑从几千张dst、src中挑选出错误的landmarks,统一颜色会看得清楚一 ...

除了这个之外,使用效果方面呢?
独孤求败遮罩/大力王 实时换脸QQ 138292555 电话验证138292555 微信 ‧飞机 wang_chun001
回复

使用道具 举报

2335

积分

166

帖子

556

符石

化神丹师

Rank: 5

积分
2335
发表于 昨天 02:49 | 显示全部楼层
独孤求败 发表于 2025-12-5 18:32
除了这个之外,使用效果方面呢?

挺好用
landmarks无法切正确的时候,
我会首先用你这个软件修改,比MVE容易很多

另外,我想到一个问题
MVE编辑landmarks时,切脸会根据landmarks调整位置的
也就是landmarks在切脸中的相对位置是固定的
而且这个相对位置跟DFL切脸时的标准是一样的

但通过你这个软件修改了landmarks之后
切脸并不会自动调整位置,
也就是你的landmarks在切脸上的相对位置,并不是固定的
这种对齐标准与DFL的对齐标准似乎不统一
训练的时候,第5列的landmarks跟dst的landmarks几乎是对齐的
如果对齐标准不统一,应该是有点问题的
你可以想象一下
第三列的dst,有一条landmarks是这个角度的
另外一条几乎完全一样的landmarks,但角度却稍微不一样
这应该会出问题的
几乎完全一样的landmarks,那它的角度应该也是几乎完全一样的

这应该不会影响合成
但训练的时候,可能相当于加入了一些对齐标准不一样的landmarks
(以上说法可能不准确,我是之前尝试另外一种切脸工具mve-face-detector,看到其他网友的说法想到的
如果我说得不对,你就当我是乱说好了)



回复

使用道具 举报

1万

积分

227

帖子

220

符石

玉皇大帝

Rank: 16Rank: 16Rank: 16Rank: 16

积分
19586

隐藏大神突出贡献论坛元老咸鱼勋章

 楼主| 发表于 昨天 09:34 | 显示全部楼层
本帖最后由 独孤求败 于 2025-12-6 18:36 编辑
ntremok 发表于 2025-12-6 02:49
挺好用
landmarks无法切正确的时候,
我会首先用你这个软件修改,比MVE容易很多

预览图线条全改为黄色,已经改好,主控台编辑的线条粗细问题原来的参数是2 现改为1.5 , 2太粗 1太细,那么就取中间点 1.5

MVE编辑landmarks时,切脸会根据landmarks调整位置,而MVE编辑编辑器修改后landmarks的相对位置可能不是固定的,这可能导致对齐标准不统一。
如是这样,因为MVE编辑landmarks与其它魔改版DF并未开源,请建议他们将landmarks转换回原始图片坐标系,以取得DF统一格式标准
我的软件设计直接又暴力,直接读取原生地标,编辑时回存也是一样原生相对位置,不会因为放大缩小有损耗,若有损耗也很小,约在1像素的小数点六位数,几乎可以忽略
以下是我读取原生DF座标代码,直接打脸说不准确的人
读取DF座标点直接开源,欢迎程序员检视代码
这属于核心代码,我也不装了,大家直接摊牌,别搞的神神秘密的~~
# ----------------------------------------------------------
# DFL 读写类别
# ----------------------------------------------------------
class PrecisionDFLReader:
    @staticmethod
    def load_dfl_landmarks(image_path):
        try:
            with open(image_path, "rb") as f: data = f.read()
            start_pos = data.find(b'\xff\xef')
            if start_pos == -1: return None
            chunk_start = start_pos + 2
            if chunk_start + 2 > len(data): return None
            chunk_size = struct.unpack(">H", data[chunk_start:chunk_start+2])[0] - 2
            data_start = chunk_start + 2
            pickle_data = data[data_start:data_start+chunk_size]
            try: dfl_dict = pickle.loads(pickle_data, encoding='latin1')
            except:
                try: dfl_dict = pickle.loads(pickle_data, encoding='bytes')
                except: return None
            if not isinstance(dfl_dict, dict) or 'landmarks' not in dfl_dict: return None
            lm = np.array(dfl_dict['landmarks'], dtype=np.float64)
            if lm.size == 136: lm = lm.reshape(68, 2)
            return lm
        except: return None

class PrecisionDFLWriter:
    @staticmethod
    def save_dfl_landmarks(image_path, landmarks):
        try:
            with open(image_path, "rb") as f: data = f.read()
            start_pos = data.find(b'\xff\xef')
            if start_pos == -1: return False
            chunk_start = start_pos + 2
            chunk_size = struct.unpack(">H", data[chunk_start:chunk_start+2])[0] - 2
            data_start = chunk_start + 2
            pickle_data = data[data_start:data_start+chunk_size]
            try: dfl_dict = pickle.loads(pickle_data, encoding='latin1')
            except:
                try: dfl_dict = pickle.loads(pickle_data, encoding='bytes')
                except: return False
            dfl_dict['landmarks'] = landmarks.astype(np.float32).tolist()
            new_pickle = pickle.dumps(dfl_dict, protocol=2)
            new_data = data[:start_pos] + b'\xff\xef' + struct.pack(">H", len(new_pickle)+2) + new_pickle + data[data_start+chunk_size:]
            with open(image_path, "wb") as f: f.write(new_data)
            return True
        except: return False

或许某些原因DF魔改版要对他的客户交代,说我读取原生DF地标不准?代码在上面全公布了
有些把遮罩改512或模型改动参数之后一定要用指定DF魔改软件,才能读取训练不报错且地标才不会弄乱,有必要这样绑架吗?
DF魔改版有 A B C D E 。。。。等版本,要我去配合他们改写程序,有点不切实际呢!
我写的软体完全按照 DF 原版程序是百分百兼容,最重要的是免费的,要用不用我没关系我无所谓呢!反正又不收你费,不想用直接删除就好了。

我正弄新一代的地标编辑器 V8版本,功能更强大操作更便利,直接点击座标点就对应相对图档的座标点编辑,也可反相操作
10.jpg

20.jpg

侧脸 极限角度 等,抓不住位置时,改由点击参考图座标,就直接对应你的图档座标所在位置。
情景:你的切脸都错乱,连你自己都搞不清楚那些\错乱线条的点是什么跟什么
别紧张,选参考图的点,自动对应出来图档的位置,便于修正。
88.jpg

gemini 对我的代码分析给出了结论:
1.jpg
2.jpg
4.jpg



评分

参与人数 1金钱 +1 收起 理由
ntremok + 1 感谢分享

查看全部评分

独孤求败遮罩/大力王 实时换脸QQ 138292555 电话验证138292555 微信 ‧飞机 wang_chun001
回复

使用道具 举报

2335

积分

166

帖子

556

符石

化神丹师

Rank: 5

积分
2335
发表于 昨天 16:41 | 显示全部楼层
本帖最后由 ntremok 于 2025-12-6 16:44 编辑
独孤求败 发表于 2025-12-6 09:34
预览图线条全改为黄色,已经改好,主控台编辑的线条粗细问题原来的参数是2 现改为1.5 , 2太粗 1太细,那么 ...

我不懂代码,也不懂对齐的原理,
我是基于第三列dst的对齐情况,
DFL切脸之后,landmarks一般都是两眼之间的连线是水平的
而且眼睛在切脸上的垂直位置是固定的,
使用你的工具修改之后,切脸还是原来那个切脸
但部分landmarks改动了,你的两眼之间的连线,可能就变得不水平了
例如dst、src对练,
dst没有经过修改,两眼之间的连线是水平的
src经过修改,两眼之间的连线变得不水平了
这样对练应该是有问题的吧

如果dst、src切脸landmarks都没有错
那他们对练的时候,两眼的连线应该是平行的

回复

使用道具 举报

2335

积分

166

帖子

556

符石

化神丹师

Rank: 5

积分
2335
发表于 5 小时前 | 显示全部楼层
独孤求败 发表于 2025-12-6 09:34
预览图线条全改为黄色,已经改好,主控台编辑的线条粗细问题原来的参数是2 现改为1.5 , 2太粗 1太细,那么 ...

其实可以做个对齐的小实验
拿1张DFL自动切landmarks错误的dst出来
一个用MVE调整landmarks
一个用你的软件调整landmarks

你先用MVE调整landmarks,调到正确的位置
然后再用你的软件,调整landmarks
这个landmarks每个点位置都跟MVE调整的一致
也调整到正确的位置
这时得到两张dst

然后你拿一张切脸正确、landmarks正确的src
分别跟这两张dst对练
这样得到的第5列
应该是不一样的
因为第5列对齐的是landmarks
但你这两张dst的landmarks在切脸上的相对位置是不一样的

这里面应该只有一个第5列是正确的
不可能两个第5列都是正确的
你不可能说相同的dst,他们的结果有两个的,它们的结果只能有一个
除非经过MVE调整的dst,训练得到的第5列是错误的,这种几率应该是比较小的
(这个问题太小众了,而且两个第5列应该差距不大,合成时应该不会有明显的区别
所以正确也好,错误也罢,由它去吧,不用费精力在上面了)

回复

使用道具 举报

1万

积分

227

帖子

220

符石

玉皇大帝

Rank: 16Rank: 16Rank: 16Rank: 16

积分
19586

隐藏大神突出贡献论坛元老咸鱼勋章

 楼主| 发表于 3 小时前 | 显示全部楼层
ntremok 发表于 2025-12-7 01:03
其实可以做个对齐的小实验
拿1张DFL自动切landmarks错误的dst出来
一个用MVE调整landmarks

编辑DF人脸座标_V8版本
已更新请下载
独孤求败遮罩/大力王 实时换脸QQ 138292555 电话验证138292555 微信 ‧飞机 wang_chun001
回复

使用道具 举报

1万

积分

227

帖子

220

符石

玉皇大帝

Rank: 16Rank: 16Rank: 16Rank: 16

积分
19586

隐藏大神突出贡献论坛元老咸鱼勋章

 楼主| 发表于 3 小时前 | 显示全部楼层
本帖最后由 独孤求败 于 2025-12-7 02:27 编辑
ntremok 发表于 2025-12-7 01:03
其实可以做个对齐的小实验
拿1张DFL自动切landmarks错误的dst出来
一个用MVE调整landmarks

这个问题已经回覆你了
因为 MVE 是二次加工,重切过有轻微损耗
我采用的是原生DF没有损耗
最明显的例子:假如你用MVE编辑遮罩点,然后再到DF编辑器使用
你会发现这些编辑点位置都跑了,因为MVE重切采用自己格式的代码
以致于不兼容,经由MVE编辑的遮罩点,仅能用他既有的程序跑,用原版DF跑
那么遮罩会出问题,这也就是很多人训练时遮罩无法有效处理的原因之一
不过他新版的已经优化修正这个 Bug 且支援50系列
是全方位大修改,你用的这些旧版的已经停更了且不再维护
以下这些能解除你的疑虑


1.jpg

2.jpg

4.jpg




独孤求败遮罩/大力王 实时换脸QQ 138292555 电话验证138292555 微信 ‧飞机 wang_chun001
回复

使用道具 举报

小黑屋|ZhaTV ( 滇ICP备15003127号-4 ) |网站地图

GMT+8, 2025-12-7 06:05

Powered by Zhatv.cn

© 2022-2023

快速回复 返回顶部 返回列表