rembg 背景移除完整指南:从安装、抠图到生产部署
【免费下载链接】rembgRembg is a tool to remove images background项目地址: https://gitcode.com/GitHub_Trending/re/rembg
电商商品图要抠图、证件照要换底色、视频流水线要逐帧去背景——这些需求落到底层都是同一个动作:把主体从背景里分离出来。rembg 就是专门做这件事的开源背景移除(抠图)工具:一条命令、几行 Python 或一个 HTTP 接口都能出结果。本文带你走通安装、批量处理、模型选型、服务化和 Docker 部署的完整链路。
项目定位
一句话:rembg 是一个支持 10+ 预训练模型的 Python 抠图工具,同时提供 CLI、Python 库、HTTP 服务器、Docker 容器四种出口。
| 能力面 | 说明 |
|---|---|
| 模型覆盖 | 内置 u2net、isnet、birefnet、sam 等 10+ 预训练模型,按场景切换 |
| 输入形态 | bytes、PIL Image、numpy array 均可直接传入 |
| 边缘质量 | 支持 Alpha Matting 与掩码后处理,处理毛发、半透明边缘 |
| 运行形态 | 命令行、脚本内嵌、HTTP 服务、容器化四条路线任选 |
| 效率设计 | 会话(session)复用机制,批处理时模型只加载一次 |
🚀 三步跑通第一次抠图
rembg 要求 Python>=3.10, <3.14。最省事的装法是库 + CLI 一起装:
pip install "rembg[cpu,cli]"然后处理第一张图,默认使用 u2net 模型,模型文件会自动下载到~/.u2net/:
rembg i examples/car-2.jpg examples/car-2.out.png✅ 跑通后你会拿到一张带透明通道的 PNG。核心逻辑都在 rembg/bg.py 的remove函数里,后续所有形态(CLI、服务、库)调用的都是它。
四种入口怎么选
同一个功能,四种接法,按你的场景对号入座:
| 使用形态 | 适合谁 | 入口 |
|---|---|---|
| CLI | 一次性处理、写 shell 脚本的人 | rembg i in.png out.png |
| Python 库 | 抠图只是自己系统里一个环节 | from rembg import remove |
| HTTP 服务 | 多端共享、Web/移动端调接口 | rembg s --port 7000 |
| Docker | 不想污染本机 Python 环境、要容器化上线 | docker run danielgatis/rembg |
GPU 环境把[cpu]换成[gpu](NVIDIA/CUDA)或[rocm](AMD),详见 pyproject.toml 中的 extras 定义。
深入用法:批处理与服务化两条线
批处理:文件夹与视频流
CLI 的p子命令处理整个文件夹,加-w变成监听模式,新文件落盘即处理:
rembg p ./in ./out # 遍历文件夹 rembg p -w ./in ./out # 监听模式,持续消费新文件在 Python 侧,批处理的关键是会话复用——new_session只建一次,避免每张图重复加载模型:
from pathlib import Path from rembg import new_session, remove session = new_session("u2net") # 模型只加载一次 for f in Path('in').glob('*.png'): Path('out').join_path(f.name).write_bytes(remove(f.read_bytes(), session=session))视频帧这种 RGB24 二进制流用b子命令接,典型玩法是挂在 FFmpeg 后面逐帧抠图:
ffmpeg -i in.mp4 -an -f rawvideo -pix_fmt rgb24 pipe:1 | rembg b 1280 720 -o out/f-%03d.png🔌 服务化:一个 FastAPI 接口
s子命令把 rembg 起成 HTTP 服务,接口文档在http://localhost:7000/api,实现见 rembg/commands/s_command.py:
rembg s --host 0.0.0.0 --port 7000 --log_level info调用侧两种姿势——传 URL 或传文件,参数(模型、Alpha Matting 等)以 query/form 形式附带:
curl -s "http://localhost:7000/api/remove?url=http://example.com/in.png" -o out.png curl -s -F file=@in.jpg -F model=u2net -F a=true "http://localhost:7000/api/remove" -o out.png🎯 按场景选模型
模型注册在 rembg/sessions/ 下,常用模型的取舍如下:
| 模型 | 体积 | 适用场景 |
|---|---|---|
| u2net | 176MB | 通用,精度与速度均衡,默认选择 |
| u2netp | 4.7MB | 轻量、大批量、资源受限 |
| isnet-general-use | 104MB | 通用高质量分割 |
| isnet-anime | 104MB | 动漫角色 |
| u2net_human_seg | — | 人像 |
| birefnet-general | 175MB | 高精度通用 |
| birefnet-general-lite | 45MB | 移动端、轻量高精度 |
| sam | 编码器+解码器 | 交互式点提示分割 |
决策建议就两条:拿不准就用 u2net 起步,追轻量换 u2netp 或 birefnet-general-lite;需要人点提示精修就上 sam(通过-x传sam_prompt)。
🐳 生产化部署:容器上线 + 性能调优
Docker 是最短的生产路径。CPU 场景直接用官方镜像,挂载输入输出目录即可:
docker run -v $(pwd)/input:/rembg danielgatis/rembg i input.png output/output.pngNVIDIA GPU 场景用仓库自带的 Dockerfile_nvidia_cuda_cudnn_gpu 构建:
docker build -t rembg-gpu -f Dockerfile_nvidia_cuda_cudnn_gpu . docker run --rm -it --gpus all -v $PWD:/rembg rembg-gpu i -m birefnet-general in.png out.png要常驻服务,仓库已提供 docker-compose.yml,核心就是把s命令跑在容器里、映射 7000 端口:
services: app: build: . command: ["s"] ports: - 7000:7000docker-compose up -d之后,7000 端口即是可对外调用的抠图 API。
⚡调到能用,主要抓三件事:
- 会话复用:服务与批处理都用
new_session建好的 session 传参,模型只加载一次,这是最大的一档提速; - 内存:大批量处理时别一次性把图片全部读进内存,按批消费,并周期性
gc.collect()回收; - 重试:对偶发异常加指数退避重试(等待时间随次数递增),失败到上限再抛出。
⚠️ 避坑手册
1. 模型下载失败/很慢原因:默认从网络拉取到~/.u2net/,网络受限环境会卡住。 解法:手动下载模型文件放入~/.u2net/,或部署机预置模型目录。
2. GPU 加速不生效原因:CUDA/cuDNN 版本与 onnxruntime-gpu 不匹配。 解法:对照官方 onnxruntime 兼容性矩阵核对版本,确认装的是onnxruntime-gpu而非onnxruntime;实在不行退回[cpu]后端,功能不受影响。
3. 单图处理慢原因:每次调用都新建会话加载模型,或默认模型偏重。 解法:复用 session;高吞吐场景换 u2netp / birefnet-general-lite;有卡就上 GPU。
4. 边缘毛糙、发丝粘连原因:默认掩码粒度粗。 解法:启用 Alpha Matting(CLI 加-a,库传alpha_matting=True),再按画面微调af(前景阈值)、ab(背景阈值)、ae(侵蚀尺寸)。
5. Python 版本装不上原因:rembg 要求 Python>=3.10, <3.14。 解法:确认python --version在区间内,必要时用虚拟环境隔离。
收尾
上线前最后核对一遍:Python 版本在 3.10–3.13、onnxruntime 后端与硬件匹配、模型文件就位、磁盘预留 1–2GB、内存建议 4GB+、日志与重试机制已配好——这六项齐了,服务基本可以打生产。
rembg 把"抠图"从一堆调参脚本压缩成了一行命令、一个函数或一个接口,选对模型、接对出口,剩下的就是量。你在部署或模型选型上踩过什么坑,欢迎在评论区聊聊。
【免费下载链接】rembgRembg is a tool to remove images background项目地址: https://gitcode.com/GitHub_Trending/re/rembg
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考