文件
paintfcp-fxplug/docs/analysis/跟踪闪烁对齐分析.md
T

9.8 KiB
原始文件 Blame 文件历史

瘦脸跟踪闪烁:1.3.2 与目标 2.4.0 的对齐缺口

2026-10-22。用户实测同一段素材,本插件瘦脸跟踪闪烁,目标插件稳定。本次分析基线为 b58fec1a86db7a2e474e1cc65a5911447b5906b9,已安装版仍为 1.3.2(17)。只做源码审查、隔离合成复现和静态二进制对照,没有修改产品源码、重新编译 APP 或操作宿主。

主要缺口在跨帧几何的有效性判定、坏帧保持与缓存更新。此前恢复单帧瘦脸位移场,并没有完整对齐新版目标的连续跟踪链。以下区分已经复现的本品行为、目标的静态分支,以及尚未定位到用户素材具体帧的部分。

目标版本与旧分析的边界

本次目标是用户指定的 /Users/dayu/Downloads/MSE18V2.app,版本 2.4.0 / 20260724150000。插件通用二进制 SHA-256 为 577303e0de72e07feb576c882e82382b3f056b023a7e987d990ffb37f6b16109,arm64 切片为 afc71d0d21fd3c1ca95ca745ddafcd729e36ad95f17d8638009f2e45d9b7e8df。切片逐字节核对过本次目标,REA 使用 Ghidra 12.1.4;未执行目标。

原有 auto-follow-report.json 分析的是 /Applications/MSE18V2.app 的旧版 1.0.20260617-170517,通用二进制 SHA 为 6c5d74bc844a5c5f745718b48ea10ec6635d08aa08a5b6dc6e62653980849f8a。其中 temporal 混合系数和历史优先级不能直接当成 2.4.0 的默认瘦脸实现。

新版 renderDestinationImage(0x10002179c)的单主要人脸几何分支直接调用 mss_pinStyleFacePoints…(0x10003d69c)。后者在筛选当前几何后,选择接纳新点或回用上一组有效点,并可向 trackedFaceBox…(0x10003cc78)请求连续跟踪框。旧 temporalFacePoints… 方法仍存在,但当前提供者没有解析到它的直接调用者;这不能排除任意 Objective-C 间接调用,却足以纠正“只按旧 temporal 方法调平滑系数即可对齐新版”的假设。

对应 Evidence:render ev_2330b66132cd6539b8c66313c8dc43ca6ff5eb3e0881abbbe26857f99de6a83b;pin-style ev_58dee36fddf4e4c98ce3d880a0bb98190351d1269c960b3ccc275aef81265e8f;直接调用关系 ev_568a93f2165e5dc5046e610f47c23e9cebc33f55b5d12d3ee005a1e99a7191f6、ev_a8cf6f3aec6fbcf2b698ab8ec52313e20a6a5e0d636bc922c4293e436861db7e、ev_7c53c39d245e0063cab89358ab8948cdd734488460464d5f455674bb80a1515a。

已确定的差异

环节 当前 1.3.2 目标 2.4.0 的静态证据 对闪烁的意义
部分关键点失效 有合法脸框就接纳;当前缺 76 点时删去完整拓扑,且不标为 held 接纳前要求足量点、轮廓、有限坐标、有效五官布局和置信度;不合格时可回用上一组有效点 当前会在部分失效帧直接关闭瘦脸,目标有完整形状保持路径
框与几何稳定 每次重新检测,旧点先映射到当前原始框;没有连续对象框跟踪器 pin-style 可调用 VNSequenceRequestHandler / VNTrackObjectRequest,坏帧可把旧点映射到可用跟踪框 当前框噪声完全进入几何;目标另外维护连续框和上次有效形状
异常姿态与跳点 主要判断眼轴翻转;合法有限 76 点一般直接进入混合 额外检查眼/鼻/口/下轮廓结构、前后几何兼容及归一化点位跳变的中位数/P90 当前会接受点数足够但位置不可靠的帧
同帧检测复用 每个请求新建 Vision handler;几何缓存要求 raw 也完全相同才命中 人脸检测有按帧时间、输入范围和 tile 范围复用的缓存,并有重试分支 当前重复请求可能产生不同 raw 后重新计算;未测得其在用户素材中的发生频率
丢检时的外观支持 默认几何可以保持,但皮肤/牙齿/眼睛蒙版仍取 raw 检测 本次只完整核对目标的瘦脸主路径,未恢复其全部外观蒙版稳定策略 本品已复现几何保持时外观蒙版清零,可能叠加视觉闪烁;不把目标外观路径宣称为已完全对齐

pin-style 的接纳分支复制本帧合格点,保持分支使用旧有效点并尝试框重映射。因此不能据旧报告把“目标平滑更强”或某个固定混合权重当作这次原因。应优先恢复它筛掉坏几何、保留有效几何的机制。

目标跟踪器还有开关与时间管理:静态初始化检查 MSE18_DISABLE_FACE_THIN_VISION_TRACKER,通常未设置时启用;已核对初始化汇编的 OR/EOR 写入。跟踪方法包含同帧复用、时间倒退/间隔后的重置、跟踪结果置信度检查和短期保框分支。这里证明默认配置下的可达控制流,没有记录用户宿主内实际环境变量或运行命中次数,不能称为运行验证,也不能仅添加一个 VNTrackObjectRequest 就声称完整复刻。

隔离复现结果

探针直接链接当前 PGFaceProcessor.m,用自造 256×256 图与合成关键点调用实际选择器、变形和蒙版实现。没有使用用户画面、真实人脸点阵或目标运行结果。运行 zsh scripts/diagnose-tracking.sh 输出 JSON;它是诊断统计,退出码 0 只表示执行完成。

  1. 76 → 缺 76 → 76,瘦脸中间一帧完全归零。 三帧一直有输出脸框,点数为 76/0/76,held 全为 false。只开瘦脸时,相对原图的变化通道数为 85835/0/85835,中间帧像素完全直通。源码入口:PGFaceProcessor.m 208–227、308、532–554、645–646。这证明了一个足以造成闪烁的路径;没有测量它在用户视频中的出现率。
  2. 纯脸框抖动衰减为 0%。 25fps、20 帧,框的 X 方向交替 ±0.004,框内点保持一致;输入和稳定后的点位步幅均为 0.008,输出/输入振幅比 1.0。源码 177–186、196、214–217 的重映射原样继承了框平移。目标对各种轻微框噪声的最终响应尚未做数值对照,不能把此数值直接说成两插件的实测差值。
  3. 当前点混合在 25/30fps 时采用 90% 新点。 60fps 为 50%,120fps 为 25%;现有 10ms 用例只检查 30% 新点。掉检后重获还跳过 76 点混合而直接采用 raw。源码 186、211–225、308;现有 slim_tests.m 408–410 明确要求重获采用 raw。这解释当前实现为何对扰动敏感,不是目标 2.4.0 权重的证据。
  4. 空缓存会保留第一次请求顺序的结果。 先请求 40ms 空帧,再补入 0ms 有效脸,重播 40ms 仍输出 0 脸;按 0→40ms 请求则输出 1 脸。源码 279 的命中直接返回,插入早期帧不会更新后续结果。宿主锁只串行化到达顺序;并发测试只验证安全和重复一致,没有要求不同到达顺序获得相同几何。尚未记录用户宿主实际请求顺序。
  5. 几何保持不等于美容蒙版保持。 默认路径掉检时几何脸数仍为 1,colorMask 均值从 0.3952 变为 0,skinMask 从 0.2967 变为 0。生产入口强制 singleFace=0,走源码 664–666 的 raw 外观支持;单人 held 外观分支并未在该默认路径使用。
  6. 多人仍有额外边界。 默认关联只按防跳区域内距上一框中心最近者选脸;自造交叉可选到陌生人。fastMulti 直接返回 raw,不做当前单主要人脸的保持。此项没有证明用户单人素材发生了换脸,修复时应单列验收。

原 1901 项回归主要证明单帧图像、几何和接口行为。已有跟随测试检查完全空检测、10ms 扰动与缓存重复安全,没有覆盖“76 点短暂不完整”的连续帧,也没有以常用帧率约束抖动幅度。此前每两秒取一帧、共 11 帧的真实视频检查同样不能替代连续序列稳定性验收。

建议修复顺序与验证要求

  • 先处理部分失效和异常几何。 在接纳新主脸前检查完整拓扑与五官布局;不合格时进入上一组有效形状的保持/重映射路径。明确区分有效检测时间、输出时间和保持状态,避免仅靠刷新输出时间无限保持。
  • 再对齐连续框、重获和时间管理。 结合新版默认可达跟踪链处理同帧、倒退、跳时、正常运动及重获;从转头、遮挡恢复检查形状是否突然跳回 raw。先逐条核对机制,再决定系数,避免用增加滞后来掩盖坏点。
  • 补齐缓存和外观同步。 明确同帧结果与新增前帧历史的失效关系、源切换隔离及默认蒙版跟随;以顺序/倒序/重复/多线程请求对照输出。
  • 用同一段素材做连续帧验收。 锁定宿主、原始帧率、预览/导出条件和相同单项参数;记录检测有效性、保持原因、框/点扰动与效果开关变化,和目标逐帧对照。单张图正常、自动用例通过都不足以宣布闪烁修复。

用户随后指定当前时间线的草帽人物素材,已在 Final Cut Pro 确认项目为1080p25、多人模式关闭、瘦脸1.00,且大眼约0.90;正在对源素材做连续帧核对。现有结论已定位实现缺口与可复现机制,尚未将某一种机制认定为该素材闪烁的唯一原因。本次不构建新 APP,不更新安装包或文章。

保留资料

Ghidra 对部分 CGRect、CMTime 和返回寄存器的恢复不完整。报告依据渲染调用关系、完整点门槛、接纳/保持内存分支及初始化汇编作结构判断;未声称所有阈值布尔表达式与目标逐条等价。REA 会话已保存并关闭,证据可离线复查。