rembg 專案整理:本地圖片背景移除工具

整理 danielgatis/rembg 的定位、安裝方式、CLI 用法、Python 呼叫、HTTP 服務、Docker 執行、模型選擇和適用場景,方便判斷它是否適合本地圖片背景移除流程。

rembg 是一個圖片背景移除工具,可以作為命令列工具、Python 函式庫、HTTP 服務或 Docker 容器使用。它的定位很直接:輸入一張圖,輸出帶透明通道的前景圖,適合產品圖、頭像、素材批次處理和自動化圖片處理流程。

這類工具最大的好處是可以本地跑。對於不想把原圖上傳到線上去背服務、需要批次處理圖片,或者想把背景移除接進腳本和業務系統的人來說,rembg 比網頁工具更容易自動化。

01 安裝方式

目前版本要求 Python >=3.11,<3.14。安裝時需要按硬體選擇後端:

1
pip install "rembg[cpu]"

如果需要命令列工具,加上 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
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
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))

如果你要做一個長期執行的圖片處理服務,session 複用比反覆呼叫命令列更合適。

05 啟動 HTTP 服務

rembg 也可以直接啟動 HTTP 服務:

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

啟動後可以存取:

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:偏服裝解析。
  • silueta:類似 u2net,但體積更小。
  • 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 的價值主要在批次吞吐。單張圖片偶爾處理時,環境安裝成本可能比省下的時間更貴。尤其是 Windows、CUDA、cuDNN、onnxruntime-gpu 版本不匹配時,CPU 版本反而更省心。

10 簡短判斷

rembg 的優點是簡單、開源、形態靈活:命令列能跑,Python 能接,HTTP 能調,Docker 能封裝。它很適合做「本地自動去背」的基礎元件。

但它不是魔法橡皮擦。背景複雜、主體邊緣細碎、透明材質、陰影保留、商業級精修,都可能需要人工或更專門的流程補充。把它放在批次自動化裡時,最好預留人工複檢或失敗樣本回收機制。

如果目標是快速給一批圖片去背景,並且希望流程留在本地,rembg 值得放進工具箱。

相關連結

记录并分享
使用 Hugo 建立
主題 StackJimmy 設計