rembgプロジェクト整理:ローカル画像背景除去ツール

danielgatis/rembg の位置づけ、インストール方法、CLI の使い方、Python からの呼び出し、HTTP サーバー、Docker 実行、モデル選択、適した用途を整理し、ローカル画像背景除去フローに合うか判断しやすくする。

rembg は画像の背景を除去するツールです。コマンドラインツール、Python ライブラリ、HTTP サーバー、Docker コンテナとして使えます。役割はとても明確で、画像を入力すると、透明チャンネル付きの前景画像を出力します。商品画像、プロフィール画像、素材の一括処理、自動画像処理フローに向いています。

この種のツールの大きな利点は、ローカルで動かせることです。元画像をオンラインの背景除去サービスへアップロードしたくない場合、大量の画像を処理したい場合、背景除去をスクリプトや業務システムに組み込みたい場合、rembg はWebツールより自動化しやすい選択肢です。

01 インストール方法

現在のバージョンは Python >=3.11,<3.14 を要求します。インストール時はハードウェアに合わせてバックエンドを選びます。

1
pip install "rembg[cpu]"

CLI も必要な場合は cli を追加します。

1
pip install "rembg[cpu,cli]"

NVIDIA CUDA 環境では GPU 版をインストールできます。

1
pip install "rembg[gpu,cli]"

AMD ROCm 環境では、先に ROCm 公式手順に従って onnxruntime-rocm を入れ、その後でインストールします。

1
pip install "rembg[rocm,cli]"

GPU 版のつまずきどころは、多くの場合 rembg 本体ではなく、onnxruntime-gpu、CUDA、cuDNN、ドライバーのバージョンが合っているかです。うまく入らないときは、まず CPU 版で処理フローが動くことを確認してから GPU 環境を調整すると、無駄な遠回りを減らせます。

02 CLI サブコマンド

CLI をインストールすると、ターミナルで rembg を直接使えます。主なサブコマンドは 4 つです。

  • i:単一ファイルを処理する。
  • p:フォルダー全体を処理する。
  • s:HTTP サーバーを起動する。
  • b:RGB24 ピクセルのバイナリストリームを処理する。FFmpeg と組み合わせる場面でよく使います。

ヘルプを確認します。

1
2
rembg --help
rembg i --help

ローカル画像を1枚処理します。

1
rembg i input.png output.png

リモート画像をパイプで入力します。

1
curl -s http://input.png | rembg i > output.png

モデルを指定します。

1
rembg i -m u2netp input.png output.png

mask だけを出力します。

1
rembg i -om input.png mask.png

alpha matting を有効にします。

1
rembg i -a input.png output.png

-a は髪の毛、細い輪郭、半透明の境界を自然にできる場合があります。ただし処理は遅くなり、すべての画像で明確に改善するわけではありません。

03 フォルダーの一括処理

一括処理は rembg の実用的な機能です。元画像を1つのディレクトリに入れ、結果を別のディレクトリへ出力できます。

1
rembg p path/to/input path/to/output

ディレクトリの変更を監視し、新規または更新された画像を自動処理します。

1
rembg p -w path/to/input path/to/output

このモードは、ダウンロードスクリプト、商品画像整理、素材フォルダーと組み合わせやすいです。たとえば処理待ち画像を input に入れると、rembg が透明 PNG を output に自動生成します。

04 Python ライブラリとして使う

自分のスクリプトに組み込むなら、もっとも簡単なのは remove を使う方法です。

1
2
3
4
5
6
7
from rembg import remove

with open("input.png", "rb") as i:
    with open("output.png", "wb") as o:
        input_data = i.read()
        output_data = remove(input_data)
        o.write(output_data)

PIL 画像を直接処理することもできます。

1
2
3
4
5
6
from rembg import remove
from PIL import Image

input_image = Image.open("input.png")
output_image = remove(input_image)
output_image.save("output.png")

一括処理では session を再利用し、画像ごとにモデルを初期化し直さないようにするのがおすすめです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
from pathlib import Path
from rembg import remove, new_session

session = new_session()

for file in Path("input").glob("*.png"):
    output = file.parent / f"{file.stem}.out.png"
    with open(file, "rb") as i:
        with open(output, "wb") as o:
            o.write(remove(i.read(), session=session))

長時間動く画像処理サービスを作るなら、CLI を毎回呼ぶより session を再利用するほうが向いています。

05 HTTP サーバーを起動する

rembg は HTTP サーバーとして直接起動することもできます。

1
rembg s --host 0.0.0.0 --port 7000 --log_level info

起動後は次の URL にアクセスできます。

1
http://localhost:7000/api

URL から背景を除去します。

1
curl -s "http://localhost:7000/api/remove?url=http://input.png" -o output.png

ローカル画像をアップロードします。

1
curl -s -F file=@input.jpg "http://localhost:7000/api/remove" -o output.png

API だけが必要で Gradio UI が不要なら、UI を無効にしてアイドル時の CPU 使用率を下げられます。

1
rembg s --no-ui

サーバーモードは、社内ツール、自動化フロー、ほかのアプリケーションから呼び出す用途に向いています。ただし完全な画像アセット管理システムではありません。認証、レート制限、キュー、ファイル削除などは外側で補う必要があります。

06 Docker 実行

CPU 版は公式イメージをそのまま使えます。

1
docker run -v .:/data danielgatis/rembg i /data/input.png /data/output.png

CUDA 加速にはホスト側の NVIDIA Container Toolkit が必要で、多くの場合、プロジェクト内の Dockerfile_nvidia_cuda_cudnn_gpu から自分でイメージをビルドします。

1
docker build -t rembg-nvidia-cuda-cudnn-gpu -f Dockerfile_nvidia_cuda_cudnn_gpu .

実行例です。

1
2
3
4
5
docker run --rm -it --gpus all \
  -v /dev/dri:/dev/dri \
  -v $PWD:/data \
  rembg-nvidia-cuda-cudnn-gpu \
  i -m birefnet-general /data/input.png /data/output.png

公式 README では、GPU イメージは CPU イメージよりかなり大きく、モデルファイルはイメージに含まれないと説明されています。モデルの再ダウンロードを避けるには、モデルディレクトリをマウントします。

1
docker run -v /path/to/models:/root/.u2net ...

07 モデル選択

rembg は初回使用時にモデルを ~/.u2net/ へ自動ダウンロードします。よく使われるモデルは次の通りです。

  • u2net:一般用途向けの汎用モデル。
  • u2netp:軽量版で、速度とサイズの面で扱いやすい。
  • u2net_human_seg:人物分割寄り。
  • u2net_cloth_seg:衣服解析寄り。
  • siluetau2net に近いが、より小さい。
  • isnet-general-use:汎用用途向けの新しいモデル。
  • isnet-anime:アニメキャラクター分割寄り。
  • birefnet-general:README の例で汎用画像に使われているモデル。
  • sam:プロンプト点などの追加パラメータと組み合わせて使える。

実際の利用では、モデル名だけで決めないほうがよいです。商品画像、人物、二次元画像、複雑な背景、透明物体では求める挙動が違います。代表的な画像を何枚か選び、複数モデルで試し、輪郭、抜け、誤除去、速度を見てからデフォルトモデルを決めるのが安定します。

カスタム .onnx モデルを使う場合は、ファイルをデフォルトのモデルディレクトリ ~/.u2net/ に置き、必要に応じて次を設定します。

1
MODEL_CHECKSUM_DISABLED=1

これにより、チェックサム処理で rembg が置いたモデルファイルを上書きするのを避けられます。

08 向いている場面

rembg は次のようなタスクに向いています。

  • 透明背景の商品画像を一括生成する。
  • プロフィール画像、証明写真、素材画像から前景を抽出する。
  • 背景除去を Python スクリプトやバックエンドサービスに組み込む。
  • 社内ネットワークに簡単な背景除去 API を置く。
  • FFmpeg パイプで動画フレームや連番画像を処理する。
  • プライバシーや素材の権利に敏感で、第三者のオンラインサービスへアップロードしたくない。

あまり向いていないのは次のような場合です。

  • 人手レベルのエッジ修正や複雑な透明素材が必要。
  • すべての画像に安定した商業写真レベルの品質が必要。
  • 背景除去だけでなく、完全なオンラインデザインツールが欲しい。
  • Python / Docker 環境を保守したくない。
  • GPU ドライバー、CUDA、ROCm 環境がすでに混乱していて、すぐ本番投入したい。

09 使い方のおすすめ

たまに画像を処理するだけなら、CPU 版で十分です。

1
pip install "rembg[cpu,cli]"

数千枚を一括処理するなら、次を優先して考えるとよいです。

  • Python session を再利用する。
  • モデルディレクトリを固定し、再ダウンロードを避ける。
  • 入力、出力、モデルファイルは SSD に置く。
  • まず小さなバッチでモデル効果を試す。
  • その後で GPU 加速を導入するか決める。

GPU の価値は主に一括処理のスループットです。たまに1枚処理する程度なら、環境構築コストのほうが節約できる時間より高くつくことがあります。特に Windows で CUDA、cuDNN、onnxruntime-gpu のバージョンが合わない場合は、CPU 版のほうが現実的です。

10 短い判断

rembg のよいところは、シンプルで、オープンソースで、使い方の形が柔軟なことです。CLI で動き、Python から呼べて、HTTP でも使え、Docker でまとめることもできます。ローカル自動背景除去の基礎コンポーネントとして扱いやすいツールです。

ただし魔法の消しゴムではありません。複雑な背景、細かい被写体の輪郭、透明素材、影の保持、商業レベルのレタッチでは、人手や専用ワークフローが必要になることがあります。一括自動化に入れるなら、人による確認や失敗サンプルの回収手順を残しておくほうが安全です。

目的が「画像群の背景をすばやく除去し、処理をローカルに保つこと」なら、rembg はツール箱に入れておく価値があります。

関連リンク

记录并分享
Hugo で構築されています。
テーマ StackJimmy によって設計されています。