Python装逼实用神器:用Python代码来实现一键批量抠图

今天给大家分享一个Python伪装的实用神器。在日常生活或工作中,经常会遇到想把一张照片中的人物剪下来,然后再拼接到其他照片上的人。专业人士可以使用 PhotoShop 的“魔杖”工具剪切图片,而非专业人士则可以使用各种美图 APP。复杂的图像可能需要更长的时间。所以今天给大家展示第三种抓图方式——使用Python代码实现一键批量抠图。

1. 准备 – 安装 paddlepaddle

既然要装,准备是必不可少的。所谓“站在巨人的肩膀上,事半功倍”,我们这里的“巨人”就是paddlepaddle,中文名是“飞桨”,那么这个paddlepaddle是什么?

它是“一个源于工业实践的开源深度学习平台,致力于让深度学习技术的创新和应用变得更简单”,说白了,我已经帮你实现了深度学习的底层框架,只要只要你有创意,你就可以在我的平台上用少量的简单代码轻松完成。它的官方网站是:。

安装比较简单。官网首页有安装说明。您可以通过“安装”菜单找到各个系统的安装细节和注意事项。如下图,我们使用pip方式安装安装CPU版本。

本文以MacOS系统为例:

我们先执行如下命令安装(推荐使用百度源码):

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

或者:

python3 -m pip install paddlepaddle -i https://pypi.tuna.tsinghua.edu.cn/simple

从安装过程可以看出,安装paddlepaddle库时,需要安装以下依赖库:

Installing collected packages: pathlib, click, joblib, regex, tqdm, nltk, gast, rarfile, pyyaml, funcsigs, paddlepaddle
  Running setup.py install for pathlib ... done
  Running setup.py install for regex ... done
  Running setup.py install for nltk ... done
  Running setup.py install for rarfile ... done
  Running setup.py install for pyyaml ... done
Successfully installed click-7.1.2 funcsigs-1.0.2 gast-0.3.3 joblib-0.14.1 nltk-3.5 paddlepaddle-1.8.0 pathlib-1.0.1 pyyaml-5.3.1 rarfile-3.1 regex-2020.5.7 tqdm-4.46.0

安装成功后,我们在python环境下测试是否安装成功(这个也是按照官网说明做的),我们切换到python环境,运行如下代码:

➜  ~ python3
Python 3.7.4 (default, Jul  9 2019, 18:15:00)
[Clang 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
 import paddle.fluid
 paddle.fluid.install_check.run_check()
Running Verify Fluid Program ...
Your Paddle Fluid works well on SINGLE GPU or CPU.
W0512 17:41:31.037240 2844976000 build_strategy.cc:170] fusion_group is not enabled for Windows/MacOS now, and only effective when running with CUDA GPU.
W0512 17:41:31.043959 2844976000 fuse_all_reduce_op_pass.cc:74] Find all_reduce operators: 2. To make the speed faster, some all_reduce ops are fused during training, after fusion, the number of all_reduce ops is 1.
Your Paddle Fluid works well on MUTIPLE GPU or CPU.
Your Paddle Fluid is installed successfully! Let's start deep Learning with Paddle Fluid now

如果可以看到 Your Paddle Fluid 安装成功,说明安装成功。

2. 准备工作 – 安装 paddlehub

要实现本文的一键批量抓拍需求,需要用到PaddleHub人像分割模型。

PaddleHub是基于PaddlePaddle开发的预训练模型管理工具,可以借助预训练模型促进迁移学习。目前的预训练模型涵盖图像分类、目标检测、词法分析、语义模型、情感分析、视频分类、图像生成、图像分割、文本审查、关键点检测等主流模型。

PaddleHub官网:

https://www.paddlepaddle.org.cn/hub

PaddleHub项目地址:

https://github.com/PaddlePaddle/PaddleHub

更多PaddleHub预训练模型教程合集课程可看:

https://aistudio.baidu.com/aistudio/course/introduce/1070

介绍完项目,我们开始在线安装paddlehub:

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

或者按照指定版本安装:

pip install paddlehub==1.6.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

安装完成后,我们就可以开始使用了。

3.一键式按钮地图代码实现

图片[1]-Python装逼实用神器:用Python代码来实现一键批量抠图-老王博客

我们的实现步骤很简单:

导入模块

加载模型

获取图片文件

调用模块剪切

按键映射功能主要使用PaddleHub DeepLabv3+模型deeplabv3p_xception65_humanseg。

我们来看看具体的按键映射代码(demo.py)的实现:

import os
import paddlehub as hub
# 加载模型
humanseg = hub.Module(name='deeplabv3p_xception65_humanseg')  
base_dir = os.path.abspath(os.path.dirname(__file__))
# 获取当前文件目录
path = os.path.join(base_dir, 'images/')
# 获取文件列表
files = [path + i for i in os.listdir(path)]  
print(files)
# 抠图
results = humanseg.segmentation(data={'image': files})  
for result in results:
    print(result)

在例子中,我把图片放在了code文件夹同级的images文件夹中。运行代码后,输出的抠图会自动放到代码同级的humanseg_output目录下。文件名与原始图像相同。同名,但文件格式为png。

这里推荐一下我自己搭建的Python自动化学习:644956177,群里都是学习Python自动化测试的,如果你正在学习Python,小编欢迎你的加入,大家都是测试开发党,不定期分享干货(仅与Python软件测试相关),包括我自己编译的2021最新Python自动化资料。

示例图像目录包含 9 张图片。为了兼顾不同读者的口味,示例图片中既有帅哥美女,也有放大图,如下:

运行程序后,上述示例代码的结果如下所示。

运行成功后,在humanseg_output目录下生成9张图片。同样,按钮图片的结果如下:

我们可以看到,程序识别出每张图片中的人(可以是一个人,也可以是多人),并将其裁剪成一张白色背景的图片。部分细节有瑕疵,不过看起来还不错。

4.需要注意的坑

运行示例代码时,如果没有单独安装模型deeplabv3p_xception65_humanseg,执行前会默认自动安装。但是安装完成后,执行结果并没有生成快照结果和humanseg_output目录,输出结果类似如下:

一般情况下,在生成按钮图数据和打印结果时,应该类似于下面的结构:

可以通过单独安装模型并指定安装版本来解决。

hub install deeplabv3p_xception65_humanseg==1.0.0

具体原因没有详细研究。默认自动安装模型时,版本为1.2.0。猜测是模型版本不兼容造成的。

5.总结

本文基于paddlepaddle平台,使用PaddleHub DeepLabv3+模型(deeplabv3p_xception65_humanseg),使用简单的五行代码实现批量抠图。有的读者可能会认为上面例子中提供的代码行数超过了五行代码。在上面的例子中,只需要以下五行就可以真正实现按钮图的主要代码:

humanseg = hub.Module(name='deeplabv3p_xception65_humanseg')  
base_dir = os.path.abspath(os.path.dirname(__file__))
path = os.path.join(base_dir, 'images/')
files = [path + i for i in os.listdir(path)]  
results = humanseg.segmentation(data={'image': files})  

使用PaddleHub DeepLabv3+模型,不仅可以实现一键按键图,还可以进行图片合成、视频合成等,用好不仅解放了人们的双手和眼睛,还为大家提供了一个宝地一些程序员/程序员的强制工具箱。下次遇到担心抠图的妹子或女朋友results软件自动扣钱,别忘了拿出神器,赢取你的心!

Paddlepaddle 是一个开源深度学习平台。本文介绍的按钮图训练模型只是冰山一角。实战训练预测模型的种类要多得多。读者可以挖掘更多的场景组合。

如果你已经在工作但经常觉得困难,觉得自己考试成绩不够好想继续深造results软件自动扣钱,或者想转行又怕学不成,可以关注我【软件测试小道】,可以用公众号获取最新的软件测试工厂面试资料和Python自动化、接口、框架搭建学习资料!

如果我的博客对你有帮助,如果你喜欢我的博客内容,请一键“点赞”“评论”“收藏”!

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论