应用场景与解决方案

AI 批量抠图教程:用 rembg 批量去除商品图片背景,生成透明 PNG 与白底主图

5 个步骤 8 分钟阅读 20 次阅读 0
本文目录

Amazon 等平台要求商品主图必须使用纯白背景,Shopee、Lazada 和 TikTok Shop 上统一规格的正方形图片也会让商品页显得更专业。手工抠几百张图要花上好几天。rembg 是一款开源工具,可以在普通 CPU 服务器上运行 AI 抠图模型。本文介绍如何安装 rembg、对比各个模型,并用一个简短的脚本一次性把整个文件夹的商品照片处理成透明背景的 PNG 文件和正方形白底 JPG 主图。

只处理你自己拥有或已获授权使用的图片。上传前请检查处理效果:细线缆、透明玻璃、毛绒和头发是所有抠图模型最难处理的情况。

步骤 1:安装 rembg

apt install -y python3-venv
python3 -m venv /opt/rembg
/opt/rembg/bin/pip install "rembg[cpu,cli]"
/opt/rembg/bin/rembg --help

每个模型会在首次使用时自动下载并保存到 ~/.u2net,因此首次运行时服务器需要能访问互联网。

步骤 2:先用单张照片测试并选择模型

/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
  • u2net:默认的通用模型。
  • isnet-general-use:速度相近,商品边缘通常更干净利落,适合作为电商场景的默认选择。
  • birefnet-general:处理复杂照片时最精确,但速度要慢好几倍,内存占用也更高。
  • u2netp:小巧快速的模型,适合快速预览。

从你的商品图库中挑选五张典型照片,分别用候选模型处理,在原始尺寸下对比边缘效果后再做选择。

步骤 3:创建批处理脚本

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%。

步骤 4:批量处理整个文件夹

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 张照片计时,估算处理整个图库需要多长时间。

步骤 5:检查并修复难处理的图片

  • 在深色背景上查看 PNG 文件:残留的白边光晕和被误删的部分,在深色背景上比在白色背景上容易发现得多。
  • 对于头发、毛绒和柔和边缘,请对这些照片启用 alpha matting 重新处理:在 remove() 调用中加上 alpha_matting=True,处理单张图片时可使用 rembg i -a。这种方式速度较慢,只在必要时使用。
  • 模型会把阴影一并去除。如果希望商品下方保留自然的阴影,可以在设计工具中基于透明 PNG 自行添加。
  • 白色商品放在白色画布上时,副图可以考虑改用浅灰色背景;主图要求请查阅各平台的规则。

常见问题

需要 GPU 吗?

不需要。每天处理几十到几百张图片,CPU 服务器完全够用。只有每天要处理成千上万张图片,或长期使用最大的模型时,GPU 才会带来明显差别。

同事不登录 SSH 也能使用吗?

rembg 自带一个小型 Web 服务(rembg s),提供简单的网页界面和 HTTP API。请让它只监听 127.0.0.1,再通过 Nginx 配置 HTTPS 和访问密码后对外提供,切勿直接开放在公网端口上。

AI 还能为商品上架自动完成哪些工作?

多语言的商品标题、卖点和描述,请参阅 AI 批量生成多语言商品标题和描述;商品视频字幕,请参阅使用 faster-whisper 自动生成字幕。

如果按以上步骤操作后问题仍未解决,请提交工单联系 IMIDC 7×24 技术支持,并附上服务器 IP、CPU 和内存配置、所用模型以及 whitebg.log 的最后几行,方便工程师快速定位。

这篇文章有帮助吗?

相关教程