Маркетплейсы вроде Amazon требуют, чтобы главное фото товара было на чисто белом фоне, а карточки на Shopee, Lazada и TikTok Shop выглядят профессиональнее с единообразными квадратными изображениями. Вручную вырезать сотни фотографий — работа на несколько дней. rembg — инструмент с открытым исходным кодом, который запускает ИИ-модели для удаления фона на обычном CPU-сервере. В статье мы установим его, сравним модели и с помощью короткого скрипта за один запуск превратим папку с фото товаров в прозрачные 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 — квадратные главные изображения, готовые к загрузке. Скорость зависит от модели и процессора; сначала замерьте время на пакете из 20 фото, чтобы оценить, сколько займёт обработка всего каталога.
alpha_matting=True в вызов remove() или используйте rembg i -a для отдельных файлов. Это медленнее, поэтому применяйте его только там, где нужно.Нет. Для десятков или сотен фото в день достаточно CPU-сервера. GPU даёт ощутимую разницу, только если вы ежедневно обрабатываете многие тысячи изображений или постоянно используете самые крупные модели.
В rembg есть небольшой веб-сервер (rembg s) с простой страницей и HTTP API. Запускайте его на 127.0.0.1 и публикуйте через Nginx с HTTPS и паролем, но никогда не открывайте напрямую на публичном порту.
Заголовки, буллеты и описания на нескольких языках — см. статью о массовой генерации мультиязычных карточек товаров с помощью ИИ, а также субтитры к видео о товарах — см. статью об автоматических субтитрах с faster-whisper.
Если проблема не решена, создайте тикет — техническая поддержка IMIDC работает 24/7. Укажите IP сервера, процессор и объём RAM, использованную модель и последние строки whitebg.log, чтобы мы быстрее нашли причину.