15 KiB
15 KiB
画布比例调整验证记录(2026-07-11)
验收口径
- 测试图来自近期真实生图日志,共 10 张,覆盖白底椅、室内柜体、带人物书架、衣架、桌子和推车。
- 框选必须完整包住产品。接口返回成功不等于通过,必须人工检查最终整图。
- 通过条件:产品尺寸明显按目标变化、产品身份不变、原位置无残影、背景无矩形接缝、未选人物和物体无明显改变。
- 目标是同一最终流程人工视觉通过至少 9/10;未达到前不得作为完成证据。
已证伪方法
| 方法 | 模型/通道 | 视觉结果 | 失败原因 |
|---|---|---|---|
| 原图 + 红/青目标框操作图 | Nano Banana 2(GRSAI) | 1/3 | 柜体、桌子近似原图,模型经常忽略比例指令 |
| 原图 + 红/青目标框操作图 | Nano Banana Pro(RUXA) | 0/2 | 柜体实际略放大,桌子无变化;像素检测曾误判柜体成功 |
| 原图 + 红/青目标框操作图 | Qwen Image Edit Max | 0/2 | 把操作图当输出模板,生成白底拼贴并保留框线结构 |
| 原图 + 完整产品裁图 | Nano Banana 2(GRSAI) | 1/5 | 第二张图被当成重绘参考,白底椅被放大,衣架/桌子无变化 |
| 只编辑完整框选裁图,再贴回原图 | Nano Banana 2(GRSAI) | 1/5 | 局部重绘产生矩形接缝、重复桌椅或近似原图 |
| 只编辑完整框选裁图,再贴回原图 | Qwen Image Edit Max | 0/2 | 椅子款式被替换,柜体生成白色矩形背景块 |
| 只编辑完整框选裁图,再贴回原图 | Nano Banana 2 Edit(FAL) | 0/2 | 两次都未产生有效缩放,重试仍近似原图 |
| 只编辑完整框选裁图,再贴回原图 | Nano Banana Pro(RUXA) | 0/2 | 柜体无变化,竖图请求多次超过 180 秒 |
| 完整原图 + 83 字极简提示 | Qwen Image Edit Max | 0/4 | 改写整张构图、抽成白底商品图、桌椅重影,不能保真 |
| 完整原图 + 83 字极简提示 | Agnes Image 2.0 Flash | 0/4 | 白底被改成室内,柜体/书架/桌子尺寸基本未变 |
| GPT Image 2 + 产品蒙版 | FAL | 0/3 | 通用编辑仍会改写整幅背景或留下灰色旧产品轮廓;早期测试还发现旧适配器错误发送 mask_url,修正为 mask_image_url 后仍未达到要求 |
| 产品蒙版 + 通用 Object Removal | FAL | 1/3 | 掩膜外保持良好,但办公椅旧脚轮/阴影残留,桌椅重叠被识别为同一目标 |
| 产品蒙版补洞后只贴回局部 | FAL GPT Image 2 | 0/2 | 原背景虽保住,但旧产品区域出现明显灰色剪影 |
| 对生成背景做矩形羽化贴回 | FAL GPT Image 2 | 0/2 | 出现水平矩形接缝、色差和旧物体边缘 |
以上方法均保留在本记录中,不再作为后续默认方案重复尝试。
最终方案
最终只保留一条简单流程:
- 对用户完整框选区域执行一次产品抠图,得到产品蒙版和原产品透明像素。
- Finegrain Eraser 只负责按蒙版移除旧产品并修复背景,不理解比例、不重画产品。
- 本地按
targetRect精确缩放原产品透明像素并放回,产品身份和比例由代码锁定。 - 透明白底图直接使用透明空底板,不调用模型猜背景。
- 首遍检测到旧轮廓时,以上一遍完整结果做一次同掩膜顺序清理,再精确放回产品;第二遍接受有实际比例变化的最佳结果,避免误报门禁循环。
- 产品锁流程不执行旧的彩色标注清理,避免把衣架等棕色产品像素误当标记擦掉。
最终验收
证据图:10 张完整产品四联验收图
| 序号 | 样本 | 人工结果 | 说明 |
|---|---|---|---|
| 01 | 透明白底办公椅 | 通过 | 完整产品缩小,白底无旧轮廓 |
| 02 | 真实办公室办公椅 | 通过 | 旧椅和脚轮阴影清理干净,办公室保持 |
| 03 | 室内柜体 | 通过 | 柜体完整缩小,房间主体保持 |
| 04 | 人物旁旋转书架 | 通过 | 书架完整缩小,人物、沙发和灯保持 |
| 05 | 第二张室内柜体 | 通过 | 柜体完整缩小,无旧柜残影 |
| 06 | 沙发旁升降桌 | 通过 | 产品完整缩小,沙发与柜体保持 |
| 07 | 室内衣架 | 通过 | 衣架和衣物完整缩小,无标注清理破点 |
| 08 | 桌子与椅子严重重叠 | 失败 | 完整矩形框内两件产品像素相交,抠图把桌椅识别为同一目标并一起缩放 |
| 09 | 客厅推车 | 通过 | 推车完整缩小,地毯与沙发保持 |
| 10 | 窗边升降桌 | 通过 | 顺序清理移除旧底脚,产品完整缩小 |
人工视觉通过 9/10(90%)。接口返回状态不计入通过率;以上结论来自最终整图人工检查。
普通画布和“风格化(非 Pro)- 详情模式 - 生图结果区”均提交 operation: "scale-adjust" 到共享 /api/canvas/local-edit 路由,因此同步使用同一流程。
位置移动与模型光影扩展(2026-07-13)
稳定版本备份
- 在增加位置移动前,已把上面的比例调整稳定流程保存为提交
15b2d71a。 - 本地备份标签为
backup/canvas-scale-adjust-stable-20260713,对应原始稳定提交5349fece。 - 位置移动沿用同一个
scale-adjust操作,只在targetRect中心发生变化时启用新流程;纯比例调整继续走已经验证的旧流程。
最终位置移动流程
- 用完整产品蒙版提取原产品透明像素,同时用人物 AOS 分割判断产品是否与人物实质遮挡。
- 产品与人物发生遮挡时拒绝移动,避免手臂、衣服或身体被一起搬走,也避免产品留下人物形状的透明洞;人物与产品不相交时人物区域保持锁定。
- 由 GPT Image 2 Edit 根据旧产品精确蒙版移除原产品、脚轮和原投影,并补全被遮挡的背景;模型结果只在修复蒙版内合成,其他区域继续使用原图。
- 本地把原产品透明像素精确放入
targetRect,因此产品款式、大小和最终坐标不依赖模型猜测。 - 把移动后的完整图和“地面可编辑区域”再次交给 GPT Image 2 Edit,只要求它依据场景主光方向生成新的接触阴影和投影。
- 不直接采用第二次模型输出整图,而是提取模型在地面蒙版内生成的中性暗化场;产品像素和蒙版外像素完全锁定,避免模型复制产品、改尺寸或改变画幅。
- 模型光影接口超时或失败时,返回已验证的本地接触阴影版本作为兜底,并记录错误;本地阴影不是正常成功路径的最终光影来源。
已测试方法与结论
| 方法 | 结果 | 结论 |
|---|---|---|
| 原位置清理后直接精确移动 | 办公椅、推车可保持几何位置,但新位置光影偏弱 | 只适合作为第一阶段,不能作为最终结果 |
| 人物场景直接移动相交产品 | 书架连同人物手部一起移动,手臂破损 | 已禁止人物与产品实质遮挡的移动 |
| 人物 AOS 蒙版保护 | 人物蒙版正确;最初单通道处理错误产生扫描线和黑块 | Sharp 模糊、缩放后统一显式 extractChannel(0),修复通过 |
| 对被人物遮挡的产品做邻近像素补洞 | 出现三角形重复木纹 | 失败,已删除 |
| 四方向加权补洞 | 出现黑色楔形和空洞 | 失败,已删除 |
| 原图和目标框操作图整体交给模型 | 人物姿态和自然光影较好,但模型忽略精确目标框和尺寸,单次约 263 秒 | 不能承担几何移动,仅证明模型适合语义补全和光影 |
| 直接转移旧阴影 | 首版因通道错误出现黑色矩形;修正后仍无法适配新位置光源关系 | 只保留为接口失败兜底的一部分 |
| 宽区域模型重打光 | 模型在目标位置复制第二把椅子 | 失败,不采用模型整图 |
| 地面白色蒙版 + 固定 3:4 输出 | 仍出现重复椅子,且输出画幅变化 | 失败,改为 auto 并锁定原图坐标 |
| 直接替换模型地面蒙版像素 | 重复问题消失,但出现矩形色差接缝 | 失败,改为只提取暗化场 |
| 提取模型中值归一化暗化场 | 新接触阴影和投影可见,无重复产品、无矩形接缝、产品像素不变 | 通过,作为最终模型光影流程 |
| 模型清理旧产品后直接采用其画幅 | 模型返回 1536x2048,原图为 1760x2221,导致目标坐标偏移 | 修复为始终按原图画幅和坐标合成 |
| 模糊后阈值生成旧位置蒙版 | Sharp 阈值后仍存在灰度,办公椅底座和脚轮未被完全清理 | 改为逐像素二值化,只保留 0/255,验证通过 |
| 移动后旧轮廓门禁使用扩张修复蒙版 | 把未变化背景算入残留,产生误报 | 移动场景改为只检查精确原产品蒙版 |
| 移动后用暗色像素判断残影 | 自然深色地板和阴影触发误报 | 移动场景只使用产品相似度,暗色规则仅留给未移动的缩小场景 |
| 目标框悬空摆放 | 产品与沙发/地面关系不自然 | 拒绝作为验收样本,正式测试改为目标底边落地 |
本地视觉验收
- 真实办公室办公椅:旧椅、底座和脚轮已清理,产品按正式坐标移动;模型生成的新位置接触阴影和地面投影已通过暗化场合成,无重复产品和矩形接缝。
- 真实人物室内图:人物不与产品相交时,边桌可移动且人物保持不变;相交产品会在生成前明确拒绝。
- 最终正式光影合成统计:
appliedShadowStrength: 4741328、medianLumaDelta: -18、sampleCount: 719617。 - 真实模型阶段回放的最终本地结果为
/private/tmp/scale-adjust-office-chair-final-staged-replay.jpg。该回放使用同一套正式清理、坐标锁定和模型暗化场合成代码,人工视觉通过。
外部模型接口记录
- FAL 在连续回归期间出现过 HTTP 408、HTTP 400、
fetch failed、300 秒超时,以及v3b.fal.media下载连接超时。 - GPT Image 2 Edit 的真实旧位置清理和真实光影输出都分别成功过;最终视觉回放由这两份真实模型输出通过当前正式合成代码得到。
- 因上述外部接口波动,最后一轮未得到“同一次在线请求从清理到重打光全部成功”的证据;这属于供应商请求故障,不记为算法视觉失败。生产流程已在任一模型阶段失败时回退到本地验证结果,避免用户任务直接报错。
- 后续复测优先重复完整在线链路,不再重复表中已经证伪的补洞、整图替换和宽区域重绘方法。
复杂衣帽架语义回退(2026-07-14)
真实问题样本
- 原图尺寸为
1664x2496,目标是带两顶帽子、两件衣物、两个包、多个挂钩、立柱和圆底座的完整衣帽架。 - 完整源框为
{ x: 0.295, y: 0.225, width: 0.215, height: 0.515 };本轮回归缩小25%,中心保持不变,目标框为{ x: 0.321875, y: 0.289375, width: 0.16125, height: 0.38625 }。 - 早期使用的窄框漏掉蓝色衣物右侧、包和圆底座,属于输入几何错误,不再使用。
已测试方法与结论
| 方法 | 结果 | 结论 |
|---|---|---|
| AOS 在窄框或重叠裁图中直接提取完整产品 | 只提取帽子和部分白衣,遗漏包、蓝衣或底座 | 失败;空间分割低置信度时必须切换语义回退 |
| PhotoRoom/RMBG 直接抠取复杂产品组 | 分别遗漏挂件或直接失败 | 不用于该类多部件产品的最终提取 |
| 方向扩散、调和等本地像素补背景 | 墙面和木饰面出现涂抹纹理 | 失败,不再尝试 |
| Finegrain Eraser 使用完整矩形或产品蒙版 | 仍保留旧立柱、衣物或底座残影 | 失败,不作为复杂样本清理通道 |
| GPT Image 2 对整图直接清理 | 产品能移除,但构图被重排、尺寸变化且水印丢失 | 失败,不能直接采用整图结果 |
| GPT Image 2 只清理局部补丁 | 木饰面边界偏移;差分贴回又产生透明旧影和接缝 | 失败,不再使用补丁差分合成 |
| Nano Banana 2 使用原图和完整局部裁图重建背景 | 旧衣帽架完整移除,构图、窗户、床、床头柜和水印保持 | 通过,作为复杂产品背景清理模型 |
| GPT Image 2 在纯品红背景上提取完整产品组 | 两份候选均包含帽子、衣物、包、挂钩、立柱和圆底座 | 通过;本地按源图颜色覆盖率和几何完整度选优 |
纯品红色键初版阈值 44-112 |
产品边缘出现紫色溢色 | 失败;改为 28-190、反混色恢复和轻度 alpha 内收后通过 |
| 用宽矩形清理蒙版检查旧影 | 清洁背景被当作旧产品残留 | 误判;改为只按真实产品蒙版检查 |
| 接缝检测扫描新目标框内部 | 新立柱及其长阴影被当作竖向拼接缝 | 误判;目标框内部停止累计,框外背景继续严格检查 |
真实产品蒙版内使用宽松颜色相似度 56 和暗像素规则 |
深棕衣帽架与深色木饰面相近,清洁结果仍误报 | 误判;显式产品蒙版改用近原样阈值 20,暗像素规则只用于无显式蒙版回退 |
| Nano Banana 2 单次清理请求 | 一轮在 180 秒超时,下一轮约 52 秒成功 | 增加一次同模型清理重试;产品提取 Promise 复用,不重复提取 |
| GPT Image 2 环境光影模型 + 本地暗化场 | 窗边主光对应的墙面阴影可见,产品本体和框外构图保持 | 通过,作为最终光影步骤 |
最终流程
- AOS 仍先生成产品蒙版;蒙版触边、覆盖不足或高瘦复杂裁图自动标记为语义低置信度。
- Nano Banana 2 根据原图和完整产品裁图只重建产品背后的背景;清理与产品提取并行执行,清理超时只重试清理。
- GPT Image 2 把整套产品提取到纯品红背景,生成两份完整候选;代码完成色键、反混色去紫边、完整度与颜色保真评分。
- 选中产品透明像素严格按
targetRect缩放并合成,模型不负责猜测产品尺寸和坐标。 - 质量守卫使用真实产品蒙版检查旧影,接缝检测排除新产品占据区,但继续检查目标框外背景。
- 守卫通过后,GPT Image 2 只生成产品周围的环境光与阴影;代码提取暗化场并叠回锁定的产品和原背景。
最终验收
- 无缓存端到端测试批次:
coat-rack-production-flow-complete-v11。 - 最终原尺寸结果文件:
15-user-coat-rack-result.png。 - 自动守卫:
oldFootprintGhostDetected: false、rectangularSeamDetected: false、outsideChanged: false,候选passed: true。 - 光影统计:
appliedShadowStrength: 1146766、medianLumaDelta: 11、sampleCount: 374490。 - 完整链路耗时约
241799ms,结果SCALE_VERIFY_SUMMARY { failed: 0, passed: 1, total: 1 }。 - 人工原尺寸检查通过:两个帽子、两件衣物、两个包、全部挂钩、立柱和圆底座完整;旧尺寸产品、紫边和矩形接缝均不可见,窗边来光对应的墙面投影已生成。