Amazon 等平台要求商品主图必须使用纯白背景,Shopee、Lazada 和 TikTok Shop 上统一规格的正方形图片也会让商品页显得更专业。手工抠几百张图要花上好几天。rembg 是一款开源工具,可以在普通 CPU 服务器上运行 AI 抠图模型。本文介绍如何安装 rembg、对比各个模型,并用一个简短的脚本一次性把整个文件夹的商品照片处理成透明背景的 PNG 文件和正方形白底 JPG 主图。
apt install -y python3-venv
python3 -m venv /opt/rembg
/opt/rembg/bin/pip install "rembg[cpu,cli]"
/opt/rembg/bin/rembg --help
每个模型会在首次使用时自动下载并保存到 ~/.u2net,因此首次运行时服务器需要能访问互联网。
/opt/rembg/bin/rembg i photo.jpg cut-u2net.png # default model
/opt/rembg/bin/rembg i -m isnet-general-use photo.jpg cut-isnet.png # often cleaner edges
/opt/rembg/bin/rembg i -m birefnet-general photo.jpg cut-birefnet.png # most accurate, slower, more RAM
/opt/rembg/bin/rembg i -a photo.jpg cut-matting.png # alpha matting for hair and soft edges
从你的商品图库中挑选五张典型照片,分别用候选模型处理,在原始尺寸下对比边缘效果后再做选择。
cat > /opt/rembg/whitebg.py <<'EOF2'
import os, sys
from PIL import Image, ImageOps
from rembg import new_session, remove
src, dst = sys.argv[1], sys.argv[2]
size = int(os.environ.get("SIZE", "1600")) # square canvas in pixels
fill = float(os.environ.get("FILL", "0.85")) # share of the canvas the product fills
session = new_session(os.environ.get("MODEL", "isnet-general-use"))
for sub in ("png", "white"):
os.makedirs(os.path.join(dst, sub), exist_ok=True)
for name in sorted(os.listdir(src)):
if not name.lower().endswith((".jpg", ".jpeg", ".png", ".webp")):
continue
base = os.path.splitext(name)[0]
img = ImageOps.exif_transpose(Image.open(os.path.join(src, name))).convert("RGB")
cut = remove(img, session=session)
box = cut.getchannel("A").getbbox()
if not box:
print(name, "no object found, skipped", flush=True)
continue
cut = cut.crop(box) # trim the empty space around the product
cut.save(os.path.join(dst, "png", base + ".png")) # transparent version
scale = size * fill / max(cut.size)
cut = cut.resize((max(1, round(cut.width * scale)), max(1, round(cut.height * scale))),
Image.Resampling.LANCZOS)
canvas = Image.new("RGB", (size, size), (255, 255, 255))
canvas.paste(cut, ((size - cut.width) // 2, (size - cut.height) // 2), cut)
canvas.save(os.path.join(dst, "white", base + ".jpg"), quality=92)
print(name, "done", flush=True)
EOF2
脚本会自动校正手机照片的方向,去除背景,裁掉商品四周的空白,保存一份透明 PNG,然后把商品居中放到纯白(255, 255, 255)的正方形画布上,使商品约占画面的 85%。
mkdir -p /data/photos/in /data/photos/out # upload the original photos to /data/photos/in
cd /data/photos
nohup /opt/rembg/bin/python /opt/rembg/whitebg.py in out > whitebg.log 2>&1 &
tail -f whitebg.log
# Other sizes or models, for example:
SIZE=2000 FILL=0.8 MODEL=birefnet-general /opt/rembg/bin/python /opt/rembg/whitebg.py in out
结果分别保存在两个文件夹中:out/png 存放透明背景的抠图,可用于横幅、广告和设计;out/white 存放可直接上传的正方形主图。处理速度取决于模型和 CPU,建议先用 20 张照片计时,估算处理整个图库需要多长时间。
remove() 调用中加上 alpha_matting=True,处理单张图片时可使用 rembg i -a。这种方式速度较慢,只在必要时使用。不需要。每天处理几十到几百张图片,CPU 服务器完全够用。只有每天要处理成千上万张图片,或长期使用最大的模型时,GPU 才会带来明显差别。
rembg 自带一个小型 Web 服务(rembg s),提供简单的网页界面和 HTTP API。请让它只监听 127.0.0.1,再通过 Nginx 配置 HTTPS 和访问密码后对外提供,切勿直接开放在公网端口上。
多语言的商品标题、卖点和描述,请参阅 AI 批量生成多语言商品标题和描述;商品视频字幕,请参阅使用 faster-whisper 自动生成字幕。
如果按以上步骤操作后问题仍未解决,请提交工单联系 IMIDC 7×24 技术支持,并附上服务器 IP、CPU 和内存配置、所用模型以及 whitebg.log 的最后几行,方便工程师快速定位。