前语

关于一款数字时代的图片修改东西而言,抠图东西扮演着越来越重要的人物。它能轻松地将图画中的方针与布景进行分离,为用户供给快捷高效的修改体会。

在过去,抠除图画布景往往是一件杂乱又繁琐的作业,而完成一个 AI 主动抠图东西也并非易事,因为它需求不少服务器的算力耗费以及很多训练模型的成本。

而现在,我将展现在仅运用 1核1G运存 的超低服务器资源下,能够完成多么令人惊叹的抠图东西!如下所示,只需上传图片,便可主动抠除布景。在线体会

在超低配的服务器上也能部署免费AI抠图工具?一行命令就搞定!

因为带宽也很小(仅 1M )所以在线体会建议不要上传太大的图画。

接下来,我将带你学习怎么布置,经过简略几步即可完成这款强大的 AI 抠图东西。同时,我也将用通俗易懂的文字带你剖析 AI 抠图东西背面的作业原理,协助你更好地理解其背面的算法和逻辑。废话不多说,让咱们开端吧!

开端布置

首先咱们需求运用 Rembg 这个库,它是根据 U^2-Net 模型构建的一个用于图画布景去除的 Python 东西。

在超低配的服务器上也能部署免费AI抠图工具?一行命令就搞定!

为了让开发者快速掌握它,咱们并不需求学习 Python(除非自己训练模型),咱们只需求会一点 docker 的运用,然后运转以下命令:

docker run -d -p 5000:5000 --restart always danielgatis/rembg s

运转结束后会发动一个服务容器,映射在 5000 端口,此时拜访 http://(服务器IP):5000 就能够看到相似这样的界面:

在超低配的服务器上也能部署免费AI抠图工具?一行命令就搞定!

祝贺你,现已成功布置好了 AI 抠图东西,是不是 so easy ~

在第一次提交图画处理时,程序会主动下载所需模型到服务器上。标准预训练模型(u2net)为 176 MB 大小,而其精简版预训练模型(u2netp)则仅为 4.7 MB 大小,越小的模型耗费的内存就越少,在本例中正是运用了精简版模型,才得以在如此低配的服务器上良好地运转,限制其出产速度的反而是网络带宽。

这儿的 Model 选项为抠图所指定的预训练模型,常用的几种有:

  • u2net:适用于一般用例的预训练模型。
  • u2netp:u2net 模型的轻量级版本。
  • silueta:一个社区精简版,与 u2net 效果相同,但大小缩减到 43Mb。
  • u2net_human_seg:适用于人体切割的预训练模型。
  • isnet-anime:动漫人物的高精度切割。

怎么运用

前面咱们布置好了服务,那么该怎样结合到项目中运用呢?有两种方法。

调用 API 接口(不引荐)

拜访 http://(服务器IP):5000/api 就能够看到一个 Swagger 构建的文档,程序供给了两个接口,都是接纳一个图画然后回来其去除布景的图画成果,区别在于:

  1. GET 方法接纳的是 URL 参数,传递的是一个网络可拜访的图画链接
  2. POST 方法则是接纳 file 参数,传递的是前端表单提交的二进制流文件

在超低配的服务器上也能部署免费AI抠图工具?一行命令就搞定!

但是,我要说但是了,这种运用方法虽然运用简略,但经过测试,在服务端会有必定程度的内存泄露问题,因为本文主打一个低配服务器布置教程,不必要的内存耗费是无法承受的,所以并不引荐运用此方法。

经过 websocket 调用(引荐)

在前端项目中,咱们需求装置依赖:

npm i @gradio/client

然后引入并在项目中初始化一下 socket 服务:

import { client } from '@gradio/client'
const app = await client('http://(服务器IP):5000/')

接着咱们写一个简略的上传按钮,例如:

<input type="file" onChange="selectFile" />

在选择文件的事情回调 selectFile 中,将文件传递给服务接口便可取得抠图成果:

const selectFile = async (file) => {
  const result = await app.predict("/predict", [file, "u2netp", ""]); // u2netp 可改为其它模型
  console.log(result?.data[0]); // 这儿为回来的图画
};

成功后回来的是 Base64 格式数据,能够直接设置在 img 标签的 src 特点上以显现在页面中,假如要点击下载的效果能够参阅如下方法:

function DlBase64 (base64Data, fileName) => {
  const link = document.createElement('a')
  link.href = base64Data
  link.download = fileName
  link.click()
}

在实践事例中运用 Vue 代码完成,详细代码可参阅:Github – ImageCutout.vue

AI抠图原理

早在 2015 年,德国图画处理研究所(Institut fr Informatik)的研究人员就提出了一种图画切割使命处理方法,它是为了处理医学领域中的器官、细胞等图画的切割问题,后成为了一种经典的深度学习模型。因为其网络结构形状相似于字母 U,遂取名为 U-Net 模型。

在超低配的服务器上也能部署免费AI抠图工具?一行命令就搞定!

简略来说,这个模型会先对图画进行卷积池化,再对特征图进行上采样反卷积操作,左右对称的特征图拼接后再进行卷积和上采样,这个进程重复4次,终究得到输入图画的切割图。

卷积算法是一种常用的数字信号处理技术,是深度学习中卷积神经网络(CNN)的核心操作,能够看做是一个窗口滑动点乘运算,对输入信号或图画不同方位进行加权求和,从而提取出不同方位的特征信息。

池化从某种程度上来说,相似于图片紧缩,只不过紧缩是直接删去一些不重要的信息、或是丢失必定图画质量来到达与原始图画相同或近似的意图。而池化则是一种降维处理,它的意图不是单纯的减小尺寸,而是为了进步计算效率,从而提取出更重要的特征信息。

上采样则是将特征图反卷积,提升分辨率。所以这个处理结构也被提出者称为:编码器-解码器结构。

因为 U-Net 模型首要处理的是医学图画上的切割问题,这类图画通常有着较为简略的特征和结构,所以在处理杂乱图画上则存在一些问题,无法直接使用于天然图画切割等场景,这时候就该 U^2-Net 登场了。

在超低配的服务器上也能部署免费AI抠图工具?一行命令就搞定!

在 U-Net 模型基础上,秦雪彬等人提出了 U^2-Net 模型(他们发布的论文在上一年被国际顶级学会 ICPR 评选为 2020 模式识别最佳论文),该模型经过改善 U-Net 结构和特征融合方法,在几乎不增加计算成本的前提下,进步了图画切割使命的准确性和效果。并且值得一提的是,它在功能表现上相同很优秀,因此能广泛使用于计算机视觉领域的各种使用中。

结尾

到这儿,相信你现已学会怎么在自己服务器上布置一款 AI 抠图东西了,是不是等不及要亲自尝试一番了呢?假如想了解关于文中提到的在线图片规划器,也欢迎拜访我的开源项目:迅排规划,相关介绍能够查阅这篇文章:

开源在线图片规划器,支撑PSD解析、AI抠图等,根据Puppeteer生成图片

以上就是文章的全部内容了,感谢看到这儿!假如觉得写得不错,对你有所协助或启示,别忘了点赞收藏重视“一键三连”~ 我也会持续更新更多实用的前端知识与技巧。