分享一个抠图去背景的python库
最近制作图片处理工具需要抠图,在github上找了好久,发现 rembg 这个python库,一个仅有百多兆大的小模型。经过测试发现效果还是比较不错的,使用默认的模型,对人物肖像进行抠图去背景,能精细到发丝。
先来张效果图
Github仓库地址
github.com/danielgatis/rembg
安装需求
python: >3.7, <3.13
使用CPU支持,使用以下方式安装
pip install rembg # for library
pip install rembg[cli] # for library + cli
如果是使用GPU支持,首先需要检查系统是否支持 onnxruntime-gpu 访问 onnxruntime.ai ,查看系统支持的环境,然后再进行安装
pip install rembg[gpu] # for library
pip install rembg[gpu,cli] # for library + cli
上述命令执行完毕后,还需要下载一个模型文件,模型下载后,需要将模型保存在当前计算机用户目录中 .u2net目录。
例如我当前使用的win系统
可用的模型有这些
- u2net:通用预训练模型。
- u2netp:u2net模型的轻量级版本
- u2net_human_seg:预训练人体分割模型
- u2net_cloth_seg:预训练人物肖像布料模型。衣服分为三类:上身、下身和全身
- silueta:与u2net相同,但大小减少到43Mb
- isnet-general-use:新通用预训练模型
- isnet anime:动漫人物高精度分割模型
- sam:预训练模型
安装步骤完成后,您就可以以命令行的方式使用 rembg 了。
rembg 命令有4个子命令,每种输入类型对应一个子命令:
- i 用于文件
- p 表示文件夹
- s 表示http服务器
- b 用于RGB24像素二进制流
您可以通过以下方式获得有关主命令的帮助:
rembg --help
或者查看子命令
rembg <COMMAND> --help
rembg i
处理单个文件
远程图片移除背景
curl -s https://www.idcd.com/static/img/8212.jpg | 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
移除背景返回mask
rembg i -om path/to/input.png path/to/output.png
应用 alpha matting (前后景分割算法)
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
自定义模型 example
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 和 rembg b 感兴趣的可以去看下。
除了以上命令行方式,还可以使用 python 库方式调用
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)
我使用这个库做了个抠图小工具,可以在线体验下。 www.idcd.com/tool/image/…
转载自:https://juejin.cn/post/7387731346733744143