科学工具
科学工具让世界更美好
让世界更美好

图片背景去除工具 Rembg 安装部署和使用指南图片背景去除工具 Rembg 安装部署和使用指南

Rembg 是基于 Python的图片背景快速去除工具,支持多种图片处理方法,能在不同的环境下运行。

安装 Rembg 的Python 版本需要 >=3.10 且 <3.14。

Rembg 安装

已安装 onnxruntime 的情况

• 安装库:pip install rembg

• 安装库和命令行界面:pip install "rembg[cli]"

未安装 onnxruntime 的情况

CPU 支持

• 安装库:pip install rembg[cpu]

• 安装库和命令行界面:pip install "rembg[cpu,cli]"

GPU 支持(NVIDIA/CUDA)

首先需确认系统是否支持 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。

GPU 支持(AMD/ROCM)

ROCM 支持需要 onnxruntime-rocm 包,需按 AMD 文档安装,安装后,执行:

• 安装库:pip install "rembg[rocm]"

• 安装库和命令行界面:pip install "rembg[rocm,cli]"

命令行使用方法

安装后,在终端输入 rembg 就能使用。该命令有 4 个子命令,对应不同输入类型:

i:用于文件

p:用于文件夹

s:用于启动 HTTP 服务器

b:用于 RGB24 像素二进制流

rembg i 用法

• 去除远程图像背景: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 用法

• 去除文件夹中所有图像的背景:rembg p path/to/input path/to/output

• 监控新增或修改的文件并处理:rembg p -w path/to/input path/to/output

rembg s 用法

启动 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

rembg b 用法

处理来自标准输入的 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)

输入和输出为 PIL 图像

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)

输入和输出为 numpy 数组

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)

Docker 使用方法

仅 CPU

rembg 命令替换为 docker run danielgatis/rembg,示例:

docker run -v path/to/input:/rembg danielgatis/rembg i input.png path/to/output/output.png

NVIDIA CUDA 硬件加速

要求主机安装 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