用Rembg轻松移除图片背景:3步上手,5种模型挑选方式
【免费下载链接】rembgRembg is a tool to remove images background项目地址: https://gitcode.com/GitHub_Trending/re/rembg
Rembg 是一个 Python 自动抠图(背景移除)库:给它一张照片,它还你一张透明 PNG,不用 PS、不用手动描边。如果你处理过电商产品图、换过证件照底色,这套工具能把原本半小时的活压缩到一行代码。
效果先看:产品图和人物图长这样
最典型的两个痛点场景:
- 电商产品图:商品摆在杂乱的桌面上,上架前得把背景"清"掉。手动抠车、抠鞋这种边缘清晰的物体反而最费时间。
- 人像/证件照:头发丝、耳朵轮廓这些地方手动选区永远扣不干净,而换底色又要求边缘半透明过渡自然。
下面这两组是仓库自带的样例,左是原图,右是 rembg 背景移除后的结果:
人物那张能放大看头发边缘——默认模型直接就能给出可用的半透明过渡,这是它和"二值化裁剪切"式工具最大的区别。
完整配置:三步跑通第一次背景移除
第 1 步:确认 Python 版本。rembg 要求 Python>=3.11, <3.14:
python --version第 2 步:安装。没有独显就装 CPU 版,一行带cli的 extras 能同时拿到命令行工具:
pip install "rembg[cpu,cli]"有 NVIDIA 卡且确认系统支持 onnxruntime-gpu(对照仓库里的安装矩阵图)再装rembg[gpu,cli]:
第 3 步:跑最小示例。新建demo.py:
from rembg import remove from PIL import Image with Image.open("input.jpg") as im: cutout = remove(im) # 关键:默认用 u2net 模型抠图 cutout.save("input.out.png")python demo.py执行后,input.out.png就是一张背景全透明的 PNG。注意第一次运行会自动把 u2net 模型下载到~/.u2net/,所以首跑会有明显的下载等待,属于正常现象。不想写代码也行,装完 cli 直接rembg i input.jpg out.png就能得到同样的结果。
按场景挑模型:5 种常见情况对应表
remove()不传 session 时固定用u2net。想换模型,用new_session("模型名")指定即可。按"你手里是什么图"来挑:
| 模型名 | 什么时候选它 | 说明 |
|---|---|---|
u2net | 拿不准时的默认 | 通用默认,速度和精度平衡 |
u2netp | 图多、机器慢 | u2net 轻量版,推理更快 |
silueta | 内存紧张的环境 | 仅 43MB,小模型 |
birefnet-general | 精度要求高的通用图 | BiRefNet 系列,边缘更精细 |
birefnet-portrait | 人物、证件照 | 针对人像训练 |
isnet-anime | 二次元角色图 | 专扣动漫人物 |
sam | 自动抠不准、要点选 | 传坐标点引导分割 |
完整实现都在 rembg/sessions/ 目录下,每个模型一个文件,名字和上表一一对应。动漫图想自己对比效果,可以看 tests/results/ 里同一张图跑不同模型的结果:
批量处理与 4 条提速建议 💡
处理几十上百张图时,速度瓶颈往往不在单张推理,而在重复加载模型和 I/O:
- 复用 session。加载一次模型,循环里反复用。这是收益最大的一条:
from pathlib import Path from rembg import remove, new_session session = new_session("u2netp") # 模型只加载这一次 for f in Path("photos").glob("*.jpg"): remove(f.read_bytes(), session=session).write(f"{f.stem}.out.png")入参是 bytes 时remove直接返回 bytes,所以能用.write()一步落盘,省掉 PIL 的中间转换。
- 线程数交给环境变量。
new_session会读取OMP_NUM_THREADS并应用到 ONNX Runtime,机器核少就显式设小,比如OMP_NUM_THREADS=4 python demo.py,避免线程调度吃掉收益。 - 图大就先缩。6000px 的原图对内存很不友好,非交付用途先降到 2048 边长以内再抠。
- 纯文件批处理直接用 CLI。不想写脚本时,
rembg p 输入目录 输出目录就能批量跑,加-w还能开 watch 模式自动处理新放进来的图。
3 个进阶用法:修边、补底色、出掩码
alpha matting——解决毛边和发丝。默认抠图在毛发、羽毛这类半透明区域会有锯齿。打开 matting 后 rembg 会用 trimap 重新估计 alpha 通道(实现见 rembg/bg.py):
cutout = remove( im, alpha_matting=True, alpha_matting_foreground_threshold=240, alpha_matting_background_threshold=10, alpha_matting_erode_size=10, )三个阈值都是 0-255 的灰度判断线:前景阈值之上的像素认定为"肯定是前景",背景阈值之下认定为"肯定是背景",中间交给算法估。动物这种带毛发的对象效果提升最明显:
bgcolor 直接换底色——解决"交付要 RGB 不要透明"。很多需求不是要透明图,而是要白底商品图或蓝底证件照。传一个 RGBA 元组就能省掉二次合成:
session = new_session("birefnet-portrait") remove(im, session=session, bgcolor=(67, 142, 219, 255)).save("id-photo.png")最后一行把抠图和填蓝底一次完成,(67, 142, 219, 255)是常见的证件照蓝。
only_mask——只要前景掩码。下游流程(合成、检测、训练数据)有时不需要成品图,只要一张白色前景、黑色背景的灰度掩码:
mask = remove(im, only_mask=True) mask.save("mask.png")only_mask=True会让remove跳过合成步骤直接返回模型输出的二值图,速度也更快。
5 个高频问题:现象、原因与解法 🔧
现象:
import rembg时报No onnxruntime backend found。原因:只装了基础包,onnxruntime 运行时没装进来。解法:按硬件重装,CPU 用pip install "rembg[cpu]",NVIDIA 用rembg[gpu]。现象:首次运行卡住或模型下载失败。原因:模型从远端自动下载到
~/.u2net/,网络不稳就会中断。解法:重跑脚本会续传/重试;持续失败就按 README.md 的 Models 一节手动下载对应.onnx文件放进~/.u2net/。现象:装了
rembg[gpu]却不生效或报错。原因:NVIDIA GPU 需要配套的 CUDA 和 cudnn-devel,光有驱动不够。解法:对照前文的 onnxruntime 安装矩阵确认系统版本,缺依赖就退回rembg[cpu],功能完全不受影响。现象:处理大图时内存溢出或机器假死。原因:高分辨率原图 × 大模型,中间张量体积成倍放大。解法:换轻量模型(
u2netp、silueta),或先把图缩到工作分辨率再抠。现象:
ValueError: No session class found for model 'xxx'。原因:模型名拼写错——注意 BiRefNet 系列用连字符(birefnet-general),而u2net_cloth_seg这类是下划线。解法:到 rembg/sessions/ 目录核对文件名,名字以各文件里name()的返回值为准。
接下来:花 10 分钟跑个小任务
到这里你已经掌握了 rembg 背景移除的核心链路:装包、三步跑通、按场景挑模型、批量提速和三个进阶开关。完整参数和更多用法继续看 README.md 与 USAGE.md。
现在就动手吧:从 examples/ 里挑一张没被本文用过的图(比如examples/car-3.jpg),用birefnet-general模型抠出来存成 PNG,再换个bgcolor存一张白底版——两张图做完,你今天学到的东西就都落地了。
【免费下载链接】rembgRembg is a tool to remove images background项目地址: https://gitcode.com/GitHub_Trending/re/rembg
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考