Rembg 是一个去除图像背景的工具。
如果这个项目对您有帮助,请考虑捐款。
PhotoRoom 删除背景 API https://photoroom.com/api 快速准确的背景去除 API |
python: >3.7, <3.13
如果您已经安装了onnxruntime
,只需安装rembg
:
pip install rembg # for library
pip install " rembg[cli] " # for library + cli
否则,请安装具有显式 CPU/GPU 支持的rembg
。
CPU支持:
pip install rembg[cpu] # for library
pip install " rembg[cpu,cli] " # for library + cli
GPU 支持:
首先,您需要检查您的系统是否支持onnxruntime-gpu
。
访问 https://onnxruntime.ai 并检查安装矩阵。
如果是,只需运行:
pip install " rembg[gpu] " # for library
pip install " rembg[gpu,cli] " # for library + cli
安装步骤完成后,您只需在终端窗口中输入rembg
即可使用 rembg。
rembg
命令有 4 个子命令,每个子命令对应一种输入类型:
i
用于文件p
代表文件夹s
代表 http 服务器b
表示 RGB24 像素二进制流您可以使用以下命令获取有关主命令的帮助:
rembg --help
另外,关于所有使用的子命令:
rembg < COMMAND > --help
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 example
rembg i -m sam -x ' { "sam_prompt": [{"type": "point", "data": [724, 740], "label": 1}] } ' examples/plants-1.jpg examples/plants-1.out.png
Custom model example
rembg i -m u2net_custom -x ' {"model_path": "~/.u2net/u2net.onnx"} ' path/to/input.png path/to/output.png
p
当输入和输出是文件夹时使用。
删除文件夹中所有图像的背景
rembg p path/to/input path/to/output
与以前相同,但监视要处理的新/更改的文件
rembg p -w path/to/input path/to/output
s
用于启动http服务器。
rembg s --host 0.0.0.0 --port 7000 --log_level info
要查看完整的端点文档,请访问: http://localhost:7000/api
。
从图像网址中删除背景
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
b
处理来自 stdin 的 RGB24 图像序列。它旨在与另一个程序(例如 FFMPEG)一起使用,该程序将 RGB24 像素数据输出到 stdout,该数据通过管道传输到该程序的 stdin,尽管没有什么可以阻止您在 stdin 手动输入图像。
rembg b image_width image_height -o output_specifier
论据:
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 的完整示例列表,请转到示例页面。
只需将rembg
命令替换为docker run danielgatis/rembg
即可。
试试这个:
docker run -v path/to/input:/rembg danielgatis/rembg i input.png path/to/output/output.png
所有模型都会下载并保存在用户主文件夹的.u2net
目录中。
可用的型号有:
如果您需要更多微调模型,请尝试以下操作:#193(评论)
该库直接依赖于 onnxruntime 库。因此,只有当onnxruntime提供对特定版本的支持时,我们才能更新Python版本。
喜欢我的一些作品吗?给我买杯咖啡(或更可能是啤酒)
版权所有 (c) 2020 年至今 Daniel Gatis
根据 MIT 许可证获得许可