用 Python 批量生成 AI 产品图的完整方案:从选模型到自动化脚本

0 阅读4分钟

上个月公司让我研究一下能不能用 AI 批量出产品图。背景是 SKU 库里 500 多个产品需要社交媒体营销素材,以前全靠设计师一张张做,排期排到两个月后。

研究了一周,最后跑通了。这里整理一下从选模型、写 prompt 模板、到跑通自动化脚本的完整过程。


模型选择:为什么用 FLUX

AI 产品图生成的核心需求是精确可控——你需要白色背景它就得是白色背景,说产品居中就得居中,不能让模型自由发挥。

基于这个需求我测了几个模型。DALL-E 3 画面好看但对构图指令遵循不够,经常自作主张加装饰。Stable Diffusion XL 效果还行但文字渲染几乎不可用,图上有 slogan 的场景直接废了。FLUX.1 [dev] 在 prompt 遵循度上明显领先——你描述的空间关系、背景、光线它都能比较准确地还原。

FLUX.1 是 Black Forest Labs 的开源模型,团队有 Stable Diffusion 核心作者 Robin Rombach。它使用了多模态扩散 Transformer 架构,相比 SD 系列的 U-Net 架构有本质升级,在文字渲染和画面组合生成方面进步很大。

综合下来产品图场景 FLUX 目前是最适合的。

Prompt 工程:这才是核心

批量生成最容易忽视的是 prompt 模板设计。写对了一张图的 prompt 不难,难的是写出能稳定生成 500 张风格统一的图的模板

思路是把 prompt 拆成"固定部分"和"变量部分":

def build_prompt(name, desc, style="minimal"):
    base = {
        "minimal": (
            f"Commercial product photography of {name}, {desc}, "
            f"clean white background, centered composition, "
            f"soft studio lighting from above, slight shadow beneath product, "
            f"high-end e-commerce style, sharp focus, 4K"
        ),
        "lifestyle": (
            f"Lifestyle product photo of {name}, {desc}, "
            f"placed on a natural wooden surface, "
            f"soft natural daylight from a large window on the left, "
            f"shallow depth of field, warm color temperature, editorial style"
        ),
    }
    return base.get(style, base["minimal"])

几个经验:

固定"光线方向"很重要。 不指定的话模型每次随机给一个光照角度,500 张图放一起看起来很乱。我固定了 "soft studio lighting from above" 之后一致性好了很多。

用英文写 prompt。 目前主流模型对英文的理解都比中文稳定。中文 prompt 偶尔会出现理解偏差——比如"极简"有时被理解成"极少"导致元素缺失。

不要在 prompt 里写文字内容。 虽然 FLUX 的文字渲染已经很强了,但批量场景下出错率还是不低。产品名、价格这些后期用编辑工具叠加更稳。

上线前先跑 10-20 张测试。 在小样本上调整比跑完 500 张再返工高效太多。

自动化脚本

API 我用的 WaveSpeedAI,之前做另一个视频项目时用过它的 SDK,图片生成也在里面,就没折腾别的了。FLUX [dev] 做了推理加速,实测一张图 2-3 秒,单张费用大约 $0.012。

import wavespeed
import pandas as pd
import requests
from pathlib import Path
from concurrent.futures import ThreadPoolExecutor, as_completed

OUTPUT_DIR = Path("./output_images")
OUTPUT_DIR.mkdir(exist_ok=True)

def generate_and_save(row):
    sku = row["sku"]
    prompt = build_prompt(row["product_name"], row["description"], row.get("style", "minimal"))
    try:
        result = wavespeed.run("wavespeed-ai/flux-dev", {"prompt": prompt, "size": "1024*1024"})
        img = requests.get(result["outputs"][0]).content
        (OUTPUT_DIR / f"{sku}.png").write_bytes(img)
        return {"sku": sku, "status": "ok"}
    except Exception as e:
        return {"sku": sku, "status": "fail", "error": str(e)}

df = pd.read_excel("products.xlsx")
results = []
with ThreadPoolExecutor(max_workers=5) as pool:
    futures = {pool.submit(generate_and_save, row): row["sku"] for _, row in df.iterrows()}
    for f in as_completed(futures):
        r = f.result()
        results.append(r)
        print(f"[{len(results)}/{len(df)}] {r['sku']} - {r['status']}")

success = sum(1 for r in results if r["status"] == "ok")
print(f"完成: {success}/{len(df)}")

并发数设 5 就好。一开始开了 20,直接 429 了。5 个并发下来 500 张图大概 40 分钟跑完。

Excel 格式四列:sku、product_name、description、style。

质量把控

跑完之后肯定要过一遍。500 张缩略图铺开扫一遍大概 20 分钟,把有问题的标出来。

实际数据:约 80% 一次性可用,15% 调整 prompt 重跑后通过(通常是背景不够干净或产品角度不对),5% 需要人工介入。这个通过率对批量场景是可以接受的。

成本

API 费用方面,500 张 1024x1024 的图大约 6(按6(按 0.012/张算),折合人民币四十多块。

对比设计师外包一张产品图 ¥50-200 的市场价,差距很明显。当然 AI 出的图替代不了所有场景。品牌主图、详情页头图需要创意和精细设计的还是得设计师来。AI 更适合量大、标准化、对创意要求不高的场景——SKU 列表图、社交媒体素材、A/B 测试变体。

注意图片比例

这个差点坑了我。一开始全部生成 1:1,结果发现不同平台要不同比例。后来改成按目标平台分批跑:

  • 淘宝/天猫主图:800x800(1:1)
  • 小红书:1080x1440(3:4)
  • Instagram:1080x1080(1:1)
  • 抖音/TikTok:1080x1920(9:16)

生成时直接指定对应尺寸比后期裁剪好——裁剪可能切掉产品一部分,生成时模型会自动适配构图。


总结:AI 批量生成产品图技术上完全可行了,核心是选对模型(FLUX 在产品图场景表现最好)、设计好 prompt 模板(固定风格,只替换产品信息)、跑通自动化脚本。有类似需求的可以试试,有问题评论区聊。