创世宇图SHARE头像
关注
Rembg 开源图像抠图工具全教程:Python/命令行/HTTP API/Docker部署+多模型选型封面图

Rembg 开源图像抠图工具全教程:Python/命令行/HTTP API/Docker部署+多模型选型

Rembg是一款免费开源AI抠图工具,无需复杂算法,一行代码/一条命令即可生成透明背景图片,支持CPU/NVIDIA/AMD多硬件加速,提供Python SDK、命令行、HTTP接口、Docker四种部署方式,内置20+分割模型适配人像、动漫、服装、高分辨率物体等场景,本文完整覆盖安装、单图/批量处理、API服务、视频帧抠图、容器部署、自定义模型全流程实战代码。

一、项目概述

1.1 项目介绍

Rembg 是一款开源、高性能图像背景去除工具,支持多部署形态,可直接一键去除图片背景生成透明PNG,底层基于各类预训练分割模型(U2Net、IS-Net、BiRefNet、SAM等),适配通用实物、人像、动漫、服装、高分辨率物体等多场景抠图需求。 支持四种使用方式:

  1. Python 第三方库(集成到业务代码)
  2. 终端命令行工具(单图/批量处理)
  3. HTTP Web服务(对外提供抠图API)
  4. Docker容器(快速部署,CPU/GPU两种镜像)

项目开源地址:danielgatis/rembg,开源协议 MIT,官方提供商用付费抠图API PhotoRoom。

1.2 环境前置要求

Python 版本限制:>=3.11 且 <3.14,依赖 onnxruntime 系列推理引擎,分CPU、NVIDIA CUDA、AMD ROCm三种硬件后端。

二、安装教程(区分硬件后端)

2.1 CPU通用版本(无独立显卡,新手推荐)

仅作为Python库:

pip install "rembg[cpu]"

库 + 命令行工具一体:

pip install "rembg[cpu,cli]"

2.2 NVIDIA显卡 CUDA GPU加速

  1. 先确认本机环境支持 onnxruntime-gpu,提前装好CUDA、cudnn-devel;
  2. 安装命令:
# 仅库
pip install "rembg[gpu]"
# 库+命令行
pip install "rembg[gpu,cli]"

若CUDA环境配置失败,可降级使用CPU版本运行。

2.3 AMD显卡 ROCm 后端

需提前部署 onnxruntime-rocm,再执行安装:

pip install "rembg[rocm]"
pip install "rembg[rocm,cli]"

三、命令行 CLI 使用详解

安装cli后终端直接执行 rembg,提供4大核心子命令:i(单图)、p(批量文件夹)、s(HTTP服务)、b(二进制流,适配FFmpeg)。

3.1 通用帮助命令

# 查看全局帮助
rembg --help
# 查看指定子命令帮助,如单图处理
rembg i --help

3.2 rembg i:单张图片抠图

  1. 本地文件基础用法
# 指定输入输出路径
rembg i input.png output.png
# 省略输出,自动生成 input.out.png
rembg i input.png
# 管道重定向输出
rembg i input.png > output.png
  1. 远程网络图片流式处理
curl -s http://xxx/input.png | rembg i > output.png
  1. 进阶参数用法
  • 指定轻量模型u2netp:
rembg i -m u2netp input.png output.png
  • 仅输出分割掩码(无透明前景):
rembg i -om input.png mask.png
  • 输出带Alpha遮罩原图:
rembg i -a input.png output.png
  • SAM模型点位提示抠图(自定义前景点位):
rembg i -m sam -x '{ "sam_prompt": [{"type": "point", "data": [724, 740], "label": 1}] }' test.jpg out.png
  • 加载本地自定义ONNX模型:
rembg i -m u2net_custom -x '{"model_path": "~/.u2net/u2net.onnx"}' input.png output.png

3.3 rembg p:批量文件夹处理

  1. 基础批量(输入文件夹→输出文件夹)
rembg p ./input_imgs ./output_imgs
  1. 监听模式(自动处理新增/修改图片)
rembg p -w ./input_imgs ./output_imgs

3.4 rembg s:启动HTTP抠图API服务

  1. 启动服务,开放外网访问,端口7000
rembg s --host 0.0.0.0 --port 7000 --log_level info
  1. 关闭Gradio前端UI,降低CPU占用
rembg s --no-ui
  1. API调用示例
  • 通过图片URL抠图:
curl -s "http://127.0.0.1:7000/api/remove?url=http://xxx/test.png" -o out.png
  • 上传本地文件抠图:
curl -s -F file=@./test.jpg "http://127.0.0.1:7000/api/remove" -o out.png

服务内置API文档地址:http://localhost:7000/api

3.5 rembg b:二进制RGB24数据流处理(适配FFmpeg视频帧)

接收原始RGB像素流,适合视频逐帧抠图,参数:宽度、高度、输出文件名格式化模板。 示例:提取视频第10秒画面,逐帧抠图保存

ffmpeg -i input.mp4 -ss 10 -an -f rawvideo -pix_fmt rgb24 pipe:1 | rembg b 1280 720 -o output/output-%03u.png

关键参数不能省略:-an -f rawvideo -pix_fmt rgb24 pipe:1,宽高必须和视频分辨率匹配。

四、Python库代码集成(开发常用)

核心入口函数 remove(),支持字节流、PIL图像、OpenCV数组三种输入格式,批量处理推荐复用Session加速推理。

4.1 字节流读写(通用文件读写)

from rembg import remove

# 读取原图字节,抠图后写入透明图
with open("input.png", "rb") as in_file:
    input_data = in_file.read()
output_data = remove(input_data)
with open("output.png", "wb") as out_file:
    out_file.write(output_data)

4.2 PIL Image 格式(图像处理常用)

from rembg import remove
from PIL import Image

input_img = Image.open("input.png")
output_img = remove(input_img)
output_img.save("output.png")

4.3 OpenCV NumPy数组格式

from rembg import remove
import cv2

input_arr = cv2.imread("input.png")
output_arr = remove(input_arr)
cv2.imwrite("output.png", output_arr)

4.4 强制返回字节流

from rembg import remove

with open("input.png", "rb") as i:
    data = i.read()
res = remove(data, force_return_bytes=True)
with open("out.png", "wb") as o:
    o.write(res)

4.5 高性能批量处理(复用Session,推荐)

重复创建会话会重复加载模型,大批量图片务必复用session:

from pathlib import Path
from rembg import remove, new_session

# 全局初始化一次模型会话
session = new_session()

# 遍历文件夹所有png图片
img_dir = Path("./batch_input")
for img_file in img_dir.glob("*.png"):
    out_path = img_file.parent / f"{img_file.stem}.out.png"
    with open(img_file, "rb") as i, open(out_path, "wb") as o:
        img_bytes = i.read()
        # 复用session,大幅提升批量速度
        res_bytes = remove(img_bytes, session=session)
        o.write(res_bytes)

五、Docker容器部署

5.1 CPU镜像(开箱即用,无需编译)

直接拉取官方镜像,挂载本地目录 /data 处理图片:

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

5.2 NVIDIA CUDA GPU镜像

  1. 前置条件:主机安装NVIDIA容器工具包;
  2. 构建GPU镜像(镜像占用约11GB,CPU版仅1.6GB):
docker build -t rembg-gpu -f Dockerfile_nvidia_cuda_cudnn_gpu .
  1. 运行容器开启GPU加速:
sudo docker run --rm -it --gpus all -v $PWD:/data rembg-gpu i -m birefnet-general /data/input.png /data/output.png
  1. 优化:挂载本地模型目录,避免容器重复下载模型
-v /本地模型路径:/root/.u2net

六、内置模型大全(按需选择)

首次运行自动下载模型至 ~/.u2net/,可通过环境变量修改存储路径,各模型适用场景:

模型名称适用场景特点
u2net通用物体抠图基础通用模型,效果均衡
u2netp通用场景U2Net轻量版,速度更快
u2net_human_seg纯人像分割专门识别人体轮廓
u2net_cloth_seg服装分割区分上衣/下装/全身衣物
Silueta通用抠图体积仅43MB,轻量化
isnet-general-use通用高精度新一代通用分割模型
isnet-anime动漫角色二次元人物抠图专用
sam任意物体分割支持点位提示,自定义抠选区域
birefnet-general全场景通用综合效果最优
birefnet-general-lite通用轻量化平衡速度与精度
birefnet-portrait人像肖像人像细节优化
birefnet-dis双目图像分割双目视觉专用
birefnet-hrsod高分辨率显著物体大图物体检测
birefnet-cod隐蔽物体检测低对比度隐藏物体
birefnet-massive超大数据集训练复杂场景泛化强
bria-rmbg商业级抠图BRIA AI开发,细节优秀

七、环境变量配置

可通过系统环境变量自定义模型存储、推理行为:

  1. U2NET_HOME:模型文件存储目录,优先级最高;默认 ~/.u2net
  2. XDG_DATA_HOME:未配置U2NET_HOME时,数据根目录,默认用户根目录
  3. MODEL_CHECKSUM_DISABLED=1:关闭模型哈希校验,使用自定义修改后的ONNX模型时开启
  4. OMP_NUM_THREADS:设置ONNX推理线程数,控制CPU占用

八、自定义本地模型使用流程

  1. 设置环境变量关闭校验:MODEL_CHECKSUM_DISABLED=1
  2. 将转换/修改后的.onnx模型放入默认目录 ~/.u2net/,命名格式与原模型一致(如u2net.onnx)
  3. 运行rembg时会直接加载本地文件,不再自动下载官方模型

九、常见问题说明

  1. Python版本兼容问题:库版本由onnxruntime支持的Python版本决定,仅支持3.11~3.13;
  2. GPU加速失败:检查CUDA、cuDNN、onnxruntime-gpu版本匹配,无法配置显卡则切换CPU版本;
  3. 模型重复下载:配置U2NET_HOME固定模型路径,Docker部署挂载本地模型目录;
  4. 自定义模型加载失败:务必开启MODEL_CHECKSUM_DISABLED关闭校验。

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/xiaoma0529/article/details/162738732

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--