首页 > 编程语言 >Python + AI:完美抠图,更换背景

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

时间:2023-12-18 23:33:05浏览次数:37  
标签:venv Python dog jpeg python AI without 完美 root

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

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

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

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

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

环境准备--linux

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

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

$ cat /etc/issue
Ubuntu 20.04.4 LTS
$ python -V
Python 3.8.10

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

$ python3 -V

环境

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

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

$ python -m venv .venv
$ source .venv/bin/activate
(.venv) $ 

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

安装 Rembg

(.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,文件路径都在当前文件夹下。

(.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,花费的时间也不过十几秒钟,可能我的机器比较高级?其实硬件放在现在就是中规中矩的配置,你一点也不需要为此担心硬件。

人物篇

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

(.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. 再来一些后期大小位置调整,这里略过。。。

标签:venv,Python,dog,jpeg,python,AI,without,完美,root
From: https://blog.51cto.com/englyf/8879347

相关文章

  • TLSv1 Record Layer: Alert (Level: Fatal, Description: Handshake Failure)
    tls握手,客户端发送clienhello后就收到服务器端回的失败,抓包如下: 解决方案:本以为是ssl::context参数的设置原因,各种尝试,花了我两天时间,还ao了两个大夜。最终定位到具然是SNI设置的不对。查了一下SNI的作用,才上慌然大悟,这个参数要设置成访问目标服务器的域名。 不是我说的,T......
  • PyCharm中New Directory 和 New Python Package的区别
    如题,这是一个很简单也很基础的问题,先看不同操作的结果有什么不同结果1:项目下出现了一个空“文件夹” 结果2:项目下多了一个“PythonPackage”,该package下包含了一个“__init__.py”文件,该py文件是空的如果把该py文件删掉后,package也就变成了directory  所以什么是__in......
  • BIgdataAIML-IBM-A neural networks deep dive - An introduction to neural networks
    https://developer.ibm.com/articles/cc-cognitive-neural-networks-deep-dive/ByM.TimJones,PublishedJuly23,2017Neuralnetworkshavebeenaroundformorethan70years,buttheintroductionofdeeplearninghasraisedthebarinimagerecognitionand......
  • 发布 VectorTraits v1.0, 它是C#下增强SIMD向量运算的类库
    发布VectorTraitsv1.0,它是C#下增强SIMD向量运算的类库zyl910吃瓜群众​关注 你经常看C#话题的内容发布VectorTraitsv1.0,它是C#下增强SIMD向量运算的类库VectorTraits:SIMDVectortypetraitsmethods(SIMD向量类型的特征方法).N......
  • 初中英语优秀范文100篇-031My Daily Life-我的日常生活
    PDF格式公众号回复关键字:SHCZFW031记忆树1Mydailylifeisinterestingandcolorful.翻译我的日常生活有趣且丰富多彩。简化记忆生活句子结构主语:Mydailylife(我的日常生活)谓语:is(是)宾语:interestingandcolorful(有趣且多彩的)这句话的意思是“我的日常生活是有......
  • Python 使用 platform 判断检测操作系统的方法
    ​ 在Python中,可以使用platform模块来获取操作系统的信息。其中,platform.system()方法可以获取操作系统的名称。详细文档:Python使用platform判断检测操作系统的方法-CJavaPy使用platform.system()方法判断操作系统以下是一个使用platform.system()方法判断操作......
  • jotai
    有个react状态管理库叫jotai,日本鬼子写的,tiktok和adobe都在用。GitHub-pmndrs/jotai:PrimitiveandflexiblestatemanagementforReact......
  • Python NumPy 图像处理
    ​ 1、读取图像需要使用图像处理库来读取图像文件,如Pillow,并将其转换为NumPy数组。示例代码:PythonNumPy图像处理-CJavaPy2、保存图像使用NumPy处理后的图像可以再次转换为Pillow图像 示例代码:PythonNumPy图像处理-CJavaPy3、转换为灰度图可以通过将RGB值转换为......
  • BigdataAIML-ML-Models for machine learning Explore the ideas behind machine lear
    最好的机器学习教程系列:https://developer.ibm.com/articles/cc-models-machine-learning/ByM.TimJones,PublishedDecember4,2017ModelsformachinelearningAlgorithmsusedinmachinelearningfallroughlyintothreecategories:supervised,unsupervised,and......
  • Python:设计模式
    一、设计模式与面向对象1.1设计模式  软件设计阶段针对反复出现的问题提出的统一解决方案。每类问题的解决方案都被系统的命名为XX设计模式。1.2面向对象  按照一件事的组成元素分别制作进行组装。这些元素分为属性与接口。1.2.1三大特性  封装:将对象封装为类,将对......