Rembg
Rembg 是一个用于移除图像背景的工具。
如果这个项目对您有帮助,请考虑捐赠。
赞助商
PhotoRoom 移除背景 API
https://photoroom.com/api
快速准确的背景移除 API |
要求
python: >3.7, <3.13
安装
CPU 支持:
pip install rembg # 仅安装库
pip install rembg[cli] # 安装库和命令行界面
GPU 支持:
首先,您需要检查您的系统是否支持 onnxruntime-gpu
。
访问 https://onnxruntime.ai 并查看安装矩阵。
如果支持,只需运行:
pip install rembg[gpu] # 仅安装库
pip install rembg[gpu,cli] # 安装库和命令行界面
作为命令行工具使用
安装完成后,您可以在终端窗口中输入 rembg
来使用 rembg。
rembg
命令有 4 个子命令,分别对应不同的输入类型:
i
用于文件p
用于文件夹s
用于 HTTP 服务器b
用于 RGB24 像素二进制流
您可以使用以下命令获取主命令的帮助:
rembg --help
同样,您可以使用以下命令获取所有子命令的帮助:
rembg <命令> --help
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,将RGB24像素数据输出到标准输出,然后通过管道传递给本程序的标准输入,当然也不妨碍你手动在标准输入中输入图像。
rembg b 图像宽度 图像高度 -o 输出格式指定符
参数:
- 图像宽度:输入图像的宽度
- 图像高度:输入图像的高度
- 输出格式指定符:printf风格的输出文件名指定符,例如
output-%03u.png
,则输出文件将被命名为output-000.png
、output-001.png
、output-002.png
等。无论指定的扩展名是什么,输出文件都将以PNG格式保存。你可以省略它以将结果写入标准输出。
与FFMPEG一起使用的示例:
ffmpeg -i input.mp4 -ss 10 -an -f rawvideo -pix_fmt rgb24 pipe:1 | rembg b 1280 720 -o folder/output-%03u.png
宽度和高度值必须与FFMPEG输出图像的尺寸相匹配。注意对于FFMPEG,"-an -f rawvideo -pix_fmt rgb24 pipe:1
"部分是整个命令运行所必需的。
作为库使用
输入和输出为字节
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)
要查看如何使用rembg的完整示例列表,请转到示例页面。
作为docker使用
只需将rembg
命令替换为docker run danielgatis/rembg
。
试试这个:
docker run -v path/to/input:/rembg danielgatis/rembg i input.png path/to/output/output.png
模型
所有模型都会下载并保存在用户主文件夹的.u2net
目录中。
可用的模型有:
- u2net (下载, 源码):适用于一般用途的预训练模型。
- u2netp (下载, 源码):u2net模型的轻量级版本。
- u2net_human_seg (下载, 源码):用于人体分割的预训练模型。
- u2net_cloth_seg (下载, 源码):用于从人像中解析服装的预训练模型。这里将服装解析为3类:上身、下身和全身。
- silueta (下载, 源码):与u2net相同,但大小减小到43Mb。
- isnet-general-use (下载, 源码):适用于一般用途的新预训练模型。
- isnet-anime (下载, 源码):用于动漫角色的高精度分割模型。
- sam (下载编码器, 下载解码器, 源码):适用于任何用途的预训练模型。
如何训练自己的模型
如果你需要更精细的模型,可以尝试这个: https://github.com/danielgatis/rembg/issues/193#issuecomment-1055534289
一些视频教程
- 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
参考文献
- https://arxiv.org/pdf/2005.09007.pdf
- https://github.com/NathanUA/U-2-Net
- https://github.com/pymatting/pymatting
常见问题
这个库何时会支持Python 3.xx版本?
这个库直接依赖于onnxruntime库。因此,只有当onnxruntime提供对特定版本的支持时,我们才能更新Python版本。
请我喝杯咖啡
喜欢我的一些作品吗?请我喝杯咖啡(或者更可能是啤酒)
星标历史
许可证
版权所有 (c) 2020-现在 Daniel Gatis
基于MIT许可证授权