今天给大家分享一款Python装逼实用神器

在日常生活或者工作中,经常会遇到想将某张照片中的人物抠出来,然后拼接到其他图片上去。专业点的人可以使用 PhotoShop 的“魔棒”工具进行抠图,非专业人士则使用各种美图 APP 来实现,但是这两类方式毕竟处理能力有限,一次只能处理一张图片,而且比较复杂的图像可能耗时较久。那今天就来向大家展示第三种扣图方式——用 Python代码来实现 一键批量抠图。

1. 准备工作- 安装paddlepaddle

既然要装逼,准备工作是少不了的。所谓“站在巨人的肩膀上,干起活来事半功倍”,我们这里的“巨人”就是 paddlepaddle 了,中文名称叫“飞桨”,那么这个 paddlepaddle 是什么呢?

它是“源于产业实践的开源深度学习平台,致力于让深度学习技术的创新与应用更简单”,直白点就是我帮你实现了深度学习底层框架,你只要有创意就可以在我平台上运用少量简单代码轻松实现。它的官网是:https://www.paddlepaddle.org.cn/ 。

它的安装比较简单,官网首页就有安装指引,可以通过「安装」菜单,查找到各个系统安装详细及注意事项,如下图所示,我们这里根据官网的安装指引,使用 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, paddlepaddleRunning setup.py install for pathlib ... doneRunning setup.py install for regex ... doneRunning setup.py install for nltk ... doneRunning setup.py install for rarfile ... doneRunning 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 is installed successfully 就表示安装成功了。

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. 一键扣图代码实现

我们的实现步骤很简单:

  • 导入模块

  • 加载模型

  • 获取图片文件

  • 调用模块抠图

其中扣图功能主要采用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)

示例中,我将图片放在代码文件夹的同级目录 images文件夹下,运行代码后,输出的抠图图片会自动放在代码同级目录的 humanseg_output 目录下,文件名称跟原图片的名称相同,但是文件格式是 png 。

其中示例 images 目录下放了9张图片,为了兼顾不同读者喜好的口味,示例图片中既包括了帅哥,也有美女哦,并且将他们缩略图放大了,如下:

原图片

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

运行成功后,在 humanseg_output 目录下生成了9张图片,同样的,扣图的结果如下所示:

抠图图片

我们可以看到程序将每张图片中的人物(可以是一个人,也可以是多个人)识别出来,并且抠出来成图,背景是白色。虽然有些细节处还有些许瑕疵,但是看起来还算不错。

4. 需要注意的坑

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

正常情况下,在生成扣图数据,打印results时,应该是类似如下结构才对:

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

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+模型 不仅可以实现一键扣图,还可以进行图片合成,视频合成等。利用好它不仅解放了人的双手和双眼,而且为某些程序猿/程序媛的装逼工具箱提供了一件宝器。下次如果碰到某个女生或者闺蜜在为抠图发愁,别忘了掏出神器,赢得芳心哦!

paddlepaddle作为一款开源的深度学习平台,本文介绍的扣图训练模型只是其中的冰山一角,实战训练预测模型种类还远远不止,更多的场景结合,读者们可自行挖掘。

新书推荐


当当网最近疯了,全场图书半价,如果你想系统性提升自动化技术,下方作者新书,现在入手,划算!

推荐:

  1. 整天写CRUD没劲,写了个Web服务器

  2. 拍一拍的正确用法

  3. python中最高频的模块

关注我,每天分享实用小知识

扣图神器, 用Python 5行代码解决相关推荐

  1. Python第一行代码

    Python第一行代码 前言 'module' object is not callable 前言 其实说起来也不算是Python的第一行代码,或第一次写Python,只不过在学习Python的时候遇 ...

  2. python人脸识别代码百度ai_强大的AI!Python几行代码,就能预测未来孩子的长相?...

    这次,将百度智能云中的人脸识别功能与python结合起来进行实验花了一些时间.结果非常令人满意,而且过程非常简单而不复杂.或许,你可以整合你孩子的外貌.让我们一起敲击键盘. 准备百度人工智能开放平台账 ...

  3. python 250行代码开发一个贪吃蛇

    python 250行代码开发一个贪吃蛇 1. 前提工作准备 2. 全局变量的定义与包的导入 3. 游戏开始界面初始化 4. 游戏界面的设置 4.1 游戏界面,使用一个Point类进行划分 4.2 预 ...

  4. Python 8行代码模拟鼠标自动删除微信收藏

    上回我们提到了用 pyuserinput 进行模拟键盘鼠标操作,结果发现很多同学都回复无法安装成功,即便安装成功了还是存在很多问题.确实,pyuserinput存在不少问题,包括其安装的pymouse ...

  5. python人脸识别毕业设计-Python 40行代码实现人脸识别功能

    前言 很多人都认为人脸识别是一项非常难以实现的工作,看到名字就害怕,然后心怀忐忑到网上一搜,看到网上N页的教程立马就放弃了.这些人里包括曾经的我自己.其实如果如果你不是非要深究其中的原理,只是要实现这 ...

  6. 网易数读所有精致图片,Python百行代码搞定!

    微信公众号原文链接 网易数读是一个数据新闻可视化栏目,致力于提供轻量化的阅读体验.其内容往往是结合时下新闻热点将相关数据可视化处理,并以精致的图文形式呈现出来. 举个栗子,大家感受一下人家的风格: 图 ...

  7. python第一行代码_“少年py”001:下载Python软件,写第一行代码

    Python,网络上称之为人工智能时代的第一编程语言. 功能超级强大,能做科学计算.大数据处理.网络爬虫.游戏开发等等. 但是说实话,彬哥玩Python还没到这么厉害的程度,究竟怎么实现,我们不着急, ...

  8. 支付宝新年五福新玩法,我用Python百行代码来实现!

    公众号 "菜鸟学Python" 第441篇原创,设为 "星标",一起学Python! 年关将近,支付宝又推出了一年一度的集五福的活动,今年的五福玩法相比于前几年 ...

  9. python开发ps插件_你还在用PS?Python 20行代码批量抠图

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

最新文章

  1. 斯坦福CS330 2019秋季课程视频全新上线,专注多任务与元学习
  2. Google上面有自己给你标注好的数据集
  3. hihoCoder 1052 基因工程 最详细的解题报告
  4. [蓝桥杯][算法训练VIP]王、后传说(深搜+回溯)
  5. 马云害怕的事还是发生了
  6. [蓝桥杯][基础练习VIP]Huffuman树
  7. matlab图像增强分段线性函数_图像增强、锐化,利用 PythonOpenCV 来实现 4 种方法!...
  8. mysql 端口time_wait_linux上大量tcp端口处于TIME_WAIT的问题
  9. 锐角三角函数用计算机怎么算,用计算器求锐角三角函数值和由锐角三角函数值求锐角.doc...
  10. 在centos6.5中安装github的客户端git
  11. 小蚂蚁学习C语言(27)——C语言中的进制转换
  12. 项目管理知识体系指南(PMBOK 指南) 第6版——笔记
  13. c语言实现开方,c语言开方(c语言开平方代码)
  14. python自动生成和文件同名的文件夹,并将文件移动到同名文件夹中
  15. 信息安全技术--轮转机密码
  16. ## KEIL 5在MDK注册过程中LIC无法添加的问题解决:
  17. Kanban看板管理实践精要
  18. Android 7.1 高德导航和蓝牙音乐卡顿问题 蓝牙电话和高德语音播报混音问题
  19. c#连接sqlserver数据库-百分百能连接成功的代码超详细
  20. Tekton构建Springboot项目操作手册

热门文章

  1. 【好题分享】适合C++初学者(数组的定义与初始化)
  2. 二分查找的左右逼近法
  3. Spring中Bean生命周期、实例化与初始化
  4. 【网络安全学习笔记】
  5. 利用ChatGPT做Prompt自动优化
  6. 固态硬盘坏了数据能恢复吗?(已解决)
  7. 名帖325 启功 行书《行书帖选》
  8. VB--LBound() UBOUND()函数
  9. 响应式背景图片的几种方法
  10. 谢文的yiqi有戏没?(续)