Rembg 是基于 Python的图片背景快速去除工具,支持多种图片处理方法,能在不同的环境下运行。
安装 Rembg 的Python 版本需要 >=3.10 且 <3.14。
• 安装库:pip install rembg
• 安装库和命令行界面:pip install "rembg[cli]"
• 安装库:pip install rembg[cpu]
• 安装库和命令行界面:pip install "rembg[cpu,cli]"
首先需确认系统是否支持 onnxruntime-gpu
,可前往 onnxruntime.ai 查看安装矩阵,如果支持,执行以下命令:
• 安装库:pip install "rembg[gpu]"
• 安装库和命令行界面:pip install "rembg[gpu,cli]"
注意:NVIDIA GPU 可能需要 onnxruntime-gpu、CUDA 和 cudnn-devel。若 rembg[gpu]
无法工作且无法安装 CUDA 或 cudnn-devel,可使用 rembg[cpu]
和 onnxruntime。
ROCM 支持需要 onnxruntime-rocm
包,需按 AMD 文档安装,安装后,执行:
• 安装库:pip install "rembg[rocm]"
• 安装库和命令行界面:pip install "rembg[rocm,cli]"
安装后,在终端输入 rembg
就能使用。该命令有 4 个子命令,对应不同输入类型:
• i
:用于文件
• p
:用于文件夹
• s
:用于启动 HTTP 服务器
• b
:用于 RGB24 像素二进制流
• 去除远程图像背景:curl -s http://input.png | rembg i > output.png
• 去除本地文件背景:rembg i path/to/input.png path/to/output.png
• 指定模型去除背景:rembg i -m u2netp path/to/input.png path/to/output.png
• 仅返回遮罩:rembg i -om path/to/input.png path/to/output.png
• 应用 alpha 抠图:rembg i -a path/to/input.png path/to/output.png
• 传递额外参数:
• SAM 示例:rembg i -m sam -x '{ "sam_prompt": [{"type": "point", "data": [724, 740], "label": 1}] }' examples/plants-1.jpg examples/plants-1.out.png
• 自定义模型示例:rembg i -m u2net_custom -x '{"model_path": "~/.u2net/u2net.onnx"}' path/to/input.png path/to/output.png
• 去除文件夹中所有图像的背景:rembg p path/to/input path/to/output
• 监控新增或修改的文件并处理:rembg p -w path/to/input path/to/output
启动 HTTP 服务器:rembg s --host 0.0.0.0 --port 7000 --log_level info
完整的端点文档可访问:http://localhost:7000/api
• 去除图像 URL 的背景:curl -s "http://localhost:7000/api/remove?url=http://input.png" -o output.png
• 去除上传图像的背景:curl -s -F file=@/path/to/input.jpg "http://localhost:7000/api/remove" -o output.png
处理来自标准输入的 RGB24 图像序列,可与 FFMPEG 等程序配合使用:
rembg b image_width image_height -o output_specifier
• image_width
:输入图像宽度
• image_height
:输入图像高度
• output_specifier
:输出文件名的 printf 样式说明符
示例:ffmpeg -i input.mp4 -ss 10 -an -f rawvideo -pix_fmt rgb24 pipe:1 | rembg b 1280 720 -o folder/output-%03u.png
from rembg import remove
input_path = 'input.png'
output_path = 'output.png'
with open(input_path, 'rb') as i:
with open(output_path, 'wb') as o:
input = i.read()
output = remove(input)
o.write(output)
from rembg import remove
from PIL import Image
input_path = 'input.png'
output_path = 'output.png'
input = Image.open(input_path)
output = remove(input)
output.save(output_path)
from rembg import remove
import cv2
input_path = 'input.png'
output_path = 'output.png'
input = cv2.imread(input_path)
output = remove(input)
cv2.imwrite(output_path, output)
from rembg import remove
input_path = 'input.png'
output_path = 'output.png'
with open(input_path, 'rb') as i:
with open(output_path, 'wb') as o:
input = i.read()
output = remove(input, force_return_bytes=True)
o.write(output)
from pathlib import Path
from rembg import remove, new_session
session = new_session()
for file in Path('path/to/folder').glob('*.png'):
input_path = str(file)
output_path = str(file.parent / (file.stem + ".out.png"))
with open(input_path, 'rb') as i:
with open(output_path, 'wb') as o:
input = i.read()
output = remove(input, session=session)
o.write(output)
将 rembg
命令替换为 docker run danielgatis/rembg
,示例:
docker run -v path/to/input:/rembg danielgatis/rembg i input.png path/to/output/output.png
要求主机安装 NVIDIA Container Toolkit,需自行构建 Docker 镜像:
docker build -t rembg-nvidia-cuda-cudnn-gpu -f Dockerfile_nvidia_cuda_cudnn_gpu .
构建后运行:
sudo docker run --rm -it --gpus all -v /dev/dri:/dev/dri -v $PWD:/rembg rembg-nvidia-cuda-cudnn-gpu i -m birefnet-general input.png output.png
技巧:
1、可构建包含 rembg[gpu, cli]
的 NVIDIA-CUDA-CUDNN-GPU 镜像。
2、使用 -v /somewhereYouStoresModelFiles/:/root/.u2net
挂载模型文件。
所有模型下载后保存到用户主目录的 .u2net
目录,可用模型包括:
• u2net:适用于一般场景的预训练模型。
• u2netp:u2net 模型的轻量级版本。
• u2net_human_seg:用于人体分割的预训练模型。
• u2net_cloth_seg:用于从人像中解析衣物的预训练模型,将衣物分为上身、下身和全身三类。
• silueta:与 u2net 相同,但大小缩减至 43Mb。
• isnet-general-use:适用于一般场景的新预训练模型。
• isnet-anime:用于动漫角色的高精度分割模型。
• sam:适用于任何场景的预训练模型。
• birefnet-general:适用于一般场景的预训练模型。
• birefnet-general-lite:适用于一般场景的轻量级预训练模型。
• birefnet-portrait:用于人像的预训练模型。
• birefnet-dis:用于二值图像分割(DIS)的预训练模型。
• birefnet-hrsod:用于高分辨率显著目标检测(HRSOD)的预训练模型。
• birefnet-cod:用于隐蔽目标检测(COD)的预训练模型。
• birefnet-massive:使用大规模数据集的预训练模型。
• ben2-base:通过创新的置信度引导抠图(CGM)管道引入了一种新的前景分割方法。
如需更精细调优的模型,可参考:#193 (comment)
https://www.youtube.com/watch?v=3xqwpXjxyMQ
https://www.youtube.com/watch?v=dFKRGXdkGJU
https://www.youtube.com/watch?v=Ai-BS_T7yjE
https://www.youtube.com/watch?v=D7W-C0urVcQ