Python + AI:完美抠图,更换背景

以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「ENG八戒」mp.weixin.qq.com/s/7BdEjWTF9...

翻看家里的老照片,发现一只小 dog,很趣致吧,这眼神汪汪地~ (背景是在厨房)。

有时候就想把某些照片里的人物或者主角抠出来,然后贴到喜欢的背景图里,比如你想自己制作一个 DIY 的头像。

虽然有很多 APP 或者小程序可以提供这类的功能,付费购买服务固然没问题,但是免费的服务都是带有瑕疵的,比如输出的最终图片带有广告水印,或者像素过低导致图片略显模糊等等。

你想要免费的早午晚三餐,我都懂。求人不如求己,发挥极客精神,让我们自己动手吧。接下来就介绍一个非常好用的 python 工具包 Rembg,其中也应用了大模型之类的 AI 来辅助提取人像或者主角,详情往下看。

环境准备--linux

Rembg 是用 python 开发的,依赖于 python3 的执行环境,而且要求版本在 python 3.7 ~ 3.11 之间。

我比较常使用的平台是 linux,现在大部分的 linux 发行版都是默认安装了 python3,开始之前还是确认一下 python 的版本

shell 复制代码
$ cat /etc/issue
Ubuntu 20.04.4 LTS
$ python -V
Python 3.8.10

如果你最先安装的是 python 2,然后又安装了 python 3,那么可以

ruby 复制代码
$ python3 -V

环境

在安装工具包之前,有必要提醒一下,每个工具都有其依赖的特定环境,那么环境的相互隔离就显得很有必要了,在 python 生态中,我们可以运用好虚拟环境的特性做到这点。

创建一个工程目录 rembg,并在里边新建虚拟环境,存放环境的目录名这里定为 .venv,然后切换 python 环境到虚拟环境下

shell 复制代码
$ python -m venv .venv
$ source .venv/bin/activate
(.venv) $ 

进入虚拟环境后,命令行的最前面会自动加上虚拟环境的目录,表示已经进入该目录下的虚拟环境。关于 python 虚拟环境的更多介绍可以看看我的另一篇文章《Python:灵活的开发环境》// TODO.

安装 Rembg

ruby 复制代码
(.venv) $ pip install rembg

Rembg 的依赖包比较多,安装启动后,需要等一会,一杯茶过后我们再回来看。。。

如果你的网络环境不是很顺畅,可以参考一下网上的方法,切换 linux 安装包源到墙内的镜像源,不展开了,自行查阅。

虽说运行前的环境已安装好,但是 Rembg 在本地第一次运行的时候会从 github 下载一个叫做 U-2-Net(U square net) 的模式识别图像处理模型,这是一个基于 Apache 2.0 license 的开源 AI 项目,曾经获得 2020 最佳论文奖(BEST PAPER AWARD)。

到这一步了,如果还会执行失败,大概率是因为你的网络受限导致下载失败,比如在墙内。不用慌,我都替你想好了,可以在我公众号后台回复【u2net】获得网盘分享链接。下载完成后,用 tar -zxf 解压并存放到当前用户的 ~/.u2net/u2net.onnx。u2net.onnx 就是解压后的最终文件,大小接近 200 MB,下载起来需要花点时间,不过这对于好奇心爆棚的你来说,都是小 case。

小试牛刀--抹除背景

好了,环境已准备好,现在开始耍耍刚磨好的大刀 ^-^

动物篇

就用文初的那张小狗图片来试一下吧,原始图片是 dog.jpeg,输出没有背景的图片 dog_without_bg.jpeg,文件路径都在当前文件夹下。

diff 复制代码
(.venv) $ rembg i dog.jpeg dog_without_bg.jpeg
(.venv) $ ll
...
-r-xr-xr-x 1 root root  959306 Mar 16  2017 dog.jpeg*
-rwxrwxrwx 1 root root 2088784 Oct 21 20:52 dog_without_bg.jpeg*

打开输出的图片 dog_without_bg.jpeg 看看

看上去图像提取得非常好,背景真的抹去了,而且速度很快,输入的源图片文件 dog.jpeg 大小接近 1 MB,花费的时间也不过十几秒钟,可能我的机器比较高级?其实硬件放在现在就是中规中矩的配置,你一点也不需要为此担心硬件。

人物篇

试完动物,再换一张人像看看,试一下可爱的小女孩被偷拍下的一瞬间

diff 复制代码
(.venv) $ rembg i girl.jpeg girl_without_bg.jpeg
(.venv) $ ll
...
-r-xr-xr-x 1 root root  99541 Dec 28  2014 girl.jpeg*
-rwxrwxrwx 1 root root 857075 Oct 21 20:54 girl_without_bg.jpeg*

打开输出的图片 girl_without_bg.jpeg 看看

这效果真的是杠杠滴,输入的图片文件 girl.jpeg 大小接近 100 KB,花费的时间也仅需要几秒钟,太棒了!

更换背景

上面只是抹除了老照片里的背景,新的背景插入还需要其它软件来完成,而插入图片可以通过专业图片处理软件的图层操作来添加,比如 Photoshop 等等。

但是我要介绍一个非常好用的开源免费软件给大家,这样你就不需要为盗版 license 烦恼了,我怎么那么喜欢为大伙操碎了心?

GIMP 接受挑战!GIMP 跨平台,在各个主流操作系统都有完好的支持。

先来看看效果,我把小狗的背景换到了更加喜庆的场合下,你看

怎么弄的?

  1. 打开 GIMP,然后菜单栏 文件 --> 打开,选中上面 Rembg 输出的已抹去背景的小狗图 dog_without_bg.jpeg。

  2. 再次菜单栏 文件 --> 作为图层打开,选中一张你觉得很喜庆的照片,这张照片将作为新背景图。我选了一张放鞭炮之后的照片,鞭炮象征着热闹,再好不过了。

  3. 这时候,你会发现新背景图在最前面,把其它内容都遮盖了。你可以在主窗口的右边,有个图层窗口,其中列出来了有两个图层,最上面是最后打开的新背景图,下面才是没有背景的小狗图,这样你可以拖动其中一张,让它俩互换顺序,然后你就可以看到小狗已经站在新背景图里了。

  4. 再来一些后期大小位置调整,这里略过。。。

相关推荐
SpikeKing12 分钟前
LLM - 使用 LLaMA-Factory 微调大模型 环境配置与训练推理 教程 (1)
人工智能·llm·大语言模型·llama·环境配置·llamafactory·训练框架
小码的头发丝、19 分钟前
Django中ListView 和 DetailView类的区别
数据库·python·django
黄焖鸡能干四碗41 分钟前
信息化运维方案,实施方案,开发方案,信息中心安全运维资料(软件资料word)
大数据·人工智能·软件需求·设计规范·规格说明书
42 分钟前
开源竞争-数据驱动成长-11/05-大专生的思考
人工智能·笔记·学习·算法·机器学习
ctrey_1 小时前
2024-11-4 学习人工智能的Day21 openCV(3)
人工智能·opencv·学习
攻城狮_Dream1 小时前
“探索未来医疗:生成式人工智能在医疗领域的革命性应用“
人工智能·设计·医疗·毕业
Chef_Chen1 小时前
从0开始机器学习--Day17--神经网络反向传播作业
python·神经网络·机器学习
千澜空1 小时前
celery在django项目中实现并发任务和定时任务
python·django·celery·定时任务·异步任务
学习前端的小z1 小时前
【AIGC】如何通过ChatGPT轻松制作个性化GPTs应用
人工智能·chatgpt·aigc
斯凯利.瑞恩2 小时前
Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻居)分类分析银行拉新活动挖掘潜在贷款客户附数据代码
python·决策树·随机森林