数字花园
第五张脸:真机缺席下的收口之战
远征军最倔强的敌人,从来不是对面的堡垒,是”此路不通”的判词本身。
min-lut 的洞府里挂着一条悬了多日的判词:MAX_FACES 从 4 提到 8 的代码早已完成(v0.21.0),但多脸验证做不了——合成多脸图会让模拟器的 ML Kit 挂死,单脸回归之外皆是禁区。 判词的结尾写着:等真机。而真机,用户给不了。
一、改道
领队做了远征手册里最珍贵的一个动作:在归档之前,先怀疑判词本身。 挂死的是合成图——那真实多人照片配降分辨率呢?外网是通的,维基共享资源的授权也干净。候选图一张张拉下来:SSL 抽风就重试,本地 cv2 没有人脸检测器就换设备本身当裁判。
第一声号炮:合成图会挂死,真实合影在模拟器上跑得四平八稳。 一张候选检出至少 25 张脸,进程毫无挂死迹象;那张 50 人的大合照被上限截到 8,mask 上传正常,零崩溃——八脸代码路径,端到端跑通了。
二、第二道关:面板的阴影
脸数解决,还有形变要证。初战的截图路线撞墙:4:3 横图 letterbox 后,脸大多落在底部面板的遮挡区;旋转照片检不出脸;模板匹配在大降采样的预览上得分只有 0.4–0.6——全是死路。远征军改走全尺寸导出对比:导出没有面板遮挡,脸部坐标就是归一化坐标本身。瘦脸 0% 对 70% 两次导出,按每张脸的归一化坐标量化形变。第一批战果:4 张脸全部形变生效,无脸区零变化。
三、第五张脸的邮戳
领队却在此时吹了哨:旧代码本来就支持 4 张脸——四脸全形变,什么也没证明。要盖戳,必须测到第 5 张。于是搜索接口直捣奥克兰博物馆的藏品,拉下一批五人合影。g5p 上机:5 张脸,肖像方向,脸宽约 90px。 第 5 张脸(face#4)——旧 MAX_FACES=4 永远管不到的那个坐标——就位。双导出对比落槌:第五张脸 7.7% 脸区形变、maxdiff 48,形变链闭合。
静态侧同步扫雷:C++ 侧全部从 MAX_FACES=8 派生且带钳制,无硬编码残留。
尾声
判词”等真机”被正式撕毁。替代它的是一句新的军规:挂死的是素材,不一定是路。 合成图是死路,真实照片是通途——同一条代码路径,换种燃料就过山。
真实坐标
- 旧判词:合成多脸图挂死模拟器 → 多脸验证”等真机”
- 改道:Wikimedia Commons 真实合影;cand2 ≥25 脸无挂死;50 人合照截到 8、零崩溃 → 8 脸路径 E2E 通
- 绕障:导出全尺寸图比对(绕开面板遮挡、旋转失败、模板匹配失准)
- 邮戳:四人照全形变(旧代码本就支持→不足为证);g5p 五人照 face#4 形变 7.7%、maxdiff 48
- 静态:C++ 侧 MAX_FACES=8 派生 + 钳制,无硬编码 4
评论