Сценарии использования и решения

Удаление фона с фото товаров нейросетью rembg: прозрачные PNG и главные фото на белом фоне массово

5 шагов 14 мин чтения 77 просмотров 0
Содержание

Маркетплейсы вроде Amazon требуют, чтобы главное фото товара было на чисто белом фоне, а карточки на Shopee, Lazada и TikTok Shop выглядят профессиональнее с единообразными квадратными изображениями. Вручную вырезать сотни фотографий — работа на несколько дней. rembg — инструмент с открытым исходным кодом, который запускает ИИ-модели для удаления фона на обычном CPU-сервере. В статье мы установим его, сравним модели и с помощью короткого скрипта за один запуск превратим папку с фото товаров в прозрачные 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: обычно даёт более чёткие края товара при сопоставимой скорости; хороший вариант по умолчанию для e-commerce.
  • 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 — квадратные главные изображения, готовые к загрузке. Скорость зависит от модели и процессора; сначала замерьте время на пакете из 20 фото, чтобы оценить, сколько займёт обработка всего каталога.

Шаг 5: Проверка и доработка сложных фото

  • Просматривайте PNG-файлы на тёмном фоне: остаточные ореолы и пропавшие фрагменты на нём заметны гораздо лучше, чем на белом.
  • Фото с волосами, мехом и мягкими краями обработайте повторно с alpha matting: добавьте alpha_matting=True в вызов remove() или используйте rembg i -a для отдельных файлов. Это медленнее, поэтому применяйте его только там, где нужно.
  • Модели удаляют тени. Если нужна естественная тень под товаром, добавьте её в графическом редакторе на основе прозрачного PNG.
  • Для белых товаров на белом холсте рассмотрите светло-серый фон для дополнительных изображений; требования к главным изображениям уточняйте в правилах каждого маркетплейса.

Частые вопросы

Нужна ли видеокарта (GPU)?

Нет. Для десятков или сотен фото в день достаточно CPU-сервера. GPU даёт ощутимую разницу, только если вы ежедневно обрабатываете многие тысячи изображений или постоянно используете самые крупные модели.

Могут ли коллеги пользоваться rembg без SSH?

В rembg есть небольшой веб-сервер (rembg s) с простой страницей и HTTP API. Запускайте его на 127.0.0.1 и публикуйте через Nginx с HTTPS и паролем, но никогда не открывайте напрямую на публичном порту.

Что ещё ИИ может автоматизировать в карточках товаров?

Заголовки, буллеты и описания на нескольких языках — см. статью о массовой генерации мультиязычных карточек товаров с помощью ИИ, а также субтитры к видео о товарах — см. статью об автоматических субтитрах с faster-whisper.

Если проблема не решена, создайте тикет — техническая поддержка IMIDC работает 24/7. Укажите IP сервера, процессор и объём RAM, использованную модель и последние строки whitebg.log, чтобы мы быстрее нашли причину.

Помог ли вам данный ответ?

Похожие руководства