一批商品图要换背景,真正卡住流程的通常不是出图速度,而是规则没写死:同一批里有的图轮廓干净,有的图和背景黏在一起,用同一套抠图参数和同一段提示词跑,返工量可能比手动改还多。可以先把商品按「主体能不能干净分离」分成两组,再给每组固定背景替换与场景描述模板,最后用目录命名约定和一份可回退的任务清单兜住错误。
判断依据:轮廓闭合、材质不透明、与背景有明显明暗或色相差的商品,可以直接进批量换背景;玻璃、液体、毛发、镜面反光、边缘与背景同色的商品,建议先出带 alpha 的 PNG 再进批量。模板与命名规则先定稿,再用一份任务清单保证可回退,最后先跑 10 张记录失败类型。规则未定稿前不要放开全量,否则换了背景也说不清哪张是原始素材。
把商品按主体能否干净分离分成两组
分组的动作发生在批量任务之前,判据是「抠图这一步能不能在不人工修饰的条件下得到闭合轮廓」。适用场景是所有需要换背景的商品图;验证方式是拿原图做一次抠图预览,看边缘是否出现缺口、残留背景色或被打穿的孔洞。
| 判断点 | A 组:可直接批量换背景 | B 组:先修主体再进批量 | 对应处理方式 |
|---|---|---|---|
| 边缘 | 轮廓闭合,与背景有明暗或色相差 | 边缘发丝状、与背景同色、被遮挡 | B 组先补 alpha 通道,人工确认后再进批量 |
| 透明材质 | 不透明实体、无镂空 | 玻璃、亚克力、液体、半透明包装 | B 组保留原 alpha,禁止用纯色填充主体内部 |
| 毛发与絮状 | 无绒毛、无流苏 | 毛绒、羽毛、绳穗、细网孔 | B 组先手工或半自动修边,再单独导出 PNG |
| 反光与高光 | 哑光表面 | 金属、镜面、亮面覆膜、镜片 | B 组把高光层与主体一起保留,避免合成时被磨平 |
落到流程上,A 组可以走「抠图 + 背景合成」的一步式管线;B 组的输入要求是已经带透明通道的 PNG,批量环节只负责放背景,不再做抠图。风险边界在于:B 组如果为了省事直接丢进 A 组管线,透明和反光信息一旦被覆盖,单看输出图很难判断是模型问题还是素材问题。
为每组写好背景替换与场景描述模板
模板的作用是让同一批任务的描述顺序一致,减少同一 SKU 不同角度之间风格漂移。建议按固定骨架写:主体放置方式、环境类型、光源方向与软硬、台面或地面材质、景深与视角、阴影与反射要求。顺序固定后,改动只发生在具体值上,排查时容易定位是哪一项被改坏。
场景元素清单建议每张模板只写 3 到 5 个必须出现的元素(例如浅木台面、浅灰背景墙、窗外虚化绿植),其余留给模型自由发挥。禁止项不要用「不要乱」「干净一点」这类模糊表述,改成可以被检查的具体名词。
[A 组模板 · 台面场景]
主体:{sku} 商品,保持原始轮廓与比例,居中偏下,按角度填写直立或平放
背景:浅灰无缝背景墙,中性白平衡
光源:左前方 45 度柔和主光,右后方弱补光,色温与实拍保持一致
台面:哑光浅木色台面,主体底部有接触阴影
景深:浅景深,背景无杂点
禁止项:文字、数字、水印、logo、二维码、第二个商品、人物、原背景残留色块
[B 组模板 · 保留透明通道]
输入:已抠好的带 alpha PNG,本环节禁止再做抠图
背景:深灰渐变背景,与透明边缘形成对比
光源:左右双向柔光,避免在玻璃表面产生硬边高光
台面:可选透明亚克力倒影板,倒影不得遮挡主体轮廓
禁止项:填充主体内部、覆盖 alpha、文字水印、额外道具、原背景残留色块验证方式:从同一模板连续跑同一 SKU 的两个角度,比对主体位置和光源方向是否一致。若不一致,优先怀疑描述里有可自由解释的词,而不是先调采样参数。
约定批量文件的命名与目录结构
目录结构的目标是让任务、输出、版本一一对应,出错能退回到「哪一次、哪一张、哪个模板」。建议每次批量新建一个 run 目录,不覆盖上一次的结果。
fluxpic_batch/
├─ 01_src/
│ ├─ A_group/ # 可直接批量换背景的原图
│ │ └─ SKU1001_front_v1.jpg
│ └─ B_group/ # 输入必须是带 alpha 的 PNG
│ └─ SKU2007_front_v1.png
├─ 02_prompt/
│ ├─ A_background_template.txt
│ └─ B_background_template.txt
├─ 03_out/
│ └─ run_a01/ # 每次批量一个新目录,不覆盖旧结果
├─ 04_review/
│ └─ review_list.csv
└─ manifest.csv # 任务清单:sku,angle,version,group,src,prompt命名规则统一为 SKU_角度_版本,例如 SKU1001_front_v1.png,角度用小写英文(front、side、top、detail),版本用 v1、v2 递增。版本号只在素材或模板发生变化时递增,同一版本内改名视为错误操作。
文件数量校验用两条命令对比:先数任务清单,再数输出文件。两者数量应一致,出现差值时要能逐条解释。
wc -l < manifest.csv
find 03_out/run_a01 -type f -name '*.png' | wc -l写一段输出后的初级校验脚本骨架
这段脚本只做三件事:筛出命名不符规则的文件、筛出尺寸不对的文件、筛出疑似空图或纯色的文件,然后生成一份待人工复检清单。它不判断画面好不好看,那部分仍需人眼。
# check_batch.py 放在 fluxpic_batch 目录下执行
import csv
import re
from pathlib import Path
from PIL import Image, ImageStat
OUT = Path('03_out/run_a01')
NAME_RE = re.compile(r'^(?P<sku>[A-Z0-9\-]+)_(?P<angle>[a-z0-9]+)_(?P<ver>v\d+)\.(?P<ext>png|jpg|jpeg)$')
EXPECT_W, EXPECT_H = 2000, 2000 # 按实际交付规格填写
STD_MIN = 3.0 # 疑似空图的像素标准差下限,需按自己素材调整
rows = []
for p in sorted(OUT.rglob('*')):
if not p.is_file():
continue
problems = []
if not NAME_RE.match(p.name):
problems.append('命名不符 SKU_角度_版本')
try:
img = Image.open(p)
w, h = img.size
if (w, h) != (EXPECT_W, EXPECT_H):
problems.append('尺寸 {}x{}'.format(w, h))
std = ImageStat.Stat(img.convert('L')).stddev[0]
if std < STD_MIN:
problems.append('疑似空图 std={:.2f}'.format(std))
except Exception as e:
problems.append('无法读取: {}'.format(e))
if problems:
rows.append({'file': str(p), 'problems': ';'.join(problems)})
with open('04_review/review_list.csv', 'w', newline='', encoding='utf-8-sig') as f:
writer = csv.DictWriter(f, fieldnames=['file', 'problems'])
writer.writeheader()
writer.writerows(rows)
print('待复检 {} 个'.format(len(rows)))运行方法:安装 Pillow 后执行 python check_batch.py,再打开 review_list.csv。核对时先看 problems 列:命名错误的改名后重跑脚本;尺寸不符说明输出后处理或规格参数被改动;疑似空图需要打开原图确认是主体缺失还是主体本身就是大面积浅色。
先跑 10 张再放开批量,记录失败样本类型
抽样时优先挑最难的组合,透明材质、毛发、强反光各取若干,A 组和 B 组都要覆盖。这 10 张逐张打开看,把失败归到下面几类里,规则没改完之前不加量。
| 失败类型 | 典型表现 | 先改哪里 |
|---|---|---|
| 边缘残留 | 主体边缘出现原背景色描边 | 调整抠图参数,或把该 SKU 改归 B 组 |
| 透明丢失 | 玻璃、液体被打成灰白色实心块 | 确认 alpha 是否被覆盖,改 B 组模板与管线 |
| 高光丢失 | 金属表面反光被磨平 | 主体与高光层一起保留后再合成 |
| 禁止项出现 | 画面出现文字、第二个商品、多余道具 | 把禁止项写成具体名词,逐条补齐 |
| 位置与比例漂移 | 主体落点、占画幅比例与实拍不一致 | 固定居中偏下、比例描述,去掉可自由解释的词 |
| 命名与尺寸不符 | 缺版本号、尺寸非目标规格 | 检查输出后处理与命名规则是否同时生效 |
每次改完规则,留一条修订记录,便于下一批沿用同一套判断。
| 修订日期 | 失败类型 | 原规则 | 改后规则 | 影响分组 | 重新抽样张数 |
|---|---|---|---|---|---|
| (填写) | 边缘残留 | 统一走一步式抠图 | 该 SKU 先出 alpha PNG 再换背景 | B 组 | (填写) |
| (填写) | 禁止项出现 | 「画面保持干净」 | 明细列出文字、水印、第二商品等名词 | A/B 组 | (填写) |
小样本通过后再放开全量,此时目录命名、任务清单和复检清单已经能对上号,出错可以只重跑某一个 run 目录,而不必重做整批素材。