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 设计