Skip to content

商品图平面化

把穿着照 / 实物商品照转成干净完整的平铺商品图(服装俯拍平铺,帽子正视 15 度)。

起因是 2026-08-14 做格子拼布提取验证时发现,「照片 → 平铺商品照」是生图模型的强项, 三样张验证下来保真度远超直接提取,于是把这一步独立成服务。

  • 本地:D:\Aproject\商品图平面化\
  • 仓库:LongJie686/flatlay-service(master 分支,私有)
  • 线上:extract.xingjilong.top/flatlay/,pm2 flatlay127.0.0.1:7873/opt/flatlay
  • 需求台账:.claude\需求清单.md

链路

网页上传 → toapis 传图拿 URL → kie gpt-image-2 生成(固定 1K,约 0.11 元/张)
        → 失败换 toapis 兜底 → 结果落盘

技术栈是 FastAPI,不是 Gradio。相关笔记:FastAPI

提示词

来自当日验证,措辞是逐句验过的,改前先干跑

  • 服装版:表面图案必须补全 + 网格/拼布/格纹完整性(行列数与实物一致、被遮挡的格子要重建、 禁止用素色顶替)+ 双袖独立禁互拷 + 绝对保真 + 文字逐字。
  • 帽版:正视 15 度。

局限:帽子品类正视图只展示前面,后面板不可见。需要全面展开的走 元素提取

复用与漂移风险

providers.py(AIMD 上传闸门)、metrics.py(active 账本,safe_restart 空闲闸门直接可用)、 config.py 三件整体来自元素提取 v3 的 2026-08-14 版本。

这三件与元素提取、创意生图同源,但尚未纳入漂移检测D:\Aproject\工作流\tools\check_drift.py 目前只比对元素提取 v3 与创意生图)。 元素提取侧修 bug 时要人工确认是否同步过来。

可靠性三件(2026-08-17 完善包)

上线三天零使用,趁着没流量补齐了与元素提取的服务形态差距:

  1. 生图重试:kie 2 次 + 2 秒退避 → 换 toapis 2 次(原先各只有 1 次)。
  2. 轮询超时续查同一 taskId:厂商已经扣过费,重提等于付两次钱。语义抄元素提取的 PollTimeout
  3. 内容审核拒绝短路:跳过同通道剩余重试,但仍然换厂商试;标记集抄元素提取 2026-08-12 的实测结果。

其他设计

  • 防重复提交:上传时流式算 md5,同图同品类 10 分钟内已有非失败任务就返回 409 并带上既有任务号。 重跑接口不受这个限制。
  • 重跑带纠正备注:done / failed 任务一键重跑,共用原图;删除任务时原图只在无其他引用时才删。 备注按 USER CORRECTION 模板注入提示词最前面。
  • 任务持久化用 SQLite(data/tasks.db)。重启后的孤儿任务一律判失败提示重提—— 单任务成本低,不值得做孤儿恢复。相关笔记:SQLite
  • 上传和结果目录有 5GB 水位线,自动清最旧的。
  • 提交人体系走门户 verify 换姓名(抄视频生成的 _portal_session),列表按提交人筛选。
  • 全局监控 allmon 数据源加了 /flatlay/api/metrics,字段与元素提取同构。

数据库迁移

tasks 表用 ALTER 补了 submitter / note / src_md5 三列,生产库无损升级, 8-14 的老任务全部保留。相关笔记:MySQL 分库分表思路

上线验证:safe_restart 0 秒等待,PID 908390 → 1830267; 生产 E2E(kie 140.6 秒)+ 防重 409 复验通过。

基于 VitePress 构建