比PS还好用!Python 20行代码批量抠图-Python 实用宝典

比PS还好用!Python 20行代码批量抠图

在日常的工作和生活中,我们经常会遇到需要抠图的场景,即便是只有一张图片需要抠,也会抠得我们不耐烦,倘若遇到许多张图片需要抠,这时候你的表情应该会很有趣。

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

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

1.准备

为了实现这个实验,Python是必不可少的,如果你还没有安装Python,建议阅读我们的这篇文章哦:超详细Python安装指南

然后,我们需要安装百度的paddlepaddle, 进入他们的官方网站就有详细的指引:
https://www.paddlepaddle.org.cn/install/quick

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

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

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

还需要安装paddlehub:

pip install -i https://mirror.baidu.com/pypi/simple paddlehub

2.编写代码

整个步骤分为三步:

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

import os
import sys
import 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的文件夹。这里面存放的是已经抠图成功的图片。

本文20行代码及所有图片,请在公众号后台回复:Python自动抠图 下载。

3.结果分析

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

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

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

我们的文章到此就结束啦,如果你希望我们今天的Python 教程,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦有任何问题都可以在下方留言区留言,我们都会耐心解答的!


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

Python实用宝典
本文由 Python 实用宝典 作者:Python实用宝典 发表,其版权均为 Python 实用宝典 所有,文章内容系作者个人观点,不代表 Python 实用宝典 对观点赞同或支持。如需转载,请注明文章来源。
12
Python实用宝典

评论:

14 条评论,访客:0 条,站长:0 条

100%好评

  • 好评:(100%)
  • 中评:(0%)
  • 差评:(0%)

最新评论

  1. kaifengace
    kaifengace发布于: 
    评分:

    你好 请问我抠完图后看起来没问题,但点开来查看的时候白色背景就变成黑色背景了,这是为什么呢?

  2. kaifengace
    kaifengace发布于: 
    评分:

    谢谢,我试了一下,行得通。还有个问题是输出文件的格式是由模型决定的吗,如果我们能在代码里修改为JPG格式呢这样就能避免不必要的麻烦。

    • Python实用宝典
      Python实用宝典发布于: 

      模型决定的,可以用下面这个方法格式转换:

      from PIL import Image
      orin = Image.open(‘a.png’)
      orin.save(‘a.jpg’)

      不过有些人可能就需要PNG图片,就不写到代码里面了。

  3. kaifengace
    kaifengace发布于: 
    评分:

    好的好的 谢谢!

  4. 公良令
    公良令发布于: 

    为什么我运行之后提示mklml.dll not found啊

  5. temp
    temp发布于: 

    AttributeError: module ‘paddlehub’ has no attribute ‘Module’
    百度也没有解决办法,咋整啊

  6. 滴滴答
    滴滴答发布于: 

    为啥我的没有那个生成的目录呀,看不到扣好的图在哪里

  7. jlh3000
    jlh3000发布于: 

    C:\Users\Administrator\PycharmProjects\pythonProject\venv\Scripts\python.exe C:/Users/Administrator/PycharmProjects/pythonProject/批量抠图.py
    Traceback (most recent call last):
    File “C:/Users/Administrator/PycharmProjects/pythonProject/批量抠图.py”, line 3, in
    import paddlehub as hub
    File “C:\Users\Administrator\PycharmProjects\pythonProject\venv\lib\site-packages\paddlehub\__init__.py”, line 27, in
    from . import module
    File “C:\Users\Administrator\PycharmProjects\pythonProject\venv\lib\site-packages\paddlehub\module\__init__.py”, line 16, in
    from . import module
    File “C:\Users\Administrator\PycharmProjects\pythonProject\venv\lib\site-packages\paddlehub\module\module.py”, line 29, in
    import paddle.fluid as fluid
    ModuleNotFoundError: No module named ‘paddle.fluid’

    • Python实用宝典
      Python实用宝典发布于: 

      你执行文件的Python和你用pip安装模块的Python应该不是同一个,请排查一下

    • Python实用宝典
      Python实用宝典发布于: 

      你执行文件的Python和你用pip安装的Python应该不是同一个,请排查一下

发表评论