了解如何使用令人敬畏的 Rembg python 库通过机器学习去除任何图像的背景。
如何使用Rembg去除图片背景?有多种图形工具可用于删除图像中对象周围的所有内容。但是,自动执行此操作非常困难,通常用户将始终需要与该工具进行交互以尽可能好地将其删除。如果我告诉你有一个很棒的开源项目旨在使用机器学习自动删除图像的背景怎么办?
如何使用Rembg去除图片的背景?在本文中,我将向你解释如何轻松安装和配置 Python 的 Rembg 库以从图像中删除背景。
1. 安装 PyTorch
如果你使用的是 anaconda,则可以使用以下命令安装 Pytorch(你可以按照本教程学习如何安装 Anaconda,以防万一你没有安装它并想使用它):
conda install pytorch torchvision torchaudio cpuonly -c pytorch
或者,你可以使用 pip 和以下命令安装 Pytorch:
pip install torch==1.7.1+cpu torchvision==0.8.2+cpu -f https://download.pytorch.org/whl/torch_stable.html
注意:对于本教程和 github 存储库中的解释,我们使用 Pytorch 作为 CPU。如果服务器中有可用的图形卡,则可以安装支持 CUDA 的 Pytorch。有关 Pytorch 的更多信息,请访问这里的官方网站。
2.安装RemBG
如何去除图片中的背景?RemBG 是一种去除任何图像背景的工具。该库在底层使用 U2-Net 进行模式识别(“ U^2-Net: Going Deeper with Nested U-Structure for Salient Object Detection. ”)。要在你的系统中安装此软件包,请使用 pip:
pip install rembg
有关这个很棒的开源工具的更多信息,请在此处访问 Github 上的官方存储库。
3. 使用库
安装 Rembg 库后,你将能够直接从命令行或在简单的 Python 脚本中进行选择。请注意,第一次运行时,模型将被下载,因此需要一段时间,一旦完成,背景去除不会对每个图像花费那么多。Rembg 将在你的环境中全局可用。
通过 CLI 删除背景
如何使用Rembg去除图片的背景?测试库是否正常工作的最快方法是简单地使用远程图像,以下命令将使用 Julian Casablancas 的 Wikipedia 图像:
curl -s https://upload.wikimedia.org/wikipedia/commons/thumb/e/ec/Julian_Casablancas_%40_Lollapalooza_2014_%2813657827913%29.jpg/440px-Julian_Casablancas_%40_Lollapalooza_2014_%2813657827913%29.jpg | rembg > output.png
生成的output.png
将如下所示(参考原始图像):
真的很厉害不是吗?在某些服务器中,特别是虚拟化服务器(avx 或 avx2 指令),你可能会收到以下警告:
[W NNPACK.cpp:79] Could not initialize NNPACK! Reason: Unsupported hardware.
但是你可以忽略它,因为输出图像不再有背景。如果你需要删除上述警告,你可能需要从源代码编译 Pytorch 并禁用 NNPack 支持。你当然可以对本地图像执行相同的操作:
rembg -o ./output-image.png ./input-image.jpg
在 Python 脚本中使用库
如何去除图片中的背景?你也可以将库与将其嵌入到脚本中的管道一起使用。例如,以下脚本将执行与前一个示例相同的操作,取一个本地文件并创建没有背景的版本:
# example.py
from rembg.bg import remove
import numpy as np
import io
from PIL import Image
# Uncomment the following lines if working with trucated image formats (ex. JPEG / JPG)
# In my case I do give JPEG images as input, so i'll leave it uncommented
from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True
input_image = 'input-image.jpg'
output_image = 'output-image.png'
f = np.fromfile(input_image)
result = remove(f)
img = Image.open(io.BytesIO(result)).convert("RGBA")
img.save(output_image)
试一试,开始使用这个奇妙的工具自动去除图像的背景!
快乐编码❤️!