python实现Alpha通道抠图的原理 python人工智能抠图_paddle

python实现Alpha通道抠图的原理 python人工智能抠图_抠图_02

抠图前 vs Python自动抠图后

在日常的工作和生活中,我们经常会遇到需要抠图的场景,即便是只有一张图片需要抠,也会抠得我们不耐烦,倘若遇到许多张图片需要抠,那就……

python实现Alpha通道抠图的原理 python人工智能抠图_抠图_03

但你有没想过,Python也能成为这样的一种工具:在只有一张图片,需要细致地抠出人物的情况下,能帮你减少抠图步骤;在有多张图片需要抠的情况下,能直接帮你输出这些人物的基本轮廓,虽然不够细致,但也够用了。

DeepLabv3+ 是谷歌 DeepLab语义分割系列网络的最新作 ,这个模型可以用于人像分割,支持任意大小的图片输入。如果我们自己来实现这个模型,那可能会非常麻烦,但是幸运的是,百度的paddle hub已经帮我们实现了,我们仅需要加载模型对图像进行分割即可。

1.准备

为了实现这个实验,Python是必不可少的,另外我们需要安装百度的 paddlepaddle,进入他们的官方网站就有详细的指引:

https://www.paddlepaddle.org.cn/install/quick

python实现Alpha通道抠图的原理 python人工智能抠图_paddle_04

根据你自己的情况选择这些选项,最后一个CUDA版本,由于本实验不需要训练数据,也不需要太大的计算量,所以直接选择CPU版本即可。选择完毕,下方会出现安装指引,不得不说,Paddlepaddle这些方面做的还是比较贴心的。

python实现Alpha通道抠图的原理 python人工智能抠图_paddle_05

要注意,如果你的 python3 环境变量里的程序名称是 python,记得将 python3 xxx 语句改为python xxx 如下进行安装:

python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple

2.编写代码

整个步骤分为三步:

1.加载模型2.指定待抠图的图片目录
3.抠图

import osimport sysimport paddlehub as hub # 1.加载模型humanseg = hub.Module(name="deeplabv3p_xception65_humanseg") # 2.指定待抠图图片目录path = './source/'files = []dirs = os.listdir(path)for diretion in dirs:    files.append(path + diretion) # 3.抠图results = humanseg.segmentation(data={"image": files}) for result in results:    print(result['origin'])    print(result['processed'])

总共不到20行代码。抠图完毕后会在本地文件夹下产生一个叫做 humanseg_output 的文件夹。这里面存放的是已经抠图成功的图片。

python实现Alpha通道抠图的原理 python人工智能抠图_抠图_06

python实现Alpha通道抠图的原理 python人工智能抠图_代码 抠图_07

python实现Alpha通道抠图的原理 python人工智能抠图_代码 抠图_08

python实现Alpha通道抠图的原理 python人工智能抠图_抠图_09

3.结果分析

不得不承认,谷歌的算法就素厉害啊。只要背景好一点,抠出来的细节都和手动抠的细节不相上下,甚至优于人工手段。

不过在背景和人的颜色不相上下的情况下,会产生一些问题,比如下面这个结果:



python实现Alpha通道抠图的原理 python人工智能抠图_python_10

python实现Alpha通道抠图的原理 python人工智能抠图_代码 抠图_11

背后那个大叔完全被忽略掉了(求大叔的内心阴影面积)。尽管如此,这个模型是我迄今为止见过的最强抠图模型,没有之一。

作者:Ckend